<?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=Clemens+Helfmeier</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=Clemens+Helfmeier"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Clemens_Helfmeier"/>
	<updated>2026-04-11T03:56:57Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9734</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9734"/>
		<updated>2005-10-24T13:50:24Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Compiler einrichten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich (Binaries stehen weiter unten).&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 und GNU Arm 3.4 und 4.0 für Cygwin gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; (&#039;&#039;4.0.1&#039;&#039; für den 4.0er Compiler) nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Projekt Vorlage ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Diese kann anschließend für ein neues Projekt kopiert werden (per Explorer/Arbeitsplatz o.ä.). Leider kann diese Aufgabe nicht durch ein Template gereglt werden, da dieses die nötigen Einstellungen nicht unterstützt. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Board.h&#039;&#039;: Definitionen für das verwendete System (nicht zwingend erforderlich)&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9694</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9694"/>
		<updated>2005-10-24T13:49:46Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Bezugsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich (Binaries stehen weiter unten).&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 und GNU Arm 3.4 und 4.0 für Cygwin gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Projekt Vorlage ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Diese kann anschließend für ein neues Projekt kopiert werden (per Explorer/Arbeitsplatz o.ä.). Leider kann diese Aufgabe nicht durch ein Template gereglt werden, da dieses die nötigen Einstellungen nicht unterstützt. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Board.h&#039;&#039;: Definitionen für das verwendete System (nicht zwingend erforderlich)&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9693</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9693"/>
		<updated>2005-10-24T13:45:27Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Bezugsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich (Binaries stehen weiter unten).&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 und GNU Arm 3.4 für Cygwin gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Projekt Vorlage ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Diese kann anschließend für ein neues Projekt kopiert werden (per Explorer/Arbeitsplatz o.ä.). Leider kann diese Aufgabe nicht durch ein Template gereglt werden, da dieses die nötigen Einstellungen nicht unterstützt. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Board.h&#039;&#039;: Definitionen für das verwendete System (nicht zwingend erforderlich)&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9692</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9692"/>
		<updated>2005-10-23T09:17:23Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Vorlage Projekt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Projekt Vorlage ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Diese kann anschließend für ein neues Projekt kopiert werden (per Explorer/Arbeitsplatz o.ä.). Leider kann diese Aufgabe nicht durch ein Template gereglt werden, da dieses die nötigen Einstellungen nicht unterstützt. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Board.h&#039;&#039;: Definitionen für das verwendete System (nicht zwingend erforderlich)&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=9725</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=9725"/>
		<updated>2005-10-22T19:00:05Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Weitere Informationsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&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;[http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC Reihe von Philips]&#039;&#039;&#039; richten. Im späteren Verlauf werden allerdings auch ARM Mikrocontroller von Atmel (SAM7 &amp;amp; co.) behandelt.&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]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7 Board herstellen möchte kann man die Schaltpläne von den Olimex Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Alternativ zu Winarm: [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://guest.engelschall.com/~martin/lpc21xx/isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit ARM 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 Standard-Files 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 (Keine Interrupts z.B.). &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;[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial AVR-GCC Tutorial]&#039;&#039;&#039; werden grundlegende Basics 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 mithilfe 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 seine Verbindung mit dem 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;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 Files die Register (z.B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in das Header File welches includet wird ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
lpc2114.h aus &amp;lt;arch/philips/lpc2114.h&amp;gt; (Auch gültig für LPC2124)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.B. einen LPC2106 und bindet &amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt; ein bekommt man folgende Namen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind hilft ein Blick in das Header File des Controllers weiter.&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 einen bestimmten Pegel (HIGH / LOW)&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 der Port 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;
  GPIO0_IODIR|=(1&amp;lt;&amp;lt;25); // Pin 25 auf Ausgang setzen&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten möchte benutzt man IOCLR().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;
  GPIO0_IODIR|=(1&amp;lt;&amp;lt;25); // Pin 25 auf Ausgang setzen&lt;br /&gt;
  GPIO0_IOSET|=(1&amp;lt;&amp;lt;25); // Pin 25 auf HIGH schalten&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;
  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;/pre&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;pre class=&amp;quot;code&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings mit den I/O Ports arbeitet sollte man die IOSET und IOCLR Register benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;
&amp;lt;/pre&amp;gt;&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 (mithilfe von 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 der 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 des PLL gespeichert, z.B. der aktuelle Multiplikator-Wert etc.&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;pre class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
int PLOCK;&lt;br /&gt;
PLOCK=(1&amp;lt;&amp;lt;10); // Das PLOCK Bit gibt an, ob der PLL auf die konfigurierte Frequenz eingestellt ist&lt;br /&gt;
&lt;br /&gt;
SCB_PLLCFG = 4-1; // Multiplikator auf 4 stellen&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;
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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum SCB_PLLCFG=4-1; ? Der Multiplikatorwert 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2 ....&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 zum PLL findet man im User Manual( bei LPC2124 ab Seite 60 ).&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 Buses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/pre&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 Multplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;/pre&amp;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 wie die 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 eine richtige BAUD erzeugt.&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;
&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;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.co.uk/arm/lpc2000book/index.html Das LPC2000 Book]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Application Notes von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo Group &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;
* [[ARM-DevCpp]]: DevC++ für Cross-Compilieren auf ARM konfigurieren&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net Forum die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung ? Welches JTAG-Interface ?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-elf-GCC-Tutorial&amp;diff=9682</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=9682"/>
		<updated>2005-10-22T18:59:18Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Weitere Informationsquellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&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;[http://www.mikrocontroller.net/articles/LPC2000_Philips_ARM7TDMI-Familie LPC Reihe von Philips]&#039;&#039;&#039; richten. Im späteren Verlauf werden allerdings auch ARM Mikrocontroller von Atmel (SAM7 &amp;amp; co.) behandelt.&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]&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings selbst ein ARM7 Board herstellen möchte kann man die Schaltpläne von den Olimex Boards als gute Grundlage nehmen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Programme ==&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html WinARM] Entwicklungsumgebung&lt;br /&gt;
* Alternativ zu Winarm: [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://guest.engelschall.com/~martin/lpc21xx/isp/ lpc21isp] Kommandozeilen-Programmiertool für Windows &amp;amp; Linux&lt;br /&gt;
&lt;br /&gt;
== Startprobleme ==&lt;br /&gt;
Wenn man vor den ersten Versuchen mit ARM 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 Standard-Files 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 (Keine Interrupts z.B.). &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;[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial AVR-GCC Tutorial]&#039;&#039;&#039; werden grundlegende Basics 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 mithilfe 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 seine Verbindung mit dem 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;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 Files die Register (z.B. IOSET, IOCLR etc.) unterschiedliche Namen haben. Ein Blick in das Header File welches includet wird ist daher ratsam.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
lpc2114.h aus &amp;lt;arch/philips/lpc2114.h&amp;gt; (Auch gültig für LPC2124)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man z.B. einen LPC2106 und bindet &amp;quot;lpc210x_keil.h&amp;quot; aus &amp;lt;arch/philips/lpc210x_keil.h&amp;gt; ein bekommt man folgende Namen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daher:&lt;br /&gt;
Wenn Registernamen beim Compilieren nicht bekannt sind hilft ein Blick in das Header File des Controllers weiter.&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 einen bestimmten Pegel (HIGH / LOW)&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 der Port 25 von PORT0 auf Ausgang geschaltet und danach auf HIGH gelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;
  GPIO0_IODIR|=(1&amp;lt;&amp;lt;25); // Pin 25 auf Ausgang setzen&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Pin wieder auf LOW schalten möchte benutzt man IOCLR().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;
  GPIO0_IODIR|=(1&amp;lt;&amp;lt;25); // Pin 25 auf Ausgang setzen&lt;br /&gt;
  GPIO0_IOSET|=(1&amp;lt;&amp;lt;25); // Pin 25 auf HIGH schalten&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;
  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;/pre&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;pre class=&amp;quot;code&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings mit den I/O Ports arbeitet sollte man die IOSET und IOCLR Register benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;
&amp;lt;/pre&amp;gt;&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 (mithilfe von 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 der 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 des PLL gespeichert, z.B. der aktuelle Multiplikator-Wert etc.&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;pre class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
int PLOCK;&lt;br /&gt;
PLOCK=(1&amp;lt;&amp;lt;10); // Das PLOCK Bit gibt an, ob der PLL auf die konfigurierte Frequenz eingestellt ist&lt;br /&gt;
&lt;br /&gt;
SCB_PLLCFG = 4-1; // Multiplikator auf 4 stellen&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;
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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warum SCB_PLLCFG=4-1; ? Der Multiplikatorwert 1 wird mit 0 dargestellt. Ein 2x Multiplikator wäre 1 , ein 3x Multiplikator wäre 2 ....&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 zum PLL findet man im User Manual( bei LPC2124 ab Seite 60 ).&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 Buses einstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
SCB_VPBDIV = 1; // Teiler auf 1 stellen; Prozessor-Takt=Peripherie-Takt&lt;br /&gt;
&amp;lt;/pre&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 Multplikator und die Quarz-Taktfrequenz am Anfang seines Programms definieren, z.B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code&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;/pre&amp;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 wie die 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 eine richtige BAUD erzeugt.&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;
&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;
== Weitere Informationsquellen ==&lt;br /&gt;
* [http://www.hitex.co.uk/arm/lpc2000book/index.html Das LPC2000 Book]&lt;br /&gt;
* [http://www.semiconductors.philips.com/pip/LPC2124.html#applications Application Notes von Philips]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ Yahoo Group &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;
* [[ARM-DevCpp DevC++ für Cross-Compilieren auf ARM konfigurieren]]&lt;br /&gt;
&lt;br /&gt;
== Nützliche Threads ==&lt;br /&gt;
Hier landen Threads aus dem Mikrocontroller.net Forum die sich mit dem Thema ARM beschäftigen. Zum größten Teil sind dies besonders nützliche Threads oder solche, die über den Threadtitel nicht als ARM-Thread identifiziert werden können&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243735.html Internes und externes RAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243278.html Smalltalk mit einem Philips-Mitarbeiter]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-243596.html LPC2292 und DRAM]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-241416.html Olimex E2124 mit WinARM programmieren]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-235784.html Atmel ARM7 woher?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-240716.html Stromaufnahme vs. Speed]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-244434.html Spannungsregler für ARM Mikrocontroller]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245066.html ARM - Welche Entwicklungsumgebung ? Welches JTAG-Interface ?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-245332.html Brauche ich einen JTAG Adapter?]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247592.html AVR &amp;lt;-&amp;gt; ARM Vergleich]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-247048.html Ein paar Fragen zum LPC]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-249621.html Fragen zum LPC2106]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9684</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9684"/>
		<updated>2005-10-22T17:22:42Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Zusammenfassung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Board.h&#039;&#039;: Definitionen für das verwendete System (nicht zwingend erforderlich)&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9680</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9680"/>
		<updated>2005-10-22T17:22:01Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;br /&gt;
* [[ARM-elf-GCC-Tutorial]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9679</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9679"/>
		<updated>2005-10-22T17:18:45Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Dateieinstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei&#039;&#039;&#039; &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9678</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9678"/>
		<updated>2005-10-22T17:18:28Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Dateieinstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | &#039;&#039;&#039;Dateiname&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Inhalt&#039;&#039;&#039;&lt;br /&gt;
 | &#039;&#039;&#039;Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei), nicht zwingend erforderlich&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9677</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9677"/>
		<updated>2005-10-22T17:17:49Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Dateieinstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Board.h&lt;br /&gt;
 | Board-Definitionen&lt;br /&gt;
 | keine Änderungen möglich (Header-Datei)&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9676</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9676"/>
		<updated>2005-10-22T17:16:46Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Atmel AT91SAM7S-Serie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. Wird die Datei &#039;&#039;Cstartup_c.c&#039;&#039; von Martin Thomas verwendet, so empfiehlt es sich, auch die Datei &#039;&#039;Board.h&#039;&#039; und &#039;&#039;AT91SAM7S64.h&#039;&#039; zu übernehmen.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9675</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9675"/>
		<updated>2005-10-22T17:14:02Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Dateieinstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. In der &#039;&#039;Cstartup_c.c&#039;&#039;-Dateien von Martin Thomas muss noch die Zeile &#039;&#039;#include &amp;quot;Board.h&amp;quot;&#039;&#039; durch &#039;&#039;#include &amp;lt;AT91SAM7S64.h&amp;gt;&#039;&#039; ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Compiler&#039;&#039;&#039;: Hier muss der richtige Compiler ausgewählt werden (&#039;&#039;GNU ARM&#039;&#039;), der rest kann gelassen werden (alles auf &#039;&#039;No&#039;&#039;).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Build Optionen&#039;&#039;&#039;: Hier kann das Kästchen &#039;&#039;&#039;Überschreibe Ausgabe-Dateiname&#039;&#039;&#039; angewählt werden, wenn man keine *.exe Dateie erzeugen will. Ggf. &#039;&#039;ARM-C-Vorlage.elf&#039;&#039; eintragen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9674</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9674"/>
		<updated>2005-10-22T17:04:20Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Dateieinstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. In der &#039;&#039;Cstartup_c.c&#039;&#039;-Dateien von Martin Thomas muss noch die Zeile &#039;&#039;#include &amp;quot;Board.h&amp;quot;&#039;&#039; durch &#039;&#039;#include &amp;lt;AT91SAM7S64.h&amp;gt;&#039;&#039; ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9673</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9673"/>
		<updated>2005-10-22T17:02:00Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Atmel AT91SAM7S-Serie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas. In der &#039;&#039;Cstartup_c.c&#039;&#039;-Dateien von Martin Thomas muss noch die Zeile &#039;&#039;#include &amp;quot;Board.h&amp;quot;&#039;&#039; durch &#039;&#039;#include &amp;lt;AT91SAM7S64.h&amp;gt;&#039;&#039; ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Makefile&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9672</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9672"/>
		<updated>2005-10-22T16:57:43Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Vorlage Projekt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Makefile&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9671</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9671"/>
		<updated>2005-10-22T16:57:26Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Vorlage Projekt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt &#039;&#039;&#039;Datei-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt&#039;&#039;&#039; und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Makefile&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9670</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9670"/>
		<updated>2005-10-22T16:47:22Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Compiler einrichten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Dialog &#039;&#039;&#039;Werkzeuge&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Compiler Optionen&#039;&#039;&#039;. Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt (Datei-&amp;gt;Neu-&amp;gt;Projekt) und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Makefile&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9669</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9669"/>
		<updated>2005-10-22T16:45:18Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:Clemens Helfmeier|Clemens Helfmeier]] 18:45, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Compiler-Dialog (Werkzeuge -&amp;gt; Compiler Optionen). Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt (Datei-&amp;gt;Neu-&amp;gt;Projekt) und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup_c.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup_c.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist. Davon also die Finger lassen ;-).&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Makefile&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Zusammenfassung =&lt;br /&gt;
Im Projektverzeichnis befinden sich nun folgende Dateien:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.dev&#039;&#039;: DevC++-Projekt Datei&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.layout&#039;&#039;: DevC++-Datei&lt;br /&gt;
* &#039;&#039;Cstartup.S&#039;&#039;: Assembler-Startup-Datei&lt;br /&gt;
* &#039;&#039;Cstartup_c.c&#039;&#039;: C-Startup-Datei&lt;br /&gt;
* &#039;&#039;main.c&#039;&#039;: C-Programm Datei&lt;br /&gt;
* &#039;&#039;Makefile.inc&#039;&#039;: Zusätzliches Makefile&lt;br /&gt;
* &#039;&#039;mem.ld&#039;&#039;: Linker-Script&lt;br /&gt;
Nach einer Erfolgreichen Kompilation und Linkung kommen folgende Dateien hinzu:&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf&#039;&#039;: Ergebnis des Linkers&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.bin&#039;&#039;: Binärdatei für den Flash&lt;br /&gt;
* &#039;&#039;ARM-C-Vorlage.elf.lss&#039;&#039;: Dissassemblierte Binärdatei&lt;br /&gt;
* &#039;&#039;Cstartup.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Cstartup_c.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;main.o&#039;&#039;&lt;br /&gt;
* &#039;&#039;Makefile.win&#039;&#039;: Makefile von DevC++&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9668</id>
		<title>ARM-DevCpp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-DevCpp&amp;diff=9668"/>
		<updated>2005-10-22T16:38:36Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM]]&lt;br /&gt;
&lt;br /&gt;
-- [[Benutzer:84.191.33.140|84.191.33.140]] 18:33, 22. Okt 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt, wie man die Entwicklungsumgebung [http://www.bloodshed.net/dev/devcpp.html DevC++] so einstellt, dass sie mit dem [http://www.gnuarm.com/ GnuARM] Compiler arbeitet.&lt;br /&gt;
&lt;br /&gt;
= Bezugsquellen =&lt;br /&gt;
* GNU ARM toolchain für Windows und Linux ist unter [http://www.gnuarm.com/ http://www.gnuarm.com/] zum kostenlosen Download erhältlich.&lt;br /&gt;
* DevC++ ist eine IDE für C und C++ von Bloodshed. Download unter [http://www.bloodshed.net/dev/devcpp.html http://www.bloodshed.net/dev/devcpp.html]&lt;br /&gt;
&lt;br /&gt;
Die folgenden Schritte wurden mit DevC++ 4.9.9.2 gemacht.&lt;br /&gt;
&lt;br /&gt;
= DevC++ Einrichten =&lt;br /&gt;
&lt;br /&gt;
== Compiler einrichten ==&lt;br /&gt;
Zuerst muss man DevC++ mitteilen, dass auf dem System ein (weiterer) C-Compiler vorhanden ist. Dazu öffne man den Compiler-Dialog (Werkzeuge -&amp;gt; Compiler Optionen). Im &#039;&#039;&#039;Compiler Set konfigurieren&#039;&#039;&#039;-Abschnitt fügt man einen neuen Compiler durch betätigen der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste hinzu, z.B. GNU ARM. Im folgenden ist wichtig, dass in der Auswahlliste neben der &#039;&#039;&#039;+&#039;&#039;&#039;-Taste der neu hinzugefügte Compiler ausgewählt ist (GNU ARM).&lt;br /&gt;
&lt;br /&gt;
Beim Compileraufruf müssen einige Flags angefügt werden: &#039;&#039;&#039;Folgende Befehle beim Compiler-Aufruf hinzufügen&#039;&#039;&#039; ankreuzen und in das darunterliegende Textfeld folgendes Eintragen: &#039;&#039;-g -Os -std=c99&#039;&#039;.&lt;br /&gt;
Der Code wird dann auf Größe optimiert und der C99 Standard verwendet (for (int i = 0; i&amp;lt;10; i++){ ... } ist erlaubt)&lt;br /&gt;
&lt;br /&gt;
Ähnliches gilt für den Linker-Aufruf. Auch hier das Kächsten markieren und in das Textfeld darunter folgendes eintragen: &#039;&#039;-Tmem.ld -lc -lgcc -nostartfiles -g3 -nostdlib&#039;&#039;.&lt;br /&gt;
Damit wird das Linkerscript mem.ld automatisch verwendet (dies ist bei Atmel&#039;s SAM7-Controller nötig).&lt;br /&gt;
&lt;br /&gt;
In der Karteikarte &#039;&#039;&#039;Einstellungen&#039;&#039;&#039; sind i.A. keine Änderungen vorzunehmen. Der Compiler arbeitet einwandfrei, wenn alle Auswahlmöglichkeiten auf &#039;&#039;No&#039;&#039; stehen.&lt;br /&gt;
&lt;br /&gt;
Als nächstes öffnet man die Karteikarte &#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;. Hier müssen die Verzeichnisse des Compilers eingestellt werden. Vorher ggf. vorhandene Verzeichnisse mit &#039;&#039;Löschen&#039;&#039; entfernen.&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Programmdateien&#039;&#039;&#039;  das Verzeichnis für die GNU ARM Compilerdateien durch Eintragen in die Textzeile unter der Liste und anschließendem Betätigen von &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; einfügen (&#039;&#039;C:\Programme\GNUARM\bin&#039;&#039;).&lt;br /&gt;
In der Kartei &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039; muss das Verzeichnis &#039;&#039;lib&#039;&#039; eingefügt werden (&#039;&#039;C:\Programme\GNUARM\lib&#039;&#039;).&lt;br /&gt;
Die Kartei &#039;&#039;&#039;C-Includes&#039;&#039;&#039; ist etwas umfangreicher zu ergänzen: Hier müssen die Includes für den Compiler und den Controller eingefügt werden (&#039;&#039;C:\Programme\GNUARM\include\atmel&#039;&#039; für den Controller und &#039;&#039;C:\Programme\GNUARM\arm-elf\include\&#039;&#039; für die allgemeinen Funktionen des Compilers).&lt;br /&gt;
Ähnliches gilt für die &#039;&#039;&#039;C++-Includes&#039;&#039;&#039;, hier ist &#039;&#039;C:\Programme\GNUARM\include\c++\3.4.3&#039;&#039; nötig (noch nicht getestet, ggf. Unterverzeichnisse hinzufügen).&lt;br /&gt;
&lt;br /&gt;
Nun ist die Umgebung schon fast fertig eingerichtet. In der Karteikarte &#039;&#039;&#039;Programme&#039;&#039;&#039; müssen nun noch die richtigen Programme ausgewählt werden: Als &#039;&#039;&#039;gcc&#039;&#039;&#039; wird &#039;&#039;arm-elf-gcc.exe&#039;&#039; eingetragen, als &#039;&#039;&#039;g++&#039;&#039;&#039; &#039;&#039;arm-elf-g++.exe&#039;&#039; und als &#039;&#039;&#039;gdb&#039;&#039;&#039; &#039;&#039;arm-elf-gdb.exe&#039;&#039;. Nun kann dieser Dialog geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorlage Projekt ==&lt;br /&gt;
Als nächstes wird eine Vorlage gebraucht. Man erstelle ein neues Projekt (Datei-&amp;gt;Neu-&amp;gt;Projekt) und wähle in der Kategorie &#039;&#039;&#039;Basic&#039;&#039;&#039; &#039;&#039;Empty Project&#039;&#039; aus. Als Namen gebe man z.B. &#039;&#039;ARM-C-Vorlage&#039;&#039; an und wähle im rechten unteren Teil &#039;&#039;C-Projekt&#039;&#039; aus. Als nächstes wird gefragt, wo das Projekt angelegt werden soll. Danach wird ein leeres Projekt erzeugt.&lt;br /&gt;
&lt;br /&gt;
Als erstes fügt man eine Haupt-Datei hinzu: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neue Datei&#039;&#039;&#039;. Hier schreibt man eine Routine &#039;&#039;int main(void){ while(1); }&#039;&#039; mit einer Endlosschleife rein. Danach speichert man diese (&#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Speichern&#039;&#039;&#039;) unter dem Namen &#039;&#039;main.c&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Hersteller Spezifischer Code ==&lt;br /&gt;
Weiterhin muss dem Projekt noch der Startup-Code hinzugefügt werden (&#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Zum Projekt hinzufügen&#039;&#039;&#039;). Dieser ist je nach Zielkontroller ggf. etwas unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
=== Atmel AT91SAM7S-Serie ===&lt;br /&gt;
Für Atmel-Controller gibt es die Dateien &#039;&#039;Cstartup.c&#039;&#039; und &#039;&#039;Cstartup.S&#039;&#039;. Gute Vorlagen dieser Dateien gibt es z.B. in den [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ AT91SAM7 Examples] von Martin Thomas.&lt;br /&gt;
&lt;br /&gt;
=== Phillips LPC2100-Serie ===&lt;br /&gt;
Sanic: dein Part!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dateieinstellungen ==&lt;br /&gt;
Nun sind folgende Dateien vorhanden:&lt;br /&gt;
{| border=1&lt;br /&gt;
 | Dateiname&lt;br /&gt;
 | Inhalt&lt;br /&gt;
 | Einstellungen bei &#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Dateien&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.S&lt;br /&gt;
 | Assembler-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;, &#039;&#039;Überschreibe Build Kommando&#039;&#039;, Textfeld = &#039;&#039;$(CC) -c Cstartup.S -o Cstartup.o $(CFLAGS)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | Cstartup.c&lt;br /&gt;
 | C-Startup-Code&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
 | main.c&lt;br /&gt;
 | C-Programm&lt;br /&gt;
 | &#039;&#039;In Kompilation Einbeziehen&#039;&#039;, &#039;&#039;Ins Linken einbeziehen&#039;&#039;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen noch einige Einstellungen für das Projekt vorgenommen werden: &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; öffnet das benötigte Dialogfenster. Hier ist folgendes Wichtig:&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Allgemein&#039;&#039;&#039;: Der Projekt-Type muss &#039;&#039;Win32 Konsole&#039;&#039; sein,&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Dateien&#039;&#039;&#039;: Auf jede Datei klicken und die Einstellungen aus der obigen Tabelle übernehmen. Meine DevC++ stürzt ab, sobal die Priorität von &#039;&#039;1000&#039;&#039; verschieden ist.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Parameter&#039;&#039;&#039;: Hier muss der Controllertyp angegeben werden: &#039;&#039;-mcpu=arm7tdmi&#039;&#039; sowohl in das &#039;&#039;&#039;Compiler&#039;&#039;&#039;- als auch in das &#039;&#039;&#039;C++-Compiler&#039;&#039;&#039;-Textfeld einfügen.&lt;br /&gt;
* Karteikarte &#039;&#039;&#039;Makefile&#039;&#039;&#039;: Es muss ein externes Makefile eingefügt werden, um aus der *.elf Datei eine *.bin Datei zu erzeugen. Es kann auch gleich eine Disassemblierung veranlassen, näheres dazu weiter unten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
DevC++ erzeugt durch die Einstellungen automatisch ein Makefile (&#039;&#039;Makefile.win&#039;&#039;). Manchmal sind aber Erweiterungen hierzu nötig: Zuerst erstellt man eine neue Datei &#039;&#039;&#039;Datei&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Neu&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Quelldatei&#039;&#039;&#039;. Diese Datei braucht nicht dem Projekt hinzugefügt werden. Dann fügt man in diese folgendes ein:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
OBJDUMP = arm-elf-objdump&lt;br /&gt;
OBJCOPY = arm-elf-objcopy&lt;br /&gt;
&lt;br /&gt;
all-after:&lt;br /&gt;
	$(OBJCOPY) -O binary $(BIN) $(BIN).bin&lt;br /&gt;
	$(OBJDUMP) -h -S -d $(BIN) &amp;gt;&amp;gt; $(BIN).lss&lt;br /&gt;
&lt;br /&gt;
clean-custom:&lt;br /&gt;
	${RM} $(BIN).bin&lt;br /&gt;
	${RM} $(BIN).lss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anschließend speichert man diese Datei unter dem Namen &#039;&#039;Makefile.inc&#039;&#039; im Projektverzeichnis ab und trägt in dem Dialog &#039;&#039;&#039;Projekt&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;Projekt Optionen&#039;&#039;&#039; in der Karteikarte &#039;&#039;&#039;Make Datei&#039;&#039;&#039; in die Liste den Eintrag &#039;&#039;Makefile.inc&#039;&#039; ein (darunterliegendes Textfenster benutzen). Diese Makefile erzeugt aus dem Ergebnis der Kompilation eine Binärdatei (für SAM-BA) und eine Disassemblierung (.lss).&lt;br /&gt;
&lt;br /&gt;
== Linker-Script ==&lt;br /&gt;
Da der ARM fast immer über einen Assembler-Startup-Code gestartet und initialisiert wird, der nicht in den Standardbibliotheken enthalten ist, muss dem Linker noch mitgeteilt werden, dass der Assembler-Startup-Code ganz an den Anfang des Programms muss. Dies wird in der Datei mem.ld im Projektverzeichnis festgelegt. Diese gibt es z.B. in dem AT91SAM7S64-Beispiel von Martin Thomas, dort heisst sie allerdings &#039;&#039;AT91SAM7S64-ROM.ld&#039;&#039; und muss also umbenannt werden nach &#039;&#039;mem.ld&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend sollte das Projekt einwandfrei Kompilieren und eine &#039;&#039;*.elf.bin&#039;&#039; und &#039;&#039;*.elf.lss&#039;&#039; Datei erzeugen.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ Martin Thomas&#039; ARM-Projekt Seite]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9255</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9255"/>
		<updated>2005-09-21T21:01:41Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: ||&lt;br /&gt;
* 16 Kanäle: ||||| ||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||&lt;br /&gt;
* Modulair (erweiterbar X mal 8/16 Kanäle): ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : |&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : ||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: |&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : |&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; uU. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: |&lt;br /&gt;
* Seriell asyncron (RS232).: ||||&lt;br /&gt;
* USB......................: ||||| |||||||&lt;br /&gt;
* Parallelport.............: ||&lt;br /&gt;
* Ethernet.................: |&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||&lt;br /&gt;
* Linux   .: ||||| |||||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Anderes .: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(--[[Benutzer:84.182.244.75|84.182.244.75]] 10:43, 20. Sep 2005 (CEST) [ope])&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jeodch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die grossen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezueglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genanntenn Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrokontroller aus, der seine Ports polled um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) dar. Die CPLD z.B. von Xilinx können mit über 100MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einem SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, dem Speicherinterface und natürlich dem eigentlichen sampeln der Eingänge verantwortlich. Der Mikrokontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampelten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3.3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLD XC95000XL mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
= Die Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch heraustellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschliessen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatched und gemeinsam auf den nun 32bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit beträgt die SChreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man zB. eine 16bit Time-Stamp-Adresse (256k) mit einem 16bit Pattern speichern, oder ein 24bit Timestamps für 8bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige Verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heisseste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischen gespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup und Hold Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAM&#039;s. Dieser kann aber auch zum Lesen des SRAM&#039;s benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen. &lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.B. 512Kb SRAM&#039;s benutzen kann ohne dass der uC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlose an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
uC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Treshold) variabel sind und somit auch am flexibelsten für die versch. Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL Eingänge und das der Eingspg.bereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Treshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom uC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per uC mit anschließenden Tiefpaß mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Bei einem digitalen Eingangsteil bietet sich folgendes an:&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat/datasheets/74LVC14A_4.pdf 74lvc14] Hex inverting Schmitt-trigger with 5 V tolerant input; Dummerweise eben 6 Stck. - für 0,56? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74LVC541A_3.pdf 74LVC541] Octal buffer/line driver with 5 V tolerant inputs/outputs (3-state) für 0,71? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74HC_HCT7541_CNV_2.pdf 74HC7541] Octal Schmitt trigger buffer/line driver; 3-state für 9,85? bei R&amp;amp;S - damit können gerade langsame Busse untersucht werden da die Eingänge nicht so fürchterlich empfindlich sind; ansonsten ist es ein 541. Leider scheint es ihn nicht in der 74lvc zu geben.&lt;br /&gt;
&lt;br /&gt;
Einigkeit besteht darüber, dass verschiedene Eingangsoptionen möglich sein sollen. Dies wird dadurch erreicht, dass die Hauptplatine als Eingangsbauteil einen 5V-toleranten Schmitt Trigger erhält. Damit ist es jedem selber überlassen, ob er zusätzlich eine Komparatorplatine baut, oder ob er sich mit der einfachen Variante zufrieden gibt. Die Eingangsplatine wird zusätzlich noch mit 3,3V Versorgung und einem SPI Bus versorgt (2x CS).&lt;br /&gt;
&lt;br /&gt;
Mit dem Grundkonzept (digitaler Eingangsteil) werden wahrscheinlich 90% der Interessenten zufrieden sein. Dadurch bleibt der Preis der &amp;quot;Basisvariante&amp;quot; auch im bezahlbaren Bereich.&lt;br /&gt;
&lt;br /&gt;
Einigkeit besteht jedoch in der notwendigen Schutzschaltung, z.B. mit einem Dioden-Array. Auch darf die Eingangsspannung den Input Voltage Range (je nach Typ) nicht überschreiten.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N Teiler um den Sample Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den uC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und uC und spart den Quarz am uC. Allerdings bieted sich auch ein eigener Quarz für den uC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50-64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch umlöten und wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per uC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsrechster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Freq. mit einem einfachen Quarz erzeugen kann. Dadurch wird der Freq.teiler im CPLD nicht mehr benötigt und hat wieder einige MC frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefreq. liegen zum einem in den verwendeten Bauelementen (&amp;gt;100MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320mA&lt;br /&gt;
* ATMega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit Max964 8mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100mA ziehen (darin wird wohl der LA u.U. fallen ), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genüg Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
= Programmierung =&lt;br /&gt;
&lt;br /&gt;
== AVR ==&lt;br /&gt;
Recht früh hat sich in dem Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATMega Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40poliger nötig. Es wird ein ATMega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
== CPLD ==&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmaware über den Computer zu updaten.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels uC beschrieben wird. &lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45kByte für uC Verhältnisse extrem groß ist und somit nur in einen ATMega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10kByte für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz effezienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Dies lässt sich z.B. ähnlich dem Projekt in der Codesammlung machen [http://www.mikrocontroller.net/forum/read-4-228557.html#233821]. Dann ist zum Programmieren des CPLDs nur eine Software auf dem PC nötig, die Daten werden über USB oder RS232 an den AVR gesandt und dort umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG Verbindung zum AVR Port eingerichtet, falls das Problem irgendwann &#039;mal später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Appl. Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD löten mit 0.5mm Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80? Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de/data/glyn/media/doc/IS61LV25616.pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ???&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Agilent XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logic Analyzer Project|Hardware]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9254</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9254"/>
		<updated>2005-09-21T20:42:47Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: ||&lt;br /&gt;
* 16 Kanäle: ||||| ||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||&lt;br /&gt;
* Modulair (erweiterbar X mal 8/16 Kanäle): ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : |&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : ||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: |&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : |&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; uU. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: |&lt;br /&gt;
* Seriell asyncron (RS232).: ||||&lt;br /&gt;
* USB......................: ||||| |||||||&lt;br /&gt;
* Parallelport.............: ||&lt;br /&gt;
* Ethernet.................: |&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||&lt;br /&gt;
* Linux   .: ||||| |||||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Anderes .: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(--[[Benutzer:84.182.244.75|84.182.244.75]] 10:43, 20. Sep 2005 (CEST) [ope])&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jeodch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die grossen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezueglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genanntenn Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrokontroller aus, der seine Ports polled um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) dar. Die CPLD z.B. von Xilinx können mit über 100MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einem SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, dem Speicherinterface und natürlich dem eigentlichen sampeln der Eingänge verantwortlich. Der Mikrokontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampelten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3.3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLD XC95000XL mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
= Die Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch heraustellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschliessen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatched und gemeinsam auf den nun 32bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit beträgt die SChreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man zB. eine 16bit Time-Stamp-Adresse (256k) mit einem 16bit Pattern speichern, oder ein 24bit Timestamps für 8bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige Verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heisseste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischen gespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup und Hold Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAM&#039;s. Dieser kann aber auch zum Lesen des SRAM&#039;s benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen. &lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.B. 512Kb SRAM&#039;s benutzen kann ohne dass der uC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlose an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
uC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Treshold) variabel sind und somit auch am flexibelsten für die versch. Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL Eingänge und das der Eingspg.bereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Treshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom uC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per uC mit anschließenden Tiefpaß mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Bei einem digitalen Eingangsteil bietet sich folgendes an:&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat/datasheets/74LVC14A_4.pdf 74lvc14] Hex inverting Schmitt-trigger with 5 V tolerant input; Dummerweise eben 6 Stck. - für 0,56? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74LVC541A_3.pdf 74LVC541] Octal buffer/line driver with 5 V tolerant inputs/outputs (3-state) für 0,71? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74HC_HCT7541_CNV_2.pdf 74HC7541] Octal Schmitt trigger buffer/line driver; 3-state für 9,85? bei R&amp;amp;S - damit können gerade langsame Busse untersucht werden da die Eingänge nicht so fürchterlich empfindlich sind; ansonsten ist es ein 541. Leider scheint es ihn nicht in der 74lvc zu geben.&lt;br /&gt;
&lt;br /&gt;
Einigkeit besteht darüber, dass verschiedene Eingangsoptionen möglich sein sollen. Dies wird dadurch erreicht, dass die Eingangsbeschaltung auf einer extra Platine plaziert wird und definierte Logikpegel an den CPLD (3,3V) liefern muss. Dann kann - je nach Geldbeutel &amp;amp; Einsatzzweck - die eine oder andere Variante umgesetzt werden. Zusätzlich zu den Datenleitungen sind noch Versorgung und SPI-Schnittstellen zu den Eingangsplatinen nötig.&lt;br /&gt;
&lt;br /&gt;
Einigkeit besteht jedoch in der notwendigen Schutzschaltung, z.B. mit einem Dioden-Array. Auch darf die Eingangsspannung den Input Voltage Range (je nach Typ) nicht überschreiten.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N Teiler um den Sample Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den uC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und uC und spart den Quarz am uC. Allerdings bieted sich auch ein eigener Quarz für den uC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50-64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch umlöten und wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per uC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsrechster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Freq. mit einem einfachen Quarz erzeugen kann. Dadurch wird der Freq.teiler im CPLD nicht mehr benötigt und hat wieder einige MC frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefreq. liegen zum einem in den verwendeten Bauelementen (&amp;gt;100MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320mA&lt;br /&gt;
* ATMega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit Max964 8mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100mA ziehen (darin wird wohl der LA u.U. fallen ), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genüg Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
= Programmierung =&lt;br /&gt;
&lt;br /&gt;
== AVR ==&lt;br /&gt;
Recht früh hat sich in dem Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATMega Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40poliger nötig. Es wird ein ATMega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
== CPLD ==&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmaware über den Computer zu updaten.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels uC beschrieben wird. &lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45kByte für uC Verhältnisse extrem groß ist und somit nur in einen ATMega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10kByte für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz effezienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Dies lässt sich z.B. ähnlich dem Projekt in der Codesammlung machen [http://www.mikrocontroller.net/forum/read-4-228557.html#233821]. Dann ist zum Programmieren des CPLDs nur eine Software auf dem PC nötig, die Daten werden über USB oder RS232 an den AVR gesandt und dort umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG Verbindung zum AVR Port eingerichtet, falls das Problem irgendwann &#039;mal später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Appl. Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD löten mit 0.5mm Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80? Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de/data/glyn/media/doc/IS61LV25616.pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ???&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Agilent XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logic Analyzer Project|Hardware]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9253</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9253"/>
		<updated>2005-09-21T20:36:43Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* CPLD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: ||&lt;br /&gt;
* 16 Kanäle: ||||| ||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||&lt;br /&gt;
* Modulair (erweiterbar X mal 8/16 Kanäle): ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : |&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : ||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: |&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : |&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; uU. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: |&lt;br /&gt;
* Seriell asyncron (RS232).: ||||&lt;br /&gt;
* USB......................: ||||| |||||||&lt;br /&gt;
* Parallelport.............: ||&lt;br /&gt;
* Ethernet.................: |&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||&lt;br /&gt;
* Linux   .: ||||| |||||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Anderes .: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(--[[Benutzer:84.182.244.75|84.182.244.75]] 10:43, 20. Sep 2005 (CEST) [ope])&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jeodch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die grossen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezueglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genanntenn Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrokontroller aus, der seine Ports polled um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) dar. Die CPLD z.B. von Xilinx können mit über 100MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einem SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, dem Speicherinterface und natürlich dem eigentlichen sampeln der Eingänge verantwortlich. Der Mikrokontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampelten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3.3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLD XC95000XL mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
= Die Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch heraustellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschliessen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatched und gemeinsam auf den nun 32bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit beträgt die SChreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man zB. eine 16bit Time-Stamp-Adresse (256k) mit einem 16bit Pattern speichern, oder ein 24bit Timestamps für 8bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige Verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heisseste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischen gespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup und Hold Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAM&#039;s. Dieser kann aber auch zum Lesen des SRAM&#039;s benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen. &lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.B. 512Kb SRAM&#039;s benutzen kann ohne dass der uC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlose an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
uC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Treshold) variabel sind und somit auch am flexibelsten für die versch. Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL Eingänge und das der Eingspg.bereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Treshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom uC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per uC mit anschließenden Tiefpaß mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Bei einem digitalen Eingangsteil bietet sich folgendes an:&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat/datasheets/74LVC14A_4.pdf 74lvc14] Hex inverting Schmitt-trigger with 5 V tolerant input; Dummerweise eben 6 Stck. - für 0,56? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74LVC541A_3.pdf 74LVC541] Octal buffer/line driver with 5 V tolerant inputs/outputs (3-state) für 0,71? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74HC_HCT7541_CNV_2.pdf 74HC7541] Octal Schmitt trigger buffer/line driver; 3-state für 9,85? bei R&amp;amp;S - damit können gerade langsame Busse untersucht werden da die Eingänge nicht so fürchterlich empfindlich sind; ansonsten ist es ein 541. Leider scheint es ihn nicht in der 74lvc zu geben.&lt;br /&gt;
&lt;br /&gt;
Eine konzeptionelle Entscheidung zwischen der Ausführung der Input Stage als Komparator oder 74xx basierend ist also noch nicht getroffen.&lt;br /&gt;
&lt;br /&gt;
Einigkeit besteht jedoch in der notwendigen Schutzschaltung, z.B. mit einem Dioden-Array. Auch darf die Eingangsspannung den Input Voltage Range (je nach Typ) nicht überschreiten.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N Teiler um den Sample Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den uC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und uC und spart den Quarz am uC. Allerdings bieted sich auch ein eigener Quarz für den uC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50-64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch umlöten und wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per uC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsrechster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Freq. mit einem einfachen Quarz erzeugen kann. Dadurch wird der Freq.teiler im CPLD nicht mehr benötigt und hat wieder einige MC frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefreq. liegen zum einem in den verwendeten Bauelementen (&amp;gt;100MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320mA&lt;br /&gt;
* ATMega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit Max964 8mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100mA ziehen (darin wird wohl der LA u.U. fallen ), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genüg Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
= Programmierung =&lt;br /&gt;
&lt;br /&gt;
== AVR ==&lt;br /&gt;
Recht früh hat sich in dem Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATMega Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40poliger nötig. Es wird ein ATMega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
== CPLD ==&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmaware über den Computer zu updaten.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels uC beschrieben wird. &lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45kByte für uC Verhältnisse extrem groß ist und somit nur in einen ATMega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10kByte für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz effezienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Dies lässt sich z.B. ähnlich dem Projekt in der Codesammlung machen [http://www.mikrocontroller.net/forum/read-4-228557.html#233821]. Dann ist zum Programmieren des CPLDs nur eine Software auf dem PC nötig, die Daten werden über USB oder RS232 an den AVR gesandt und dort umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG Verbindung zum AVR Port eingerichtet, falls das Problem irgendwann &#039;mal später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Appl. Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD löten mit 0.5mm Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80? Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de/data/glyn/media/doc/IS61LV25616.pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ???&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Agilent XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logic Analyzer Project|Hardware]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9252</id>
		<title>Logic Analyzer-Projekt: Ideen zur Hardware</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Logic_Analyzer-Projekt:_Ideen_zur_Hardware&amp;diff=9252"/>
		<updated>2005-09-21T20:33:03Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* AVR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hier mal das Lastenheft für den Logic Analyser (LA). Bitte je nach Anforderung einen Strich mittels ALT GR + &amp;lt;&amp;gt; Taste links neben dem Ypsilon.&lt;br /&gt;
Die Aufteilung könnt ihr ja ändern/erweitern falls was fehlt. Ich gebe mal meine Maximalanforderungen ein.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kanalanzahl&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle: ||&lt;br /&gt;
* 16 Kanäle: ||||| ||||&lt;br /&gt;
* 20 Kanäle: |&lt;br /&gt;
* 24 Kanäle: |&lt;br /&gt;
* 32 Kanäle: ||||&lt;br /&gt;
* Modulair (erweiterbar X mal 8/16 Kanäle): ||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Samplingfrequenz&#039;&#039;&#039;&lt;br /&gt;
* ...8 MHz : |&lt;br /&gt;
* ..16 MHz : |&lt;br /&gt;
* ..32 MHz : ||&lt;br /&gt;
* .&amp;gt;32 MHz : ||||| ||||| |||&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speichertiefe&#039;&#039;&#039;&lt;br /&gt;
*....32 kByte: |&lt;br /&gt;
*....64 kByte:&lt;br /&gt;
*...128 kByte: |&lt;br /&gt;
*...256 kByte: |&lt;br /&gt;
*...512 kByte: &lt;br /&gt;
*..1024 kByte: |&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wäre es nicht sinnvoller, die Speichertiefe in &amp;quot;Samples&amp;quot; anzugeben. So macht das nicht viel Sinn, da die Anzahl der Samples wenn man immer nur 8 Bits abspeichert ne andere ist als wie wenn man 32 Bits pro Sample speichert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;integrierter Pattern Generator&#039;&#039;&#039;&lt;br /&gt;
* .8 Kanäle : |&lt;br /&gt;
* 16 Kanäle: &lt;br /&gt;
&lt;br /&gt;
Anm.: könnte bis zu einer gewissen Geschwindigkeit vom AVR erledigt werden... =&amp;gt; uU. Mega16 drauf&lt;br /&gt;
--[[Benutzer:Hans|Hans]] 14:16, 20. Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schnittstelle zum Computer&#039;&#039;&#039;&lt;br /&gt;
* Seriell syncron..........: |&lt;br /&gt;
* Seriell asyncron (RS232).: ||||&lt;br /&gt;
* USB......................: ||||| |||||||&lt;br /&gt;
* Parallelport.............: ||&lt;br /&gt;
* Ethernet.................: |&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Am PC läuft/wird laufen&#039;&#039;&#039;&lt;br /&gt;
* Windows .: ||||| ||||&lt;br /&gt;
* Linux   .: ||||| |||||&lt;br /&gt;
* MacOS X .: |&lt;br /&gt;
* Solaris .: |&lt;br /&gt;
* Anderes .: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
(--[[Benutzer:84.182.244.75|84.182.244.75]] 10:43, 20. Sep 2005 (CEST) [ope])&lt;br /&gt;
&lt;br /&gt;
Da der Logic Analyzer (LA) Thread schnell wächst und entsprechend schwer zu verfolgen ist, ständig sich irgend etwas ändert, kommt hier eine Zusammenfassung der Diskussion. Ich versuche sie halbwegs aktuell zu halten, öfteres Vorbeischauen lohnt sich also.&lt;br /&gt;
&lt;br /&gt;
Eine fertige Lösung existiert jeodch noch nicht und einer alleine macht sich tot, zumal derjenige ja auch ein Real-Life hat und kein professioneller Designer für LA ist - daher ist das Projekt auf aktive Hilfe angewiesen sonst wird es sterben!&lt;br /&gt;
&lt;br /&gt;
Auch sind die Threads dazu etwas verteilt (thematisch). Hier die grossen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-204570.html#new Logic Analyzer bauen] (Initialthread)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-208137.html#new Pegelkomparator für High-Speed-Digital (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-234597.html#new Logic Analyzer Core (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-207389.html#new CPLD und AVR Kombo (Logic Analyzer)]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-9-221618.html#new Diverse Fragen bezueglich SRAM Anbindung]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-228557.html#new Programmieren des CPLDs über den AVR]&lt;br /&gt;
&lt;br /&gt;
Eine reine AVR Lösung scheint sich hier abzuzeichnen:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-1-225498.html#new Logic Analyzer bauen, die 2.]&lt;br /&gt;
&lt;br /&gt;
= Das Ziel =&lt;br /&gt;
&lt;br /&gt;
Nun ja, preiswert und universell und für den Großteil der Probleme brauchbar soll er sein. Zudem sollen die Bauteile z.B. auch in Schweiz/Österreich gut verfügbar sein. Dass er sich mit einem LA der großen Hersteller messen lassen kann, ist aufgrund des Hobby Bereiches bzw. Proof-on-Concepts eher unwahrscheinlich. Unter den eben genanntenn Prämissen sollen die verfügbaren Mittel optimal genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Ergebnis, Lust und Laune wird es irgendwann evtl. eine Fortsetzung geben - aber das ist Zukunftsmusik.&lt;br /&gt;
&lt;br /&gt;
= Grundlegende Überlegungen =&lt;br /&gt;
&lt;br /&gt;
Im Internet kann man verschiedene, einfache Konzepte für einen LA finden, z.B. mittels Parallelport. Forumgerecht, reicht für einen einfachen LA bereits ein Mikrokontroller aus, der seine Ports polled um so die Logik Pegel mitzuschneiden. Allerdings ist diese Lösung begrenzt, wenn es um höhere Taktraten geht.&lt;br /&gt;
&lt;br /&gt;
Eine erschwingliche Alternative stellt ein CPLD (Complex programmable logic devices) dar. Die CPLD z.B. von Xilinx können mit über 100MHz arbeiten und sind somit für diese Aufgabe prädestiniert. Leider ist die Anzahl der Macro Zellen zu gering, um eine hohe Speichertiefe zu erreichen. Daher werden die Daten vom CPLD in einem SRAM geschrieben. Damit ist der CPLD für die Triggerbedingungen des LA, dem Speicherinterface und natürlich dem eigentlichen sampeln der Eingänge verantwortlich. Der Mikrokontroller liest die Daten des SRAM über den CPLD aus und schickt sie an den Computer, übernimmt also die Kommunikation. Die Software stellt die gesampelten Daten sinnvoll und ansprechend dar.&lt;br /&gt;
&lt;br /&gt;
Um die Störungen gering zu halten, wird als Versorgungspannung 3.3V Vorzug gegeben - ironischer Weise sind die Xilinx CPLD XC95000XL mit dieser Spannung preiswerter als in der 5V Version.&lt;br /&gt;
&lt;br /&gt;
= Die Komponenten =&lt;br /&gt;
&lt;br /&gt;
== Der CPLD und das Speicherinterface ==&lt;br /&gt;
&lt;br /&gt;
Nach einigen Hin- und Her hat sich der XC95144XL TQ144 als beste Option herausgestellt. Auch FPGAs waren kurz im Gespräch, aufgrund der sich im Gespräch heraustellenden Komplexität. Allerdings war die Komplexität des FPGA und der Preis auch gleichzeitig das KO-Kriterium dafür.&lt;br /&gt;
&lt;br /&gt;
Kurzinfo XC95144XL TQ144 [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf]:&lt;br /&gt;
&lt;br /&gt;
* 144Macro, 3.3V, 117 I/O, TQFP144 für ca. 10&amp;amp;#8364; &lt;br /&gt;
&lt;br /&gt;
Dieser bietet genug I/O um:&lt;br /&gt;
&lt;br /&gt;
* 2x SRAM 256k x 16 (jeweils 18 AD, 16 DB, 3 Ctrl)&lt;br /&gt;
* 2x 8-bit-LA-Channel&lt;br /&gt;
* Ext. TriggerIn, TriggerOut&lt;br /&gt;
* SPI Bus zum AVR &lt;br /&gt;
* JTAG&lt;br /&gt;
&lt;br /&gt;
anschliessen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Grund für die 2 Speicherbänke liegen in den Möglichkeiten, sich den LA selbst zu konfigurieren für:&lt;br /&gt;
&lt;br /&gt;
* Interleave&lt;br /&gt;
* Speicherung eines Timestamp&lt;br /&gt;
* non-Interleave und non-Timestamp mit nur einem SRAM&lt;br /&gt;
&lt;br /&gt;
Beim Interleave werden zwei 16 Bit Samples im CPLD gelatched und gemeinsam auf den nun 32bit breiten Datenbus gelegt. Dabei sind die Adressen für die SRAMs folglich identisch. Damit beträgt die SChreibrate beim SRAM bei der Hälfte des Sampleclocks, der entsprechend hoch gesetzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung des 2x 256k x 16 Bit SRAM eröffnet sich aber weiterhin die Möglichkeit, den Transitional Timing Analysis Mode zu realisieren, d.h. nur Bit-Änderungen werden mit einem Timestamp gespeichert - also ideal für langsame Busse bei hohen Sampleraten. Hier kann man zB. eine 16bit Time-Stamp-Adresse (256k) mit einem 16bit Pattern speichern, oder ein 24bit Timestamps für 8bit. Ein Interleave ist dann allerdings nicht mehr möglich. &lt;br /&gt;
&lt;br /&gt;
Als letze Möglichkeit kann man auf alles obige Verzichten und nur einen SRAM bestücken. &lt;br /&gt;
&lt;br /&gt;
Der heisseste Kandidat für den Speicher ist derzeit die 61LV25616 (256k*16) asynchrone Serie (zB.[http://www.issi.com/pdf/61LV25616AL.pdf IS61LV25616]), da er gut verfügbar und preiswert sein soll. Bei asynchronen SRAM müssen wie eingangs erwähnt die Adressen und Daten in einem Latch zwischen gespeichert werden. Bei einem synchronen SRAM werden die Adressen bei mit Flanke gespeichert, ebenso die Daten. Die Setup und Hold Zeiten gehen daher gegen Null... Außerdem muss man WR\ nicht toggeln, was wertvolle Zeit kostet, sondern es reicht, den Speichertakt anzulegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Typen wären&lt;br /&gt;
&lt;br /&gt;
Asynchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY22393,CY22394,CY22395 [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] mit Layout Hinweisen [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
* AS7C34098-12TCN (256K x 16, 12ns) [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf] und AS7C31026B-12TCN (64k x 16, 12ns) Asynchroner SRAM bei Farnell&lt;br /&gt;
&lt;br /&gt;
Synchrone SRAM:&lt;br /&gt;
&lt;br /&gt;
* CY7C1327G (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
* CY7C1327F (256k*18) [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
* CY7C1327B (256k*18 Synchronous-Pipelined Cache RAM)[http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
&lt;br /&gt;
Den CY7C1327B (TQFP100 256Kx18, 3.3V, 4ns ) gibt&#039;s zumindest bei R&amp;amp;S für 11,60&amp;amp;#8364;&lt;br /&gt;
&lt;br /&gt;
== Interface CPLD &amp;lt;-&amp;gt; uC ==&lt;br /&gt;
&lt;br /&gt;
Eine grundlegende Idee ist, dass der CPLD doppelt benutzt wird. Er enthält ja einen Addresszähler zum Schreiben des SRAM&#039;s. Dieser kann aber auch zum Lesen des SRAM&#039;s benutzt werden. Der SRAM wird immer sequentiell vom PLD geschrieben und gelesen. &lt;br /&gt;
&lt;br /&gt;
Die Daten, Statusinfos etc. werden per SPI vom AVR aus dem CPLD gelesen. Vorteil ist dabei, dass man nun auch z.B. 512Kb SRAM&#039;s benutzen kann ohne dass der uC ein kompliziertes Memory Banking benutzen müsste.&lt;br /&gt;
&lt;br /&gt;
== Interface uC &amp;lt;-&amp;gt; Computer ==&lt;br /&gt;
&lt;br /&gt;
Da die Daten schnell im PC sein sollen, bietet sich USB an, also mit dem &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf FT245] &lt;br /&gt;
um schneller (2-3 Mbaud) als der &lt;br /&gt;
[http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf FT232]  (1 Mbaud) &lt;br /&gt;
die Daten zu versenden. FTDI bietet die Treiber für Windows/Linux kostenlose an.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative ist der &lt;br /&gt;
[http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf  CP2102], der weniger Bauelemente benötigt aber auch wesentlich schwerer zu löten ist.&lt;br /&gt;
&lt;br /&gt;
uC mit integrierten USB standen auch in der Disskusion. Aufgrund vieler Unwägbarkeiten, wie Beschaffung, Preis, HID Treiber etc. sind diese Ideen wieder verworfen worden.&lt;br /&gt;
&lt;br /&gt;
== Interface LA &amp;lt;-&amp;gt; DUT (Device under Test) ==&lt;br /&gt;
&lt;br /&gt;
Prinzipiell gibt es zwei Wege, wie der LA an seine Informationen kommt:&lt;br /&gt;
* Der rein digitale Weg geht z.B. über 74AHC245 oder 74ACT14 o.ä. womit allerdings die Logikpegel feststehen. &lt;br /&gt;
* Ein anderer Weg geht über Analog-Komparatoren, bei denen die Logikpegel (Treshold) variabel sind und somit auch am flexibelsten für die versch. Logikfamilien [http://www.mikrocontroller.net/attachment.php/209385/Scan0004.png] ist.&lt;br /&gt;
&lt;br /&gt;
Für die Komparatorlösung steht momentan der [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf MAX964] und&lt;br /&gt;
[http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf AD8564] &lt;br /&gt;
zur Debatte. Allerdings ist der MAX964 schwer zu beschaffen und bereits in der Dualvariante teurer als der AD8564 (ca. 10 Euro). Auch müssen diese mit 5V betrieben werden (wegen der TTL Eingänge und das der Eingspg.bereich von der VCC abhängt), wodurch Pegelwandler wie der 74LVC245 zum CPLD notwendig werden. Auch die Treshold-Reference muss in diesem Bereich liegen. Diese Schwelle wird durch einen DAC vorgegeben, der vom uC über SPI gesteuert wird. Dieser sollte eine interne Referenz besitzen um mit möglichst wenig Bauelementen auszukommen. Zudem sollte er über zwei Kanäle verfügen, da aktuell der LA über 2 pods mit jeweils einem 8 Bit-Channel verfügen soll. Z.Zt. scheint die beste Wahl hinsichtlich Parameter, Preis und Verfügbarkeit die   [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf TLV5626], [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf TLV5637] und [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf TLV5638] mit 8, 10 bzw. 12 Bit zu sein. Der Einsatz eines DAC wird wesentlich einfacher als eine PWM per uC mit anschließenden Tiefpaß mit OPVs, welches die Fehlerrate steigen lassen kann. &lt;br /&gt;
&lt;br /&gt;
Bei einem digitalen Eingangsteil bietet sich folgendes an:&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat/datasheets/74LVC14A_4.pdf 74lvc14] Hex inverting Schmitt-trigger with 5 V tolerant input; Dummerweise eben 6 Stck. - für 0,56? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74LVC541A_3.pdf 74LVC541] Octal buffer/line driver with 5 V tolerant inputs/outputs (3-state) für 0,71? bei R&amp;amp;S&lt;br /&gt;
*[http://www.semiconductors.philips.com/acrobat_download/datasheets/74HC_HCT7541_CNV_2.pdf 74HC7541] Octal Schmitt trigger buffer/line driver; 3-state für 9,85? bei R&amp;amp;S - damit können gerade langsame Busse untersucht werden da die Eingänge nicht so fürchterlich empfindlich sind; ansonsten ist es ein 541. Leider scheint es ihn nicht in der 74lvc zu geben.&lt;br /&gt;
&lt;br /&gt;
Eine konzeptionelle Entscheidung zwischen der Ausführung der Input Stage als Komparator oder 74xx basierend ist also noch nicht getroffen.&lt;br /&gt;
&lt;br /&gt;
Einigkeit besteht jedoch in der notwendigen Schutzschaltung, z.B. mit einem Dioden-Array. Auch darf die Eingangsspannung den Input Voltage Range (je nach Typ) nicht überschreiten.&lt;br /&gt;
&lt;br /&gt;
== Clock Rate Generierung ==&lt;br /&gt;
&lt;br /&gt;
Aufgrund seiner Bandbreite bietet sich die Generierung des Systemtaktes durch den CPLD an. Dieser benutzt einen 1/N Teiler um den Sample Takt zu generieren.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell kann er auch gleichzeitig den Takt für den uC erzeugen - dieser wird also extern getaktet und man erhält dadurch Synchronität zwischen CPLD und uC und spart den Quarz am uC. Allerdings bieted sich auch ein eigener Quarz für den uC an. Man sieht - hier wird noch diskutiert.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung des Mastertaktes bieten sich zwei Weg an:&lt;br /&gt;
* Quarz, bei 50-64 MHz dürfte da wegen Verfügbarkeit/Preis wohl Schluss sein, auch sind Obertonquarze nicht ganz unkritisch. Auch kann man dann nur noch durch umlöten und wecheln den Mastertakt ändern, falls es Probleme gibt.&lt;br /&gt;
* VCO/PLL ggf. per uC programmierbar, damit kann man dann echt die Grenzen des Designs austesten. Die Chips dazu gibt&#039;s bei Maxim/AD und den anderen üblichen Verdächtigen, stehen also noch nicht fest. Als aussichtsrechster Kandidat sticht derzeit der [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf CY22150] hervor, der mehrere synchrone Freq. mit einem einfachen Quarz erzeugen kann. Dadurch wird der Freq.teiler im CPLD nicht mehr benötigt und hat wieder einige MC frei.&lt;br /&gt;
&lt;br /&gt;
Die Grenzen der Samplefreq. liegen zum einem in den verwendeten Bauelementen (&amp;gt;100MHz), aber vielmehr wird der begrenzende Faktor das Layout und die Leiterplatte sein. Ein 4-Layer-PCB ist aus technischer Sicht sicher das optimale, nur schaut der Geldbeutel danach sehr leer aus; auch wird ein Komparatoreingang ca. 45 Euro teurer werden als eine Lösung mit 74xxx.&lt;br /&gt;
&lt;br /&gt;
== Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
Tja, auch ein LA braucht Strom. Bei Verwendung eines USB kann dieses elegant gelöst werden, da dieser (nach Anforderungen an das OS) bis zu 500mA liefern kann. Eine kurze worst-case &amp;quot;Stromrechnung&amp;quot; zeigt:&lt;br /&gt;
&lt;br /&gt;
* XC95144XL CPLD pauschal 150mA lt. DB&lt;br /&gt;
* 61LV25616 SRAM 2x 320mA&lt;br /&gt;
* ATMega ???&lt;br /&gt;
* FT245 ????&lt;br /&gt;
&lt;br /&gt;
mit Max964 8mA/Comparator x 16 kommen 128 mA hinzu.&lt;br /&gt;
&lt;br /&gt;
Die FTDI-Chips haben für Geräte, die über 100mA ziehen (darin wird wohl der LA u.U. fallen ), aber noch bus-powered sein sollen, einen Schaltausgang, an den z.B. ein p-Kanal-FET angeschlossen werden kann, der den stromhungrigen Teil der Schaltung erst nach der  Registrierung beim Computer einschaltet. Dazu hat er einen &amp;quot;sleep&amp;quot;-Ausgang, mit dem man den angeschlossenen AVR schlafen legen kann. In den FTDI-Docs bzw. Application Notes finden sich dazu genüg Beispiele mit kompletten Schaltbildern. Allerdings ergibt die Überschlagsrechnung, dass ein externes Steckernetzteil notwendig wird.&lt;br /&gt;
&lt;br /&gt;
Einsetzbar wäre auch ein LM2575S-3.3 [http://www.national.com/ds/LM/LM1575.pdf] für 2,47&amp;amp;#8364; (Farnell), der sieht gut und einfach in der Handhabung aus im Falle einer externen Stromversorgung.&lt;br /&gt;
&lt;br /&gt;
= Programmierung =&lt;br /&gt;
&lt;br /&gt;
== AVR ==&lt;br /&gt;
Recht früh hat sich in dem Forum heraus kristallisiert, dass der AVR per Bootloader vom Computer her programmiert werden sollte. Hierdurch sind Firmware Updates sehr einfach möglich und verschiedene Bootloader sind verfügbar. Die Bootloader Option setzt damit einen AVR der ATMega Serie vorraus.&lt;br /&gt;
&lt;br /&gt;
Der AVR braucht folgende Anschlüsse:&lt;br /&gt;
* JTAG (4 Pins)&lt;br /&gt;
* SPI (3 Pins + ~4 CS Leitungen)&lt;br /&gt;
* FTDI (12 Pins)&lt;br /&gt;
* LEDs (2 Pins)&lt;br /&gt;
&lt;br /&gt;
Demnach ist ein 40poliger nötig. Es wird ein ATMega16 angesetzt.&lt;br /&gt;
&lt;br /&gt;
== CPLD ==&lt;br /&gt;
&lt;br /&gt;
Die Programmierung des CPLD ist dagegen noch nicht konkret. Wünschenswert wäre es, ebenfalls seine Firmaware über den Computer zu updaten.&lt;br /&gt;
&lt;br /&gt;
Der Standardweg der Programmierung der Xilinx CPLD sieht einen JTAG Stiftsockel vor. Dann kann die Programmierung z.B. über ein Xilinx JTAG/Parallel Download Cable [http://www.xilinx.com/support/programr/jtag_cable.pdf] aus dem ISE/impact geschehen.&lt;br /&gt;
&lt;br /&gt;
Einen möglichen Weg stellt die XApp058 [http://direct.xilinx.com/bvdocs/appnotes/xapp058.pdf] dar, darin wird beschrieben, wie der CPLD mittels uC beschrieben wird. &lt;br /&gt;
Dieses Thema wurde bereits im Forum &amp;quot;AVR Ethernet Platine&amp;quot; aufgegriffen. In diesem Thread [http://www.mikrocontroller.net/forum/read-1-138024.html#157356] kam man allerdings zu der Überzeugung, dass die XSVF Datei mit 45kByte für uC Verhältnisse extrem groß ist und somit nur in einen ATMega128 (und größer) [http://www.atmel.com/dyn/products/devices.asp?family_id=607#760] reinpassen würde da das SVF JTAG Protokoll riesige Datenbuffer im SRAM benötigt. Dies ist protokollbedingt - es wurden 10kByte für ein FPGA genannt. Dabei sind die Xilinx CPLD Speicherplatz effezienter als welche von Altera. Leider sind die Xilinx CPLD eben nur über JTAG programmierbar. &lt;br /&gt;
&lt;br /&gt;
Allerdings wurde in diesem Zusammenhang auch auf den XSVF Executor [http://www.ethernut.de/en/xsvfexec/index.html] verwiesen.&lt;br /&gt;
Auch ist die Frage noch offen, inwiefern die XSVF Datei über die RS232/USB geladen werden kann, ebenso das Timing der JTAG Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
Aufgrund der vielen offenen Fragen ist die schnellste und sicherste Lösung die Anbindung über den JTAG Stecker um den CPLD per JTAG/Parallel Download Cable zu programmieren. Zusätzlich wird eine JTAG Verbindung zum AVR Port eingerichtet, falls das Problem irgendwann &#039;mal später gelöst wird.&lt;br /&gt;
&lt;br /&gt;
Bisher existiert in VHDL für den CPLD LA Core:&lt;br /&gt;
&lt;br /&gt;
* Trigger (bit pattern, rising/falling/any edge) verifiziert mit TB&lt;br /&gt;
* SRAM Interface&lt;br /&gt;
&lt;br /&gt;
= PCB =&lt;br /&gt;
&lt;br /&gt;
Dieses Thema kommt noch intensiv.&lt;br /&gt;
&lt;br /&gt;
Dabei sind u.a. die folgenden Appl. Notes nützlich:&lt;br /&gt;
&lt;br /&gt;
für AVR:&lt;br /&gt;
&lt;br /&gt;
* AVR040: EMC Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf]&lt;br /&gt;
* AVR042: AVR Hardware Design Considerations [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf]&lt;br /&gt;
&lt;br /&gt;
für CPLD:&lt;br /&gt;
&lt;br /&gt;
* Device Package User Guide [http://www.xilinx.com/bvdocs/userguides/ug112.pdf]&lt;br /&gt;
* XAPP112 - Designing With XC9500XL CPLDs [http://www.xilinx.com/bvdocs/appnotes/xapp112.pdf]&lt;br /&gt;
* XAPP114 - Understanding XC9500XL CPLD Power [http://www.xilinx.com/bvdocs/appnotes/xapp114.pdf]&lt;br /&gt;
* XAPP115 - Planning for High Speed XC9500XL Designs [http://www.xilinx.com/bvdocs/appnotes/xapp115.pdf]&lt;br /&gt;
* XAPP784 - Bulletproof CPLD Design Practices [http://www.xilinx.com/bvdocs/appnotes/xapp784.pdf]&lt;br /&gt;
&lt;br /&gt;
= Resumee =&lt;br /&gt;
&lt;br /&gt;
Keep-It-Simple ist ein Grundsatz hier. Je komplexer, desto schwerer zu beherrschen. Sicher hat jeder von Komplexität eine andere Vorstellung, aber wir arbeiten daran und hoffen ein nachbaufähiges, stabiles Gerät zu bekommen. Dennoch kommt man bei diesem Projekt um SMD löten mit 0.5mm Beinchen nicht umhin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Und was soll das kosten? =&lt;br /&gt;
&lt;br /&gt;
Schwierig, da noch nicht alles feststeht - als Ziel steht aber im Forum mehr oder weniger ungeschrieben die 100&amp;amp;#8364; Marke einschließlich PCB.&lt;br /&gt;
&lt;br /&gt;
== Datenblätter, Bezugsquellen und Preise (allg.) ==&lt;br /&gt;
&lt;br /&gt;
... oder was bisher so zusammengetragen wurde.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;IC&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Gehäuse&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Datenblatt/Appnotes&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Bezugsquelle&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Preis&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;CPLD&#039;&#039; / XC95144XL10TQ144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP144&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.mhl.tuc.gr/data_books/Xilinx/Xc9500/95144XL.pdf], [http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=Publications/CPLD+Device+Families&amp;amp;iLanguageID=1]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.darisus.de/Elektonikshop/Framesets/Shopset1.php Darius.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ca. 10?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / CP1202&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.silabs.com/public/documents/tpub_doc/dshort/Microcontrollers/Interface/en/CP2102_short.pdf] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT232BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds232b17.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;USB&#039;&#039; / FT245BM&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | LQFP-32&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.ftdichip.com/Documents/DataSheets/ds245b16.pdf], [http://www.ftdichip.com/Documents/AppNotes.htm]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / Max964 (Maxim)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; Beyond-the-Rails Comparators, 4.5ns, 3V/5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX961-MAX999.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / AD8564 (Analog Devices)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSSOP-16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Quad&#039;&#039;&#039; 7 ns Single Supply 5V Comparator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.analog.com/UploadedFiles/Data_Sheets/155150085AD8564_a.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.spoerle.de Spörle.de]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8,80? Netto&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1715 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 4ns, 5V/3V, Independent I/O Supplies&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1908,D2821]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / LT1720/LT1721 (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual/Quad 4.5ns, 3V, Rail-to-RailOut, Quad schlecht für&#039;s Layout&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1154,C1004,C1012,P1707,D3080]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Comp&#039;&#039; / TLV3502 (TI/BB) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.5ns Rail-to-Rail, Dual High-Speed Comparator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv3502.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ECL-Comp&#039;&#039; / Max9600 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Schwierig zu realisieren: 2 &amp;quot;Wandlungsstufen&amp;quot; notwendig. 1x Inputpegel -&amp;gt; ECL, 1x ECL -&amp;gt; Logikpegel CPLD&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://pdfserv.maxim-ic.com/en/ds/MAX9600-MAX9602.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5626 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5626.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5.29?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5637 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5637.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / TLV5638 (TI)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SOIC-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12-Bit Dual, 3.3V, int. Uref 1.024V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://focus.ti.com/lit/ds/symlink/tlv5638.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7.44?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;DAC&#039;&#039; / LTC1446L (LT)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | SO-8&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Dual 12-Bit, 3.3V, int. Uref=2.5V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C1156,P1507,D1746]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12.35?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22393,CY22394,CY22395&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22393_4_5_5.pdf] ,[http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Layout%20Recommendations%20for%20the%20CY2239x%20Devices]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / ICD2053B &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.commtech-fastcom.com/data_sheets/icd2053b.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Clk&#039;&#039; / CY22150FC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16-lead TSSOP&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Taktgeber, Three-PLL, SPI progr. Taktgenerator&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy22150_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3,94?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / IC61LV25616&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP-2&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256KB x 16&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de/data/glyn/media/doc/IS61LV25616.pdf],[http://www.icsi.com.tw/english/products/products-frame.asp?Title=Datasheet-Async%20SRAM&amp;amp;URL=http%3A//web.icsi.com.tw/English/Datasheets/ASYNCHRONOUSSTATICRAM.html] &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.glyn.de Glyn.De] ???&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ???&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / AS7C34098-12TCN &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TSOP, SOJ&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | asynchroner SRAM 256K x 16, 12ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.alsc.com/pdf/sram.pdf/fa/AS7C4098.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.farnell.de Farnell.De]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13,17?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327B&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18, 3.3V, 4ns&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.datasheetarchive.com/semiconductors/download.php?Datasheet=598266]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,60?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327G&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327g_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1327F&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | synchr SRAM 256k x 18&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1327f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1351F-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, NoBL, 4MB, 128Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1351f_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 11,25?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SRAM&#039;&#039; / CY7C1381B-100AC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | TQFP100&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Burst, synchron, Durchfluss, 18MB, 512Kx36, 3.3V&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.cypress.com/portal/server.pt/gateway/PTARGS_0_2_1524_209_259_43/http%3B/sjapp20.mis.cypress.com%3B7001/publishedcontent/publish/design_resources/datasheets/contents/cy7c1381c_5.pdf]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [http://www.rsonline.de R&amp;amp;S (DE)]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48,75?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;IC&#039;&#039; / Dummy&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Literatur =&lt;br /&gt;
&lt;br /&gt;
* [http://web.mit.edu/6.111/www/s2005/HANDOUTS/LA.pdf] Agilent XYZs of Logic Analyzers&lt;br /&gt;
* [http://cp.literature.agilent.com/litweb/pdf/5988-9125EN.pdf] Agilent Logic Analyzer Probing Techniques for High-Speed Digital Systems &lt;br /&gt;
* [http://www.home.agilent.com/USeng/nav/-536898184.0/pc.html] Agilent Logic Analyzer Probing Solutions&lt;br /&gt;
* [http://www.designcon.com/2003/marketing/HP3-5.pdf] Logic Analyzer Probing Techniques for High-Speed Digital Systems (DesignCon 2003)&lt;br /&gt;
* [http://www.signalintegrity.com/Pubs/straight/probes.htm] Probing High-Speed Digital Designs (Electronic Design Magazine, March, 1997)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp368.pdf] Handheld Pocket Logic Analyzer (XApp368)&lt;br /&gt;
* [http://www.xilinx.com/bvdocs/appnotes/xapp369.pdf] Handheld 1553 Bus Data Analyzer (XApp369)&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/pcla/pcla.html] PC-basierter 32-Kanal-Logik-Analysator&lt;br /&gt;
* [http://www.bitscope.com] bitscope &lt;br /&gt;
* [http://www.rockylogic.com/products/ant8spec.html] Ant8 (mit fixer Treshold) und &lt;br /&gt;
* [http://www.rockylogic.com/products/ant16spec.html] Ant16 (mit variabler Treshold)&lt;br /&gt;
* [http://alternatezone.com/electronics/pcla.htm] PC LA&lt;br /&gt;
* [http://eebit.com/] FPGA-based Logic Analyzer&lt;br /&gt;
* [http://www.nci-usa.com/default.htm] Kommerziell: GoLogic, mit guten Texten und Videos&lt;br /&gt;
* [http://www.ethernut.de/en/xsvfexec/index.html] XSVF Executor&lt;br /&gt;
* [http://www.cypress.com/portal/server.pt?space=CommunityPage&amp;amp;control=SetCommunity&amp;amp;CommunityID=209&amp;amp;PageID=418&amp;amp;r_folder=Application%20Notes&amp;amp;r_title=Jitter%20in%20PLL%20Based%20Systems:%20Causes,%20Effects,%20and%20Solutions] Jitter in PLL Based Systems: Causes, Effects, and Solutions &lt;br /&gt;
&lt;br /&gt;
* [http://www.standardics.philips.com/packaging/handbook/pdf/pkgchapter5.pdf] SMD Mounting Methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Logic Analyzer Project|Hardware]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=10553</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=10553"/>
		<updated>2005-08-21T22:56:43Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt. (Alternativ kann auch ein Grafikdisplay eingesetzt werden, um Ladungskurven etc direkt anzuzeigen)&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
Die Slaves sollen im Grunde auch alleine Arbeiten und von der Kontrolleinheit NUR Sollwerte bekommen bzw IST Werte zu dieser senden.&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]], [[I2C|I2C]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
&lt;br /&gt;
Eine andere (und unter umständen einfachere) Methode ist ein I2C Bus.&lt;br /&gt;
Hier wären keine Multiplexer notwendig und die Verwendung von 0815 Optokopplern wäre auch möglich...&lt;br /&gt;
&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;br /&gt;
Diese Längsregeleinheit ist für eine Ausgangsleistung von 40W bei 40V ausgelegt.&lt;br /&gt;
Berechnung der Eingangsglieder:&lt;br /&gt;
* Ausgangsspannung 40V, es werden also mindestens 45V Versorgung gebraucht&lt;br /&gt;
* Der Gleichrichter hat 1V Spannungsabfall.&lt;br /&gt;
* Der Trafo braucht also (45+1)/sqrt(2) = 36V&lt;br /&gt;
* Damit wird der Ausgangselko im Leerlauf auf 36*1.5=55V aufgeladen&lt;br /&gt;
* Der Ausgangskondensator darf auf minimal 45V bei 1.5A (aufgerundet, wir wollen auf der sicheren Seite sein) abfallen. Das entspricht einer Kapazität von 1.5mF. Auch nach 10 Jahren sollte das Netzteil noch arbeiten, also nehmen wir Kondensatoren 2mF, 63V, Radial für Platinenmontage (2x RAD1.000/63)&lt;br /&gt;
* Die Ausgangsleistung (Gleichstrom) beträgt 36V*sqrt(2)*1.5A=78W, es wird ein Ringkerntransformator mit 80W, 2x18V gewählt (RKT8018). Dieser Liefert 2.22A&lt;br /&gt;
* Der Gleichrichter muss 1.5A gleichrichten, Sperrspannung 100V (B100C5000-3000) (ggf. etwas zu groß)&lt;br /&gt;
&lt;br /&gt;
Damit hätten wir schonmal den ersten Teil (hier nur das, was nicht auf die Platine gelötet wird):&lt;br /&gt;
[[Bild:linear_trafo.png|500px|Trafo mit Netzfilter]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7859</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7859"/>
		<updated>2005-06-14T16:28:55Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Längsregler 40V 1A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;br /&gt;
Diese Längsregeleinheit ist für eine Ausgangsleistung von 40W bei 40V ausgelegt.&lt;br /&gt;
Berechnung der Eingangsglieder:&lt;br /&gt;
* Ausgangsspannung 40V, es werden also mindestens 45V Versorgung gebraucht&lt;br /&gt;
* Der Gleichrichter hat 1V Spannungsabfall.&lt;br /&gt;
* Der Trafo braucht also (45+1)/sqrt(2) = 36V&lt;br /&gt;
* Damit wird der Ausgangselko im Leerlauf auf 36*1.5=55V aufgeladen&lt;br /&gt;
* Der Ausgangskondensator darf auf minimal 45V bei 1.5A (aufgerundet, wir wollen auf der sicheren Seite sein) abfallen. Das entspricht einer Kapazität von 1.5mF. Auch nach 10 Jahren sollte das Netzteil noch arbeiten, also nehmen wir Kondensatoren 2mF, 63V, Radial für Platinenmontage (2x RAD1.000/63)&lt;br /&gt;
* Die Ausgangsleistung (Gleichstrom) beträgt 36V*sqrt(2)*1.5A=78W, es wird ein Ringkerntransformator mit 80W, 2x18V gewählt (RKT8018). Dieser Liefert 2.22A&lt;br /&gt;
* Der Gleichrichter muss 1.5A gleichrichten, Sperrspannung 100V (B100C5000-3000) (ggf. etwas zu groß)&lt;br /&gt;
&lt;br /&gt;
Damit hätten wir schonmal den ersten Teil (hier nur das, was nicht auf die Platine gelötet wird):&lt;br /&gt;
[[Bild:linear_trafo.png|500px|Trafo mit Netzfilter]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7846</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7846"/>
		<updated>2005-06-14T16:24:10Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Längsregler 40V 1A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;br /&gt;
Diese Längsregeleinheit ist für eine Ausgangsleistung von 40W bei 40V ausgelegt.&lt;br /&gt;
Berechnung der Eingangsglieder:&lt;br /&gt;
* Ausgangsspannung 40V, es werden also mindestens 45V Versorgung gebraucht&lt;br /&gt;
* Der Gleichrichter hat 1V Spannungsabfall.&lt;br /&gt;
* Der Trafo braucht also (45+1)/sqrt(2) = 36V&lt;br /&gt;
* Damit wird der Ausgangselko im Leerlauf auf 36*1.5=55V aufgeladen&lt;br /&gt;
* Der Ausgangskondensator darf auf minimal 45V bei 1.5A (aufgerundet, wir wollen auf der sicheren Seite sein) abfallen. Das entspricht einer Kapazität von 1.5mF. Auch nach 10 Jahren sollte das Netzteil noch arbeiten, also nehmen wir Kondensatoren 2mF, 63V, Radial für Platinenmontage (2x RAD1.000/63)&lt;br /&gt;
* Die Ausgangsleistung (Gleichstrom) beträgt 36V*sqrt(2)*1.5A=78W, es wird ein Ringkerntransformator mit 80W, 2x18V gewählt (RKT8018). Dieser Liefert 2.22A&lt;br /&gt;
* Der Gleichrichter muss 1.5A gleichrichten, Sperrspannung 100V (B100C5000-3000) (ggf. etwas zu groß)&lt;br /&gt;
&lt;br /&gt;
Damit hätten wir schonmal den ersten Teil (hier nur das, was nicht auf die Platine gelötet wird):&lt;br /&gt;
[[Bild:Linear_trafo.png|right=200px|Trafo mit Netzfilter]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7845</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7845"/>
		<updated>2005-06-14T16:23:49Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Längsregler 40V 1A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;br /&gt;
Diese Längsregeleinheit ist für eine Ausgangsleistung von 40W bei 40V ausgelegt.&lt;br /&gt;
Berechnung der Eingangsglieder:&lt;br /&gt;
* Ausgangsspannung 40V, es werden also mindestens 45V Versorgung gebraucht&lt;br /&gt;
* Der Gleichrichter hat 1V Spannungsabfall.&lt;br /&gt;
* Der Trafo braucht also (45+1)/sqrt(2) = 36V&lt;br /&gt;
* Damit wird der Ausgangselko im Leerlauf auf 36*1.5=55V aufgeladen&lt;br /&gt;
* Der Ausgangskondensator darf auf minimal 45V bei 1.5A (aufgerundet, wir wollen auf der sicheren Seite sein) abfallen. Das entspricht einer Kapazität von 1.5mF. Auch nach 10 Jahren sollte das Netzteil noch arbeiten, also nehmen wir Kondensatoren 2mF, 63V, Radial für Platinenmontage (2x RAD1.000/63)&lt;br /&gt;
* Die Ausgangsleistung (Gleichstrom) beträgt 36V*sqrt(2)*1.5A=78W, es wird ein Ringkerntransformator mit 80W, 2x18V gewählt (RKT8018). Dieser Liefert 2.22A&lt;br /&gt;
* Der Gleichrichter muss 1.5A gleichrichten, Sperrspannung 100V (B100C5000-3000) (ggf. etwas zu groß)&lt;br /&gt;
&lt;br /&gt;
Damit hätten wir schonmal den ersten Teil (hier nur das, was nicht auf die Platine gelötet wird):&lt;br /&gt;
[[Bild:Linear_trafo.png|width=200px|Trafo mit Netzfilter]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7844</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7844"/>
		<updated>2005-06-14T16:22:21Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Längsregler 40V 1A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;br /&gt;
Diese Längsregeleinheit ist für eine Ausgangsleistung von 40W bei 40V ausgelegt.&lt;br /&gt;
Berechnung der Eingangsglieder:&lt;br /&gt;
* Ausgangsspannung 40V, es werden also mindestens 45V Versorgung gebraucht&lt;br /&gt;
* Der Gleichrichter hat 1V Spannungsabfall.&lt;br /&gt;
* Der Trafo braucht also (45+1)/sqrt(2) = 36V&lt;br /&gt;
* Damit wird der Ausgangselko im Leerlauf auf 36*1.5=55V aufgeladen&lt;br /&gt;
* Der Ausgangskondensator darf auf minimal 45V bei 1.5A (aufgerundet, wir wollen auf der sicheren Seite sein) abfallen. Das entspricht einer Kapazität von 1.5mF. Auch nach 10 Jahren sollte das Netzteil noch arbeiten, also nehmen wir Kondensatoren 2mF, 63V, Radial für Platinenmontage (2x RAD1.000/63)&lt;br /&gt;
* Die Ausgangsleistung (Gleichstrom) beträgt 36V*sqrt(2)*1.5A=78W, es wird ein Ringkerntransformator mit 80W, 2x18V gewählt (RKT8018). Dieser Liefert 2.22A&lt;br /&gt;
* Der Gleichrichter muss 1.5A gleichrichten, Sperrspannung 100V (B100C5000-3000) (ggf. etwas zu groß)&lt;br /&gt;
&lt;br /&gt;
Damit hätten wir schonmal den ersten Teil (hier nur das, was nicht auf die Platine gelötet wird):&lt;br /&gt;
[[Bild:Linear_trafo.png|Trafo mit Netzfilter]]&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Linear_trafo.png&amp;diff=14824</id>
		<title>Datei:Linear trafo.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Linear_trafo.png&amp;diff=14824"/>
		<updated>2005-06-14T16:20:45Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7843</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7843"/>
		<updated>2005-06-14T16:18:20Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Längsregler 40V 1A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;br /&gt;
Diese Längsregeleinheit ist für eine Ausgangsleistung von 40W bei 40V ausgelegt.&lt;br /&gt;
Berechnung der Eingangsglieder:&lt;br /&gt;
* Ausgangsspannung 40V, es werden also mindestens 45V Versorgung gebraucht&lt;br /&gt;
* Der Gleichrichter hat 1V Spannungsabfall.&lt;br /&gt;
* Der Trafo braucht also (45+1)/sqrt(2) = 36V&lt;br /&gt;
* Damit wird der Ausgangselko im Leerlauf auf 36*1.5=55V aufgeladen&lt;br /&gt;
* Der Ausgangskondensator darf auf minimal 45V bei 1.5A (aufgerundet, wir wollen auf der sicheren Seite sein) abfallen. Das entspricht einer Kapazität von 1.5mF. Auch nach 10 Jahren sollte das Netzteil noch arbeiten, also nehmen wir Kondensatoren 2mF, 63V, Radial für Platinenmontage (2x RAD1.000/63)&lt;br /&gt;
* Die Ausgangsleistung (Gleichstrom) beträgt 36V*sqrt(2)*1.5A=78W, es wird ein Ringkerntransformator mit 80W, 2x18V gewählt (RKT8018). Dieser Liefert 2.22A&lt;br /&gt;
* Der Gleichrichter muss 1.5A gleichrichten, Sperrspannung 100V (B100C5000-3000) (ggf. etwas zu groß)&lt;br /&gt;
&lt;br /&gt;
Damit hätten wir schonmal den ersten Teil:&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7842</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7842"/>
		<updated>2005-06-14T15:31:34Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Längsregler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wer mit den Eckdaten (Ausgangsspannung/Ausgangsstrom) der folgenden Regeleinheiten nicht einverstanden ist, sollte eine neue Regeleinheit anlegen und nicht willkürlich die Werte ändern!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7841</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7841"/>
		<updated>2005-06-14T15:29:50Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Schnittstelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;br /&gt;
&lt;br /&gt;
=Regeleinheiten=&lt;br /&gt;
Das Netzteil ist absichtlich modular aufgebaut. Dadurch kann sich der gewillte Nachbauer genau die Einheiten nachbauen, die er braucht. Die Modularität soll in erster Linie aber nicht dazu verwendet werden, aus dem Netzteil eine eierlegende Wollmichsau zu machen. Sattdessen sollen dadurch sinnvolle Vereinfachungen getroffen werden.&lt;br /&gt;
&lt;br /&gt;
==Längsregler==&lt;br /&gt;
Längsregler haben viele gute Eigenschaften. Am deutlichsten hervorzuheben ist die gerine Ausgangswelligkeit (z.B. gegenüber Schaltnetzteilen) und das schnelle Regelverhalten. Dem gegenüber stehen hohe Verlustleistugen.&lt;br /&gt;
Das (chronologisch) erste Netzteilmodul ist ein Längsregler für Ausgangsspannungen bis 40V und Ausgangsströmen von 1A. Zugegebener Maßen ist das nicht viel, doch für den Anfang soll es reichen (immerhin schon 40W!)&lt;br /&gt;
&lt;br /&gt;
===Längsregler 40V 1A===&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7840</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7840"/>
		<updated>2005-06-14T14:06:22Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projekte]]&lt;br /&gt;
&lt;br /&gt;
By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7839</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7839"/>
		<updated>2005-06-14T09:14:26Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By: Clemens Helfmeier&lt;br /&gt;
&lt;br /&gt;
Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum Eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mit Hilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle|Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;br /&gt;
Das Feld &amp;quot;Slave Addresse&amp;quot; &#039;&#039;muss immer&#039;&#039; mit der Addresse des Slaves gefüllt sein, der an der Übertragung beteiligt ist (er ist entweder Sender oder Empfänger). Für den Befehl sind folgende Werte vorgesehen:&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
 ! Wert&lt;br /&gt;
 ! Bedeutung &lt;br /&gt;
 ! genauere Beschreibung (Link)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0000 - 0x00FF || Reserviert || [[Projekt: Labornetzteil#Reservierte Befehle|Reservierte Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x0100 - 0x01FF || Information || [[Projekt: Labornetzteil#Informative Befehle|Informative Befehle]]&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x1000 - 0xFFFF || Gerätspezifisch || [[Projekt: Labornetzteil#Geräte Befehle|Geräte Befehle]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Reservierte Befehle===&lt;br /&gt;
Bereich: 0x0000 bis 0x00FF (Befehl high = 0x00)&lt;br /&gt;
Dieser Befehlsbereich wird reserviert und darf nicht genutzt werden.&lt;br /&gt;
&lt;br /&gt;
===Informative Befehle===&lt;br /&gt;
Bereich: 0x0100 bis 0x01FF (Befehl high = 0x01)&lt;br /&gt;
Informative Befehle vermitteln dem Master, welche Gerätespezifischen Befehle der Slave unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Geräte Befehle===&lt;br /&gt;
Bereich: 0x1000 - 0xFFFF&lt;br /&gt;
Dieser Befehlsbereich wird vom System genutzt, um dem Slave mitzuteilen, welche Ausgangskonditionen anliegen sollen, und vom Slave zu erfahren, welche wirklich anliegen.&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7828</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7828"/>
		<updated>2005-06-13T16:15:05Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Schnittstelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mithilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle]]Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
==Elektrischer Aufbau==&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;br /&gt;
[[Bild:netzteil_interface.png|thumb|right|300px|Schnittstelle]]&lt;br /&gt;
&lt;br /&gt;
Die elektrische Seite der Schnittstelle zwischen Master und Slave ist sehr einfach. Es werden nur zwei Optokoppler verwendet, einer davon braucht einen Tri-State-Ausgang.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Die Datenkommunikation geschieht paketorientiert. Ein Paket besteht immer aus 8 Byte.&lt;br /&gt;
Aufbau des Pakets:&lt;br /&gt;
{| border=1 cellpadding=0 align=&amp;quot;center&amp;quot;&lt;br /&gt;
 !Offset&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 0&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 2&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 3&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 5&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 6&lt;br /&gt;
 |align=&amp;quot;center&amp;quot;| 7&lt;br /&gt;
 |-&lt;br /&gt;
 !Inhalt&lt;br /&gt;
 | Slave Addresse&lt;br /&gt;
 | Reserviert&lt;br /&gt;
 | Befehl low&lt;br /&gt;
 | Befehl high&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
 | Daten&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Netzteil_interface.png&amp;diff=14823</id>
		<title>Datei:Netzteil interface.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Netzteil_interface.png&amp;diff=14823"/>
		<updated>2005-06-13T15:44:23Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: Schnittstelle zwischen Master und Slave&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schnittstelle zwischen Master und Slave&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7827</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7827"/>
		<updated>2005-06-13T14:57:51Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Aufbau (Zusammenfassung) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle (Zusammenfassung)|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit (Zusammenfassung)==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en) (Zusammenfassung)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle (Zusammenfassung)==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mithilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;br /&gt;
Mehr zur Schnittstelle unter [[Projekt: Labornetzteil#Schnittstelle]]Schnittstelle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle=&lt;br /&gt;
Elektrischer Aufbau der Schnittstelle:&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7826</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7826"/>
		<updated>2005-06-13T14:53:18Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Schnittstelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl standen unterschiedliche Schnittstellen wie [[CAN|CAN]], [[SPI|SPI]], [[UART|UART]].&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mithilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7825</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7825"/>
		<updated>2005-06-13T14:49:50Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Aufbau (Zusammenfassung) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Kontrolleinheit|Kontrolleinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Regeleinheit(en)|Regeleinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Kontrolleinheit==&lt;br /&gt;
Die Kontrolleinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Regeleinheit(en)==&lt;br /&gt;
Die Regeleinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Kontrolleinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Kontrolleinheit über Statusänderungen zu informieren (z.B. kurzgeschlossener Ausgang, Überhitzung, etc.).&lt;br /&gt;
&lt;br /&gt;
Regeleinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Kontrolleinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle==&lt;br /&gt;
Die Schnittstelle zwischen Kontroll- und Regeleinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Regeleinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Folgende Schnittstellen standen zur Auswahl:&lt;br /&gt;
* [[CAN|CAN]]&lt;br /&gt;
* [[SPI|SPI]]&lt;br /&gt;
* [[UART|UART]]&lt;br /&gt;
* eine andere, selbstdefinierte Schnittstelle&lt;br /&gt;
&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mithilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, für den das Signal ist und auf den gehöhrt werden soll.&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7824</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7824"/>
		<updated>2005-06-13T14:45:57Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Haupteinheit|Haupteinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Nebeneinheit(en)|Nebeneinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Haupteinheit==&lt;br /&gt;
Die Haupteinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Nebeneinheit(en)==&lt;br /&gt;
Die Nebeneinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Haupteinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Haupteinheit über Statusänderungen zu informieren (Interrupts).&lt;br /&gt;
&lt;br /&gt;
Nebeneinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Haupteinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle==&lt;br /&gt;
Die Schnittstelle zwischen Haupt- und Nebeneinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Nebeneinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Folgende Schnittstellen standen zur Auswahl:&lt;br /&gt;
* [[CAN|CAN]]&lt;br /&gt;
* [[SPI|SPI]]&lt;br /&gt;
* [[UART|UART]]&lt;br /&gt;
* eine andere, selbstdefinierte Schnittstelle&lt;br /&gt;
&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mithilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, auf den gehöhrt werden soll.&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7823</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7823"/>
		<updated>2005-06-13T14:29:29Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Schnittstelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Haupteinheit|Haupteinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Nebeneinheit(en)|Nebeneinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Haupteinheit==&lt;br /&gt;
Die Haupteinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Nebeneinheit(en)==&lt;br /&gt;
Die Nebeneinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Haupteinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Haupteinheit über Statusänderungen zu informieren (Interrupts).&lt;br /&gt;
&lt;br /&gt;
Nebeneinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Haupteinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle==&lt;br /&gt;
Die Schnittstelle zwischen Haupt- und Nebeneinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Nebeneinheiten&lt;br /&gt;
* ggf. Interrupts&lt;br /&gt;
&lt;br /&gt;
Folgende Schnittstellen standen zur Auswahl:&lt;br /&gt;
* [[CAN|CAN]]&lt;br /&gt;
* [[SPI|SPI]]&lt;br /&gt;
* [[UART|UART]]&lt;br /&gt;
* eine andere, selbstdefinierte Schnittstelle&lt;br /&gt;
&lt;br /&gt;
Ausgewählt wurde eine etwas modifizierte UART-Schnittstelle. Diese wird von den meisten µControllern in Hardware unterstützt und kann somit besonders einfach und Rechenleistungsarm verwendet werden. Der Master muss seinen Empfänger mithilfe eines Multiplexers auf mehrere Slaves schalten können. Das Protokoll bestimmt den Slave, auf den gehöhrt werden soll.&lt;br /&gt;
&lt;br /&gt;
=Änderungen / Changelog=&lt;br /&gt;
13.6.2005: Erstellung des Artikels&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7822</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7822"/>
		<updated>2005-06-13T14:16:46Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: /* Haupteinheit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Haupteinheit|Haupteinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Nebeneinheit(en)|Nebeneinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Haupteinheit==&lt;br /&gt;
Die Haupteinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HD44780|HD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Nebeneinheit(en)==&lt;br /&gt;
Die Nebeneinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Haupteinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Haupteinheit über Statusänderungen zu informieren (Interrupts).&lt;br /&gt;
&lt;br /&gt;
Nebeneinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Haupteinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle==&lt;br /&gt;
Die Schnittstelle zwischen Haupt- und Nebeneinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Nebeneinheiten&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
Folgende Schnittstellen stehen zur Auswahl:&lt;br /&gt;
* [[CAN|CAN]] mit extra Interruptleitung&lt;br /&gt;
* [[SPI|SPI]] mit extra Interruptleitung&lt;br /&gt;
* eine andere, selbstdefinierte Schnittstelle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Änderungen / Changelog=&lt;br /&gt;
13.6.2005: Erstellung des Artikels&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7821</id>
		<title>Projekt: Labornetzteil</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Projekt:_Labornetzteil&amp;diff=7821"/>
		<updated>2005-06-13T14:16:00Z</updated>

		<summary type="html">&lt;p&gt;Clemens Helfmeier: Ein gutes Labornetzteil ist sehr teuer und hält nur selten, was es verspricht. Hier kann man also viel Geld und Mühe Sparen, wenn man sich selber Gedanken zum Aufbau und zur Verwendung macht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Wiki-Seite soll als Entwicklungsmedium für ein Labornetzteil fungieren. Es wird ein modulares Labornetzteil entworfen und die Ergebnisse hier präsentiert.&lt;br /&gt;
&lt;br /&gt;
=Aufbau (Zusammenfassung)=&lt;br /&gt;
Das Netzteil soll modular aufgebaut werden, so dass zusätzliche Erweiterungen einfach anzubinden sind. Dafür werden eine [[Projekt: Labornetzteil#Haupteinheit|Haupteinheit]] und eine oder mehrere [[Projekt: Labornetzteil#Nebeneinheit(en)|Nebeneinheit(en)]] beötigt. Die Verbindung wird duch eine [[Projekt: Labornetzteil#Schnittstelle|(noch zu definierende) Schnittstelle]] hergestellt.&lt;br /&gt;
&lt;br /&gt;
==Haupteinheit==&lt;br /&gt;
Die Haupteinheit (später auch &amp;quot;Master&amp;quot; oder &amp;quot;Mastereinheit&amp;quot; genannt) ist für die Interaktion mit dem Benutzer zuständig. Nebenbei soll sie noch mit anderer digitaler Hardware (z.B. PC) interagieren können. Dazu werden folgende Schnittstellen benötigt:&lt;br /&gt;
* LC-Display: Dieses ist zum Anzeigen von Informationen nötig. Es wird ein [[HDD44780|HDD44780-Kompatibles]] Display eingesetzt.&lt;br /&gt;
* Taster: Zum eingeben der Ausgangsspannung und des Ausgangsstrom werden Taster oder Drehgeber benötigt.&lt;br /&gt;
* RS232 oder USB für die Verbindung zum PC: Beides wird in das Layout aufgenommen und kann mit einem Jumper auf der Platine ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
==Nebeneinheit(en)==&lt;br /&gt;
Die Nebeneinheiten (später auch &amp;quot;Slaves&amp;quot; oder &amp;quot;Slaveeinheiten&amp;quot; genannt) sind für das Regeln der Ausgänge zuständig. Sie brauchen eine Schnittstelle zur Haupteinheit, die ihnen die Sollwerte liefert und über die sie auch die Ist-Werte zurückgeben können. Weiterhin muss es eine Möglichkeit geben, die Haupteinheit über Statusänderungen zu informieren (Interrupts).&lt;br /&gt;
&lt;br /&gt;
Nebeneinheiten müssen aus folgenden Blöcken bestehen:&lt;br /&gt;
* Galvanische Trennung von der Schnittstelle zur Haupteinheit (z.B. über Optokoppler)&lt;br /&gt;
* Verarbeitung der Informationen, ggf. Umwandlung in analoge Spannungen&lt;br /&gt;
* Regelung des Ausgangs&lt;br /&gt;
&lt;br /&gt;
==Schnittstelle==&lt;br /&gt;
Die Schnittstelle zwischen Haupt- und Nebeneinheiten muss folgendes Leisten:&lt;br /&gt;
* galvanische Trennung&lt;br /&gt;
* Möglichekeit zur Anbindung mehrerer Nebeneinheiten&lt;br /&gt;
* Interrupts&lt;br /&gt;
&lt;br /&gt;
Folgende Schnittstellen stehen zur Auswahl:&lt;br /&gt;
* [[CAN|CAN]] mit extra Interruptleitung&lt;br /&gt;
* [[SPI|SPI]] mit extra Interruptleitung&lt;br /&gt;
* eine andere, selbstdefinierte Schnittstelle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Änderungen / Changelog=&lt;br /&gt;
13.6.2005: Erstellung des Artikels&lt;/div&gt;</summary>
		<author><name>Clemens Helfmeier</name></author>
	</entry>
</feed>