<?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=Mixer</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=Mixer"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Mixer"/>
	<updated>2026-04-14T14:37:26Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Platinensammler&amp;diff=74604</id>
		<title>Platinensammler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Platinensammler&amp;diff=74604"/>
		<updated>2013-03-11T10:17:08Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung &amp;amp; Generelles ==&lt;br /&gt;
Der Traum eines jeden Elektrotechnik-Hobbyisten ist wohl ein selbst entworfenes PCB. Oft scheitert eine saubere Realisierung jedoch an der Fertigung der Leiterplatte. Hobbymittel wie die Direkttonermethode führen oft nur zu unzureichend sauberen Ergebnissen, Doppelseitige Platinen sind nur schwer sauber zu realisieren. Eine vernünftige Ausrüstung zum Belichten ist teuer und so mancher Bastler hat auch schlicht und ergreifend nicht die Möglichkeit zum Umgang mit Entwicklern, Ätzmitteln, usw. Egal ob man nun die Platinen nicht fertigen kann oder möchte besteht immer die Möglichkeit diese bei den Platinenherstellern (professionell) produzieren zu lassen. Das ist allerdings oft mit nicht unerheblichen Kosten und einem Mindestnutzen verbunden, gerade wenn nur einzelne kleine Platinen bernötigt werden.&lt;br /&gt;
&lt;br /&gt;
Aus diesem Grunde bietet Jakob Kleinen alias &amp;quot;jakobk&amp;quot; hier im Forum freundlicher Weise die Möglichkeit zur Mitbestellung an. Es werden fortlaufend Bestellungen gesammelt. Gefertigt wird immer, sobald ein Nutzen voll ist, daher lassen sich auch keine genauen Bestelltermine vorhersagen.&lt;br /&gt;
&lt;br /&gt;
Der Preis wird abhängig von der genutzten, genauer gesagt von der im Nutzen benötigten Fläche, berechnet. Denn um die einzelnen Layouts vereinzeln zu können muss ein umlaufender 3mm Fräsgraben zur eigentlichen Leiterkartenkontur zugerechnet werden.&lt;br /&gt;
&lt;br /&gt;
d.h. wenn eine Platine 3x2cm groß ist, wird eine Fläche 3,6cm x 2,6cm also 9,36cm² berechnet.&lt;br /&gt;
&lt;br /&gt;
== Designregeln ==&lt;br /&gt;
&lt;br /&gt;
===Kontur===&lt;br /&gt;
Die Platinenkontur kann beinahe beliebige Formen haben.&lt;br /&gt;
&lt;br /&gt;
Allerdings sollte sie so beschaffen sein, dass sie mit einem 2mm Fräser herstellbar ist und sollte mit einer Strichstärke von 1 MIL oder 0,0254mm gezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus muss eine Platine mindestens eine Seitenlänge mit 10mm und darf keine Seitenlänge unter 5mm haben.&lt;br /&gt;
&lt;br /&gt;
===Bohrungen===&lt;br /&gt;
Der kleinste verfügbare Bohrdurchmesser beträgt 0,3mm.&lt;br /&gt;
&lt;br /&gt;
===Fräsungen===&lt;br /&gt;
Innerhalb der Leiterplatten können Fräsungen beliebiger Form eingebracht werden. Auch diese müssen mit einem 2mm-Fräser herstellbar sein. Daher sollte man diese in einer eigenen Lage mit einer Strichstärke von min. 2mm Zeichnen.&lt;br /&gt;
&lt;br /&gt;
Wer z.B. für DC-Buchsen metalisierte Langlöcher haben möchte darf diese mit einem 1mm-Fräser zeichnen. Um die metalisierung zu erhalten muss innerhalb dieser Fräsung zusätzlich eine durchkontaktierte Bohrung platziert werden.&lt;br /&gt;
&lt;br /&gt;
===Leiterbahnstärke===&lt;br /&gt;
Grundsätzlich sind Leiterbahnen ab 0,15mm machbar. Die Mindestabstände im Kupfer liegen ebenfalls bei 0,15mm.&lt;br /&gt;
&lt;br /&gt;
===Abstand zwischen Kontur und Kupfer===&lt;br /&gt;
Zwischen Kupfer und Fräsungen sollte (außer natürlich den Stellen wo Kupfer angefräst werden soll) 0,2mm betragen und die Hersteller mögen Kupfer anfräsen wegen der höheren Belastung ihrerer Fräser nicht so gerne.&lt;br /&gt;
&lt;br /&gt;
== Fertigungsparameter des Nutzen ==&lt;br /&gt;
&lt;br /&gt;
Die im Rahmen der Platinensammlung bestellten Nutzen werden immer 2-lagig mit 35µ Kupfer, auf 1,55mm FR4, mit E-Test, HAL-Verzinnung (RoHS), Stoplack auf beiden Seiten und Bestückungsdruck auf der Oberseite bestellt. &lt;br /&gt;
&lt;br /&gt;
Sofern nicht ausdrücklich anders gewünscht, werden in den Bestückungsdruck Gehäusekonturen und Referenzen übernommen.&lt;br /&gt;
&lt;br /&gt;
Wer keinen Bestückungsdruck haben möchte, kann dies im Bestellformular vermerken. Dann löscht Jakob die entsprechende Lage aus dem Datensatz, der Preis bleibt jedoch der gleiche.&lt;br /&gt;
&lt;br /&gt;
Um die Teillayots später identifizieren zu können bekommt jede Platine eine kleine Markierung (kleine 4-Stellige &amp;quot;7-Segmentanzeige&amp;quot;) &lt;br /&gt;
[[Bild:ID_Skizze.png]]&lt;br /&gt;
&lt;br /&gt;
Wer sich die Stelle selber aussuchen möchte muss eine Markierung an ensprechender Stelle platzieren und im Bestellformular die Position mit angeben. &lt;br /&gt;
&lt;br /&gt;
Bei Layouts ohne ID-Feld wird eins an einer möglichst unauffälligen Stelle platziert (z.B. unterhalb eines ICs. Dann ist die ID bei bestückter Platine nicht mehr zu sehen)&lt;br /&gt;
&lt;br /&gt;
Bevorzugt sollte das ID-Feld im Bestückungsdruck untergebracht werden, aber es kann auch im Stoplack oder im Kupfer liegen.&lt;br /&gt;
&lt;br /&gt;
Für Eaglenutzer gibt es die Platzhalter hier:&lt;br /&gt;
http://www.mikrocontroller.net/attachment/138590/Platinensammler.lbr&lt;br /&gt;
in einer kleinen lib.&lt;br /&gt;
&lt;br /&gt;
Wer nicht mit Eagle arbeitet muss sich ggf. bitte einen eigenen Platzhalter entsprechend der Skizze bauen.&lt;br /&gt;
&lt;br /&gt;
== Preis ==&lt;br /&gt;
===Mindestmenge===&lt;br /&gt;
Unter Mindestmenge versteht sich die Anzahl der Platinen die man mindestens haben will/muss. &lt;br /&gt;
(Zusätzlich gibt es die Möglichkeit ggf. überproduzierte Platinen zu einen günstigeren Preis abzunehmen)&lt;br /&gt;
&lt;br /&gt;
Der Preis für Platinen der Mindestmenge beträgt 0,30/cm². &lt;br /&gt;
&lt;br /&gt;
Allergings kommt zur tatsächlichen Platinenfläche noch ein umlaufender Fräsgraben von 3mm.&lt;br /&gt;
&lt;br /&gt;
Also kostet eine 3cm x 2cm große Platine: &lt;br /&gt;
&lt;br /&gt;
A_Nutzen = (3cm + 0,6cm) x (2cm + 0,6cm)&lt;br /&gt;
A_Nutzen = 9,36cm²&lt;br /&gt;
&lt;br /&gt;
Preis_m = A_Nutzen * 0,30€/cm²&lt;br /&gt;
Preis_m = 9,36cm² x 0,30€/cm²&lt;br /&gt;
Preis_m = 2,81€/Stk&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Die genaue Kontur der Platine spielt für den Preis keine Rolle. Es wird immer das überdeckende Rechteck berechnet.&lt;br /&gt;
&lt;br /&gt;
===Überproduzierte===&lt;br /&gt;
Die Flächenberechnung für abgenommene überproduzierte Platinen ist die Gleiche wie für die Mindestmenge. Allerdings liegt der cm²-Preis hier nur noch bei 0,10€/cm²&lt;br /&gt;
&lt;br /&gt;
Also kosten die Überproduzierten der 3cm x 2cm Platine&lt;br /&gt;
Preis_ü = 9,36cm² x 0,10€/cm²&lt;br /&gt;
Preis_ü = 0,94€/Stk&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
i.d.R. kommen zweimal mehr Überproduzierte wie mindestens bestellt werden (sofern die mindestmenge bei 1-4 Stk liegt)&lt;br /&gt;
&lt;br /&gt;
Es Besteht kein Abnahmezwang für die Überproduzierten. Ebenso muss man auch nicht alle Überproduzierten abnehmen.&lt;br /&gt;
&lt;br /&gt;
===Verpackung und Versand===&lt;br /&gt;
Ich verschicke die Platinen im Luftpolsterumschlag als Briefe.&lt;br /&gt;
&lt;br /&gt;
Die Verpackungs- und Versandkosten hängen entsprechend von Größe, Gewicht und Zielland ab.&lt;br /&gt;
&lt;br /&gt;
Innerhalb von Deutschland liegen die meisten Sendungen zwischen 1,50€ und 2,50€ und innerhalb der EU und in die Schweiz liegen die Versandkosten zwischen 2,00€ und 4,50€.&lt;br /&gt;
&lt;br /&gt;
== Zahlungsarten ==&lt;br /&gt;
Grundsätzlich lege ich den Platinen einfach eine Rechnung bei, die dann bitte Zeitnah zu begleichen ist.&lt;br /&gt;
&lt;br /&gt;
Grade für Bestellungen aus dem Ausland kann es auf Grund von hohen Überweisungskosten auch interessant sein per Paypal zu bezahlen. Das ist auch kein Problem, aber dann müßt ihr das bitte im Bestellformular unter Anmerkungen angeben und die zusätzlichen Gebühren (0,35€/Zahlung + 1,9% des Rechnungswertes) kommen noch mit auf die Rechnung.&lt;br /&gt;
&lt;br /&gt;
== Bestellablauf ==&lt;br /&gt;
Die geprüften Layoutdaten (*.dru File siehe Designregeln oder hier http://www.mikrocontroller.net/attachment/132705/platinensammler_02.dru ) schickt ihr dann bitte zusammen mit dem ausgefüllten Bestellformular ( http://www.mikrocontroller.net/attachment/132047/Bestellformular.txt ) an &#039;&#039;&#039; platinensammler(at)gmail.com &#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Bitte beachtet, dass ich nur vollständige Bestellungspakete &lt;br /&gt;
berücksichten kann (auch die Wiederbesteller bitte). Außerdem solltet &lt;br /&gt;
ihr mir bitte keine &amp;quot;Schnellschüsse&amp;quot; mit &amp;quot;Schönheitsfehlern schicken, &lt;br /&gt;
die ihr dann noch drei mal bis zum Stichtag nachbessert.&lt;br /&gt;
&lt;br /&gt;
Wenn sich jemand nicht sicher ist, ob sein Layout produzierbar ist, &lt;br /&gt;
schaue&lt;br /&gt;
ich gerne vorab unverbindlich drüber. Grade bei Layoutneulingen kann das&lt;br /&gt;
schon mal ganz nützlich sein, um grobe Fehler zu vermeiden und um ggf.&lt;br /&gt;
Unsicherheit entgegen zu wirken.&lt;br /&gt;
&lt;br /&gt;
Sobald ich die Daten geprüft und in den Nutzen übernommen habe, &lt;br /&gt;
bestätige ich die Bestellung per Mail. In dieser Mail steht dann eure &lt;br /&gt;
Adresse sowie Anzahl, Größe und Kosten eurer Platinen. Wenn ich nichts &lt;br /&gt;
von euch höre gehe ich davon aus, dass ich eure Bestellung richtig &lt;br /&gt;
übernommen habe. (Auch wenn ich mich über eine kurze Bestätigung freue)&lt;br /&gt;
&lt;br /&gt;
Ich sammle laufend Layouts und trage denn Füllstand hier in der Überischtstabelle (unten) ein. &lt;br /&gt;
&lt;br /&gt;
Zusätzlich melde ich mich zwischendurch auch im Forum, wenn ich alle offenen Aufträge bearbeitet hab.&lt;br /&gt;
&lt;br /&gt;
Wer bis dahin noch keine Auftragsbestätigung hat, sollte sich bei mir melden.&lt;br /&gt;
&lt;br /&gt;
Sobald ein Nutzen voll ist, gebe ich ihn in die Fertigung und sammle direkt für den neuen Nutzn weiter.&lt;br /&gt;
&lt;br /&gt;
Wenn ein produzierter Nutzen bei mir ist, drösel ich den auseinander, gebe die Teilbestellungen zusammen mit den Rechnungen in die Post.&lt;br /&gt;
&lt;br /&gt;
== Dateiformate ==&lt;br /&gt;
Ihr könnt mir eure Layoutdaten in den folgenden Formaten mailen.&lt;br /&gt;
* Eagle brd-file&lt;br /&gt;
* KiCad brd-file&lt;br /&gt;
* RS-274-X (Extended Gerber) / Excellon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gerberfiles===&lt;br /&gt;
Bei den Extended Gerber und Excellon Daten müssen eure Daten die folgenden Endungen für die Lagen zuordnung haben:&lt;br /&gt;
* Kontur                            - *.l00&lt;br /&gt;
* Stoplack Lötseite (Unten)         - *.l02&lt;br /&gt;
* Kupfer Lötseite                   - *.l03&lt;br /&gt;
* Kupfer Bestückungsseite (Oben)    - *.l06&lt;br /&gt;
* Stoplack Bestückungsseite         - *.l07&lt;br /&gt;
* Bestückungsdruck Bestückungsseite - *.l08&lt;br /&gt;
* Fräsungen                         - *.mil&lt;br /&gt;
&lt;br /&gt;
* durchkontaktierte Bohrungen       - *.dk&lt;br /&gt;
* nicht durchkontaktierte Bohrungen - *.ndk&lt;br /&gt;
&lt;br /&gt;
Außerdem müssen sie der folgenden Formatierung entsprechen:&lt;br /&gt;
&lt;br /&gt;
Gerber&lt;br /&gt;
* Format          : metric&lt;br /&gt;
* Integer Digits  : 2&lt;br /&gt;
* Decimal Digits  : 4&lt;br /&gt;
* Type            : absolute&lt;br /&gt;
* Zero Suppressing: leading&lt;br /&gt;
&lt;br /&gt;
Excellon&lt;br /&gt;
* Format          : metric&lt;br /&gt;
* Integer Digits  : 2&lt;br /&gt;
* Decimal Digits  : 4&lt;br /&gt;
* Type            : absolute&lt;br /&gt;
* Zero Suppressing: none&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
* Sind auch &amp;quot;buried vias&amp;quot;, &amp;quot;blind vias&amp;quot; möglich? - es sind leider keine buried oder blind vias möglich&lt;br /&gt;
&lt;br /&gt;
* Was ist mit dem Multilayernutzen? - Dazu hat sich seit der Ankündigung kein einziges Layout eingefunden. Daher wurde der wieder eingstampft.&lt;br /&gt;
&lt;br /&gt;
* Lieferung in die Schweiz ist kein Problem (Siehe Verpackung und Versand)&lt;br /&gt;
&lt;br /&gt;
Noch eine neue Frage? Dann schickt sie [http://www.mikrocontroller.net/user/show/JakobK mir.]&lt;br /&gt;
&lt;br /&gt;
== Bestellungen ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nutzen !! Status !! Update&lt;br /&gt;
|-&lt;br /&gt;
| 2013-0001|| versand || 2013/03/09&lt;br /&gt;
|-&lt;br /&gt;
| 2013-0002|| versand || 2013/03/09&lt;br /&gt;
|-&lt;br /&gt;
| 2013-0003|| in Produktion || 2013/03/09&lt;br /&gt;
|-&lt;br /&gt;
| 2013-0004|| zu 65% gefüllt || 2013/03/11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* http://www.mikrocontroller.net/topic/245590 (30ct)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/273018 (60ct)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/245595 (Feedback)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/245594 (FAQ)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/245594#2696432 (FAQ: EAGLE Hohlsteckerbuchsen)&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Platinenhersteller &lt;br /&gt;
* http://www.platinensammler.de/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Platinen]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F10x_Standard_Peripherals_Library&amp;diff=73665</id>
		<title>STM32F10x Standard Peripherals Library</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F10x_Standard_Peripherals_Library&amp;diff=73665"/>
		<updated>2013-03-05T09:39:07Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Neues Seitenlayout von ST&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Allgemeines=&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;STM32F10x Standard Peripherals Library&#039;&#039;  ist eine umfangreiche komfortable C-Bibliothek, die den Zugriff auf alle Funktionen der &#039;&#039;&#039;STM32F10x&#039;&#039;&#039; Familie erlaubt. Dabei ist für die verschiedenen Peripheriekomponenten jeweils ein eigenes Modul verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die Bibliothek kann hier bei ST kostenlos heruntergeladen werden.&lt;br /&gt;
Dazu auf der [http://www.st.com/web/en/home.html ST-Webseite]:&lt;br /&gt;
* Oben den Punkt Support wählen&lt;br /&gt;
* Auf der linken Seite &amp;quot;Tools and Software&amp;quot; anklicken&lt;br /&gt;
* Nun links nochmals &amp;quot;Software&amp;quot; auswählen&lt;br /&gt;
* Danach den Unterpunkt &amp;quot;MCU Software&amp;quot; wählen&lt;br /&gt;
* Nun die richtige MCU-Familie, also &amp;quot;STM32 MCUs Software&amp;quot; selektieren&lt;br /&gt;
* Es erscheint eine Tabelle mit vielen Packages für die zahlreichen Demoboards und verschiedene Bibliotheken (USB, Ethernet, etc.)&lt;br /&gt;
* Die STM32F10x Standard Peripherals Library ist hier als &amp;quot;STSW-STM32054&amp;quot; bezeichnet&lt;br /&gt;
* Nach der Auswahl kann diese über den Download-Button in einem *.zip-Archiv heruntergeladen werden&lt;br /&gt;
&lt;br /&gt;
Alternativ ist hier ein [http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware/stsw-stm32054.zip Direktlink].&lt;br /&gt;
In dem Archiv ist die ‎STM32F10x Standard Peripherals Library. Zu jeder Peripherie gibt es diverse Beispiele und eine Beschreibung als CHM Datei &amp;quot;stm32f10x_stdperiph_lib_um.chm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bevor Ihr lange sucht, die USB-Schnittstelle ist nicht in der &#039;&#039;STM32F10x Standard Peripherals Library&#039;&#039; enthalten. Die hierfür verfügbare Firmware sowie Beispielcode befindet sich in der [[STM32_USB-FS-Device_Lib]]&lt;br /&gt;
&lt;br /&gt;
===Hinweise===&lt;br /&gt;
Die notwendigen Informationen, um die Funktionen der Standard Peripherals Library zu verstehen, muss man sich leider aus verschiedenen Quellen zusammensuchen. Daher soll mit diesem Artikel versucht werden, deren Benutzung für die verschiedenen Peripheriekomponenten zu erläutern.&lt;br /&gt;
&lt;br /&gt;
Leider beziehen sich die von ST gelieferten Beispiele sehr auf die von ST verfügbaren Evalboards und der Code wimmelt von #defines, so dass man sich erst mühsam durchhangeln muss um zu verstehen, was da eigentlich passiert. Dies geht zwar durch die gute Verlinkung in der Hilfsdatei ganz gut, erschwert aber den Einstieg unnötig. &lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll daher die Anwendung &#039;&#039;bare bones&#039;&#039; ähnlich den Beispielen in den AVR Datenblättern erfolgen.&lt;br /&gt;
Wo nötig, werden die zum Verständnis relevanten Ausschnitte des Reference Manual [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008] in den Artikel kopiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(Bevor hier die Copyright Discussion entbrennt: Das Landgericht München hat 1996 festgestellt, dass die Beschreibung von elektronischen Schaltungen nicht dem Urheberrecht unterliegen. Außerdem sollte ST sehr daran gelegen sein mehr Entwickler für Ihre µC zu begeistern.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Dokumentationen ===&lt;br /&gt;
&lt;br /&gt;
Um mit der Library zu arbeiten sind folgende Dokumentationen empfehlenswert:&lt;br /&gt;
&lt;br /&gt;
* RM0008 Reference Manual zum STM32Fxxxx Controller&lt;br /&gt;
    Beschreibung und Registerdoku der Peripherie (GPIO, Timer ...)&lt;br /&gt;
* PM0056 STM32F10xxx Cortex-M3 programming manual&lt;br /&gt;
    Cortex-M3 eigene Peripherie (wichtig zb. NVIC)&lt;br /&gt;
* Datasheet des verwendeten µC Types (zb. STM32F103xC/D/E)&lt;br /&gt;
    Pinout des µC und alternative Verwendbarkeit der PINs&lt;br /&gt;
&lt;br /&gt;
Download from [[http://www.st.com/internet/mcu/class/1734.jsp Documents and files for STM32F family]]&lt;br /&gt;
&lt;br /&gt;
=== Die ST Standard Peripheral Lib in CrossWorks ===&lt;br /&gt;
Aufgrund mehrfacher Anfragen, hier ein Archiv, das meine Arbeitsumgebung [[Bild:CrossWorks_StandardLib_Setup.zip]] mit zwei Crossworks Projekten (ARM_LED_TEST und ARM_USB_Test) enthält. Einfach alles in ein Verzeichnis entpacken und schon sollte es Laufen.&lt;br /&gt;
&lt;br /&gt;
=== Einführungsbeispiel Blinking LED ===&lt;br /&gt;
&lt;br /&gt;
Einführungsbeispiel [[STM32 LEDBlinken AtollicTrueStudio]]&lt;br /&gt;
&lt;br /&gt;
=== Die Idee hinter der STM32 Standard Peripherals Library ===&lt;br /&gt;
&lt;br /&gt;
So stellt sich ARM und ST-Microelectronics die Library vor.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Stm32_std_peripherial_library_idee.JPG]]&lt;br /&gt;
&lt;br /&gt;
=Clocks - Der Herzschlag unseres Mikrocontrollers=&lt;br /&gt;
&lt;br /&gt;
[[Datei:stm32_aufbau.jpg|thumb|Interner Aufbau eines [[STM32F103]]]]&lt;br /&gt;
Unser Mikrocontroller hat viele interne Takte. Diese müssen unbedingt konfiguriert werden. Dazu verwenden wir die RCC (Reset and Clock Control). Dazu gibt es Funktionen in der ST-Library. Welche Takte an welchen Bussen liegen, siehst du im Bild.&lt;br /&gt;
&lt;br /&gt;
Die Controller verfügen über zwei getrennte Datenbusse für die langsameren Teile der Periphierie. Den APB1 und den APB2. Diese sind wiederum über Brücken am Systembus angeschlossen. Das wären in diesem Fall die AHB1 und AHB2. Man muss beachten, dass der APB1 &amp;quot;nur&amp;quot; mit maximal 36MHz getaktet werden darf, der APB2 hingegen mit 72MHz.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig!&#039;&#039;&#039; Alle unsere Peripherie Teile, die wir verwenden möchten, &#039;&#039;&#039;müssen mit einem Takt versorgt werden,&#039;&#039;&#039; bevor man sie verwenden kann. Bei Nichtbeachten führt dies häufig zu langer Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der [[STM32]] wird normalerweise mit einem Quarz von 4-16MHz versorgt. Aus diesem wird dann mittels der internen PLL der eigentliche Takt gebildet (bis 72MHz).&lt;br /&gt;
Jeder benötigte Takt wird vom Haupttakt abgeleitet. Die Controller verfügen auch über interne RC-Oszillatoren (typischerweise ein 8 MHz RC-Oszillator mit einer Genauigkeit von 1 % sowie einem 40 kHz RC-Oszillator). Zumindest der interne 8 MHz-Oszillator ist für die meisten Anwendungen genau genug. Für z.B. USB oder CAN mit Taktraten &amp;gt; 100 kbit/s ist er aber &#039;&#039;&#039;nicht&#039;&#039;&#039; genau genug. Der interne 40 kHz-Oszillator hingegen ist &#039;&#039;&#039;sehr&#039;&#039;&#039; ungenau (zwischen 30 und 60 kHz).&lt;br /&gt;
&lt;br /&gt;
Hardwaretechnisch sollte darauf geachtet werden, dass bei Verwendung eines externen Quarzes dieser eine Frequenz von 8 MHz besitzt. &lt;br /&gt;
Die gesamten Defines in der Library beziehen sich darauf. Ansonsten ist eine Anpassung der PLL Multiplikatoren in der Datei &amp;quot;system_stm32f10x.c&amp;quot; nötig.&lt;br /&gt;
&lt;br /&gt;
==Taktquelle auswählen==&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset wird automatisch &#039;&#039;&#039;immer&#039;&#039;&#039; der interne HSI-Takt genutzt, um einen definierten Zustand zu haben (also der interne 8 MHz RC-Oszillator). Das ist z.B. erforderlich, damit der integrierte Bootloader mit einer bekannten Frequenz versorgt wird (sofern dieser über die Boot-Pins überhaupt gewünscht ist).&lt;br /&gt;
Zum Glück gibt es ein automatisches Sicherheitsfeature, sodass man die aktuelle Taktquelle des Controllers nicht abschalten kann, da der Controller sonst einfach stehen bleiben würde!&lt;br /&gt;
===HSI - Highspeed Internal Oscillator===&lt;br /&gt;
Man kann den internen Oszillator nach dem Reset umkonfigurieren. [Hier fehlt noch etwas]&lt;br /&gt;
&lt;br /&gt;
Zum Ein- und Ausschalten der HSI-Taktquelle verwendet man &#039;&#039;&#039;RCC_HSICmd()&#039;&#039;&#039;. Als Parameter werden entweder &#039;&#039;&#039;ENABLE&#039;&#039;&#039; oder &#039;&#039;&#039;DISABLE&#039;&#039;&#039; erwartet. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_HSICmd(ENABLE); //Aktiviert den internen Highspeed Oszillator.&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Takte Reseten==&lt;br /&gt;
Nach dem Reset befindet sich die gesamte Taktkonfiguration in einem definierten Zustand. Macht man später irgendwelche Änderungen an der Taktkonfiguration kann es sinnvoll sein, vorher alle Takte auf ihre Standardwerte zurückzusetzen. Dies schafft wieder eine definierte zentrale Taktkonfiguration. Man muß sich nicht überlegen, wo man noch was zuvor eingestellt hat. Hat man allerdings schon z.B. irgendwelche Peripheriemodule konfiguriert, muß man natürlich aufpassen, welche Folgen die zentrale Taktänderung hier haben kann!&lt;br /&gt;
Nach &#039;&#039;&#039;RCC_DeInit()&#039;&#039;&#039; sind alle Takte resettet. Übergeben wird nichts!&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_DeInit(); //Setzt alle Takte auf deren Ursprungsszustand zurück.&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HSE - Highspeed External Oscillator (Quarz)===&lt;br /&gt;
Es kann auch eine externe Taktquelle ausgewählt werden. Um dem Controller dies mitzuteilen, gibt es die Funktion &#039;&#039;&#039;RCC_HSEConfig()&#039;&#039;&#039;. Als Parameter erwartet sie einen der folgenden Werte: &#039;&#039;&#039;RCC_HSE_OFF&#039;&#039;&#039;, &#039;&#039;&#039;RCC_HSE_ON&#039;&#039;&#039; oder &#039;&#039;&#039;RCC_HSE_Bypass&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Ersten sind selbsterklärend. Wenn man der Funktion jedoch &#039;&#039;&#039;RCC_HSE_Bypass&#039;&#039;&#039; übergibt, so erwartet der Controller am OSC_IN Pin ein Taktsignal. Dieses darf bis zu 25MHz schnell sein und kann Rechteck, Sinus oder Dreieck Spannung mit einem Duty Cycle von 50% sein.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_HSEConfig(RCC_HSE_ON); //Aktiviert den Externen Highspeed Oszillator (Quarz).&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GPIOS - Wie greife ich auf einzelne Pins zur Ein/Ausgabe zu=&lt;br /&gt;
===Grundlagen===&lt;br /&gt;
&lt;br /&gt;
Unser Mikrocontroller hat ja einige Beinchen, diese können wir als Eingänge sowie als Ausgänge verwenden.&lt;br /&gt;
Dazu müssen wir unserem Käfer jedoch erst sagen welcher Pin was machen soll. Wie dies geht wird hier beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der STM32F10x verfügt zur Manipulation der IO-Pins über ein sehr raffiniertes Feature, das es erlaubt Bits für die IO-Pins zu setzen / löschen ohne vorher deren aktuellen Zustand auslesen zu müssen (üblicherweise Read-Modify-Write). Dadurch ist gewährleistet, dass beim Setzen/Löschen von Bits kein Interrupt dies stören kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each of the general-purpose I/O ports has two 32-bit configuration registers (GPIOx_CRL, GPIOx_CRH), two 32-bit data registers (GPIOx_IDR, GPIOx_ODR), a 32-bit set/reset register (GPIOx_BSRR), a 16-bit reset register (GPIOx_BRR) and a 32-bit locking register (GPIOx_LCKR).&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
&#039;&#039;&#039;Each I/O port bit is freely programmable, however the I/O port registers have to be accessed as 32-bit words (half-word or byte accesses are not allowed). The purpose of the GPIOx_BSRR and GPIOx_BRR registers is to allow atomic read/modify accesses to any of the GPIO registers. This way, there is no risk that an IRQ occurs between the read and the modify access.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die &#039;&#039;&#039;BRR&#039;&#039;&#039; und &#039;&#039;&#039;BSRR&#039;&#039;&#039; register greift man über die entsprechenden GPIO-Port zu.&lt;br /&gt;
&lt;br /&gt;
Hierzu existieren in &amp;lt;c&amp;gt;\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h&amp;lt;/c&amp;gt; folgende Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  __IO uint32_t CRL;&lt;br /&gt;
  __IO uint32_t CRH;&lt;br /&gt;
  __IO uint32_t IDR;&lt;br /&gt;
  __IO uint32_t ODR;&lt;br /&gt;
  __IO uint32_t BSRR;&lt;br /&gt;
  __IO uint32_t BRR;&lt;br /&gt;
  __IO uint32_t LCKR;&lt;br /&gt;
} GPIO_TypeDef;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pointer auf die entsprechenden GPIO-Ports sind hier ebenfalls definiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)&lt;br /&gt;
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)&lt;br /&gt;
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)&lt;br /&gt;
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)&lt;br /&gt;
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)&lt;br /&gt;
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)&lt;br /&gt;
#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Welche GPIO-Ports tatsächlich verfügbar sind ist abhängig vom verwendeten Controller!&lt;br /&gt;
&lt;br /&gt;
In stm32f10x_gpio.h sind darüber hinaus Definitionen für alle Pins vorhanden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!&amp;lt; Pin 0 selected */&lt;br /&gt;
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!&amp;lt; Pin 1 selected */&lt;br /&gt;
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!&amp;lt; Pin 2 selected */&lt;br /&gt;
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!&amp;lt; Pin 3 selected */&lt;br /&gt;
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!&amp;lt; Pin 4 selected */&lt;br /&gt;
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!&amp;lt; Pin 5 selected */&lt;br /&gt;
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!&amp;lt; Pin 6 selected */&lt;br /&gt;
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!&amp;lt; Pin 7 selected */&lt;br /&gt;
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!&amp;lt; Pin 8 selected */&lt;br /&gt;
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!&amp;lt; Pin 9 selected */&lt;br /&gt;
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!&amp;lt; Pin 10 selected */&lt;br /&gt;
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!&amp;lt; Pin 11 selected */&lt;br /&gt;
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!&amp;lt; Pin 12 selected */&lt;br /&gt;
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!&amp;lt; Pin 13 selected */&lt;br /&gt;
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!&amp;lt; Pin 14 selected */&lt;br /&gt;
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!&amp;lt; Pin 15 selected */&lt;br /&gt;
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!&amp;lt; All pins selected */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man also von Hand auf die Bits dieser Register zugreifen, so ist das denkbar einfach:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BSRR = GPIO_Pin_13;   &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
setzt das Bit für Pin 13 im Port C. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BRR = GPIO_Pin_13;   &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BSRR = GPIO_Pin_13 &amp;lt;&amp;lt; 16;   &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
löscht dieses Bit wieder. Mit&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BSRR = (0x00F0 &amp;lt;&amp;lt; 16) | ((data &amp;lt;&amp;lt; 4) &amp;amp; 0x00F0);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
kann man die Pins 4..7 auf einen beliebigen Wert setzen, ohne die übrigen Pins zu beeinflussen. Die oberen 16 Bits des geschriebenen Wertes definieren die betroffenen Pins, die unteren 16 Bits den Wert. In der &#039;&#039;Standard Peripheral Library&#039;&#039; ist keine Funktion enthalten, die diese Fähigkeit des Ports unterstützt.&lt;br /&gt;
&lt;br /&gt;
Die äquivalente Operation über das ODR ist nicht atomar und somit in Verbindung mit Interrupts problematisch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;Standard Peripheral Library&#039;&#039; stellt für dies Zugriffe allerdings auch komfortablere und vor allem sprechendere Funktionen zur verfügen, die weiter unten erklärt werden.&lt;br /&gt;
&lt;br /&gt;
===Initialisierung===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG: Bevor man Pins eines GPIO-Ports benutzen kann, muss man die Clock des entsprechenden Ports mit der Funktion &#039;&#039;RCC_APB2PeriphClockCmd&#039;&#039; aktivieren , da diese nach einem Reset immer ausgeschaltet ist. Dies ist ein sehr beliebter Fehler beim Arbeiten mit Ports. Mehr dazu bei [[STM32F10x Standard Peripherals Library#Clocks - Der Herzschlag unseres Mikrocontroller|Clocks]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bevor man einen Pin benutzen kann, muss dieser Initialisiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Funktion &#039;&#039;&#039;GPIO_Init()&#039;&#039;&#039; ermöglicht es einen oder mehere Pins auf einmal zu konfigurieren. Hierzu muss eine struct ausgefüllt und GPIO_Init übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  u16 GPIO_Pin;&lt;br /&gt;
  GPIOSpeed_TypeDef GPIO_Speed;&lt;br /&gt;
  GPIOMode_TypeDef GPIO_Mode;&lt;br /&gt;
}GPIO_InitTypeDef;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Definieren müssen wird dieses zuvor jedoch auch. Dies geschieht mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_InitTypeDef GPIO_InitStructure;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können wir bequem auf die einzelnen Einträge aus der Struct zugreifen.&lt;br /&gt;
Der nachfolgende Code zeigt eine Beispielkonfiguration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;&lt;br /&gt;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GPIO_Speed&#039;&#039;&#039; definiert die maximale Änderungsrate des Pins. Das ist aber keine harte Grenze, sondern verändert die Charakteristik des Pintreibers. Eine niedrigere Grenzfrequenz reduziert die Flankensteilheit und damit Leitungsreflexionen. &lt;br /&gt;
Mögliche Werte für GPIO_Speed&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039; Wert&#039;&#039;&#039; ||&#039;&#039;&#039; Bedeutung&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Speed_2MHz || 2MHz / 125ns&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Speed_10MHz || 10MHz / 25ns &lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Speed_50MHz || 30-50MHz / 5-12ns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GPIO_Mode&#039;&#039;&#039; konfiguriert den Port oder den Port Pin.&lt;br /&gt;
Mögliche Werte für GPIO_Mode&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039; Wert&#039;&#039;&#039; ||&#039;&#039;&#039; Beschreibung&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_Out_PP || Der Pin wird als Ausgang im Push Pull Modus konfiguriert. Dies bedeutet, der Ausgang kann sowohl positive als auch negative Ströme liefern&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_Out_OD || Der Pin wird als Ausgang im Open Drain Modus konfiguriert.&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_IN_FLOATING || Der Pin wird als Eingang im Floating modus konfiguriert. Dies bedeutet, das der Pin kein Niveau hat. Er &amp;quot;schwebt&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_AIN || Der Pin wird als analoger Eingang konfiguriert&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_IPD || Der Pin wird als Eingang konfiguriert mit internem Pull Down Widerstand&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_IPU || Der Pin wird als Eingang konfiguriert mit internem Pull Up Widerstand&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_AF_OD || Der Pin wird mit Alternativer Funktion (SPI, I2C..) konfiguriert im Open Drain Modus&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_AF_PP || Der Pin wird mit Alternativer Funktion (SPI, I2C..) konfiguriert im Push Pull Modus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GPIO_Pin&#039;&#039;&#039; definiert den Pin welcher konfiguriert werden soll.&lt;br /&gt;
&lt;br /&gt;
Um den zu konfigurierenden Pin anzugeben, genügt es &#039;&#039;&#039;GPIO_Pin_X&#039;&#039;&#039; zu schreiben.&lt;br /&gt;
Wobei &amp;quot;X&amp;quot; durch die entsprechende Pinnummer zu ersetzen ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Es können auch mehrere Pins gleichzeitig konfiguriert werden. &lt;br /&gt;
Dazu wird einfach logische ODER verknüfung verwendet ( | )&lt;br /&gt;
Möchte man den gesamten Port konfigurieren, so genügt es wenn man &#039;&#039;&#039;GPIO_Pin_All&#039;&#039;&#039; angibt.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel mit mehreren Pins&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;&lt;br /&gt;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GPIO_Init()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nachdem wir nun alle relevanten Parameter gesetzt haben, müssen wir den Port nur noch mit &#039;&#039;&#039;GPIO_Init()&#039;&#039;&#039; initialisieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GPIOx&#039;&#039; ist der Pointer auf den den zu initialisierenden Port. Wobei x einfach mit dem entsprechenden Buchstaben zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GPIO_InitStruct&#039;&#039; ist der Pointer auf die soeben von uns ausgefüllte struct. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für GPIOA&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Clock des Ports einschalten&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;&lt;br /&gt;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7&lt;br /&gt;
&lt;br /&gt;
GPIO_Init(GPIOA, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etwas auf den Port ausgeben===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um etwas an einem GPIO auszugeben, gibt es drei Möglichkeiten (Funktionen). &lt;br /&gt;
Entweder man schreibt den gesamten Port oder nur ein einzelnes Bit.&lt;br /&gt;
Die STMs bieten eine Bitbanding-Funktion, die in [[ARM Bitbanding]] genauer erklärt ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die erste Funktion lautet &#039;&#039;&#039;GPIO_SetBits()&#039;&#039;&#039; und &#039;&#039;&#039;GPIO_ResetBits()&#039;&#039;&#039;&lt;br /&gt;
Erster Parameter ist der GPIO Port, der zweite ist der Pin oder eine Kombination daraus. Kombinationen sind wieder logisch zu verknüpfen mit ODER ( | )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_5); //Setzt die Bits 1 und 5 am GPIOA auf high&lt;br /&gt;
&lt;br /&gt;
GPIO_ResetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_9); //Setzt die Bits 2 und 9 am GPIOA auf low&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die zweite Funktion lautet &#039;&#039;&#039;GPIO_WriteBit()&#039;&#039;&#039; Diese Funktion kann sowohl einen oder mehrere Pins setzen als auch löschen. Erster Parameter ist der GPIO Port, der zweite ist der Pin oder eine Kombination daraus, und der dritte sagt aus, ob gesetzt oder gelöscht wird! Kombinationen sind auch hier logisch zu verknüpfen mit ODER ( | ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_5, Bit_SET); //Setzt die Bits 1 und 5 am GPIOA auf high&lt;br /&gt;
&lt;br /&gt;
GPIO_WriteBit(GPIOA, GPIO_Pin_2 | GPIO_Pin_9, Bit_RESET); //Setzt die Bits 2 und 9 am GPIOA auf low&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion 3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die dritte und somit letzte Funktion lautet &#039;&#039;&#039;GPIO_Write()&#039;&#039;&#039;. Diese Funktion beschreibt den gesamten Port! Erster Parameter ist der GPIO Port, der zweite ist der an dem Port auszugebende Wert. &#039;&#039;&#039;Wichtig!&#039;&#039;&#039; Hier wird der ganze Port mit einem 16 bit Wert beschrieben. Viel leserlicher als mit magic numbers im Hex-Format zu arbeiten, sind natürlich auch hier die defines: GPIO_Pin_1 | GPIO_Pin_5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_Write(GPIOA,0x0011); //Setzt die Bits 1 und 5 am GPIOA auf high&lt;br /&gt;
GPIO_Write(GPIOA, GPIO_Pin_1 | GPIO_Pin_5); // Geht natürlich auch und ist verständlicher                &lt;br /&gt;
&lt;br /&gt;
GPIO_ResetBits(GPIOA,0x0102); //Setzt die Bits 2 und 9 am GPIOA auf low&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Pin Sperren===&lt;br /&gt;
&lt;br /&gt;
Der [[STM32]] bietet die Möglichkeit, einen Pin zu sperren. Ist ein Pin gesperrt, so kann dessen Zustand (High / Low) &#039;&#039;&#039;bis zu einem Reset&#039;&#039;&#039; nicht mehr geändert werden! Wie wir es nun gewohnt sind, hat ST dafür eine eigene Funktion geschrieben. Diese lautet &#039;&#039;&#039;GPIO_PinLockConfig()&#039;&#039;&#039;. Erster Parameter ist der Port, der zweite sind die Pins, welche man sperren möchte. Diese kann man wieder mit der ODER Verknüpfung kombinieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_PinLockConfig(GPIOA,GPIO_Pin_1 | GPIO_Pin_5); //Sperrt die Pins bis zu einem Reset&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingänge einlesen===&lt;br /&gt;
&lt;br /&gt;
Um Daten in den [[STM32]] einzulesen, gibt es wieder ein paar ST Funktionen. Diese möchten wir hier vorstellen. Die dafür verwendbaren Funktionen sind: &#039;&#039;&#039;GPIO_ReadInputDataBit()&#039;&#039;&#039; sowie &#039;&#039;&#039;GPIO_ReadInputData()&#039;&#039;&#039;. Erster Parameter ist der Port, der zweite sind die Pins, die man einlesen möchte. Bei &#039;&#039;&#039;GPIO_ReadInputData()&#039;&#039;&#039; wird jedoch nur der Port übergeben, da diese Funktion den &#039;&#039;&#039;gesamten&#039;&#039;&#039; Port zurück liefert! Hier wird der tatsächliche logische Pegel am Pin eingelesen!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t ucStatus = 0;&lt;br /&gt;
&lt;br /&gt;
ucStatus = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5); //Speichert den Zustand von Pin5 am GPIOA in die 8-bit-Variable ucStatus &lt;br /&gt;
                                                    //(uint8_t ist die kleinstmögliche, eigenständige Variable für dieses eine Bit)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint16_t uiPort = 0;&lt;br /&gt;
&lt;br /&gt;
uiPort = GPIO_ReadInputData(GPIOA); //Speichert den Zustand von GPIOA in die 16-bit-Variable uiPort&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ausgänge einlesen===&lt;br /&gt;
&lt;br /&gt;
Man hat ja häufig das Problem, dass man gerne nachsehen möchte, was man denn gerade am Ausgang ausgibt. Dazu kann man den Ausgang wie ein Eingang einlesen. Die dafür verwendbaren Funktionen sind: &#039;&#039;&#039;GPIO_ReadOutputDataBit()&#039;&#039;&#039; sowie &#039;&#039;&#039;GPIO_ReadOutputData()&#039;&#039;&#039;. Erster Parameter ist der Port, der zweite sind die Pins, welche man auslesen möchte. Bei &#039;&#039;&#039;GPIO_ReadOutputData()&#039;&#039;&#039; wird jedoch nur der Port übergeben, da diese Funktion den &#039;&#039;&#039;gesamten&#039;&#039;&#039; Port zurück liefert!Hier wird &#039;&#039;&#039;nicht&#039;&#039;&#039; der tatsächliche logische Pegel am Pin eingelesen, sondern was im Ausgangsregister eingestellt wurde (also eigentlich anliegen sollte)! Diese beiden Werte können sich auf Grund externer Einflüsse aber unterscheiden!!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t ucStatus = 0;&lt;br /&gt;
&lt;br /&gt;
ucStatus = GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5); //Speichert den Zustand von Pin5 am GPIOA in die 8-bit-Variable ucStatus &lt;br /&gt;
                                                     //(uint8_t ist die kleinstmögliche, eigenständige Variable für dieses eine Bit)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint16_t uiPort = 0;&lt;br /&gt;
&lt;br /&gt;
uiPort = GPIO_ReadOutputData(GPIOA); //Speichert den Zustand von GPIOA in die 16-bit-Variable uiPort&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deinitialisieren von Ports===&lt;br /&gt;
&lt;br /&gt;
Es gibt auch die Möglichkeit, den Port zu deinitialisieren. Dann wird er mit seinen Standardwerten konfiguriert. Die Funktion dazu lautet &#039;&#039;&#039;GPIO_DeInit()&#039;&#039;&#039;. Erster und einziger Parameter ist der Port, den man deinitialisieren möchte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_DeInit(GPIOA); //Setzt den GPIOA auf seine Standardwerte zurück&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weblinks, Foren, Communities =&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/175840 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.libopencm3.org libopencm3] -- Eine Open-Source Alternative (GPL, Version 3 oder höher) zur ST Library&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F10x_Standard_Peripherals_Library&amp;diff=73664</id>
		<title>STM32F10x Standard Peripherals Library</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F10x_Standard_Peripherals_Library&amp;diff=73664"/>
		<updated>2013-03-05T09:23:57Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Link war tot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Allgemeines=&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;STM32F10x Standard Peripherals Library&#039;&#039;  ist eine umfangreiche komfortable C-Bibliothek, die den Zugriff auf alle Funktionen der &#039;&#039;&#039;STM32F10x&#039;&#039;&#039; Familie erlaubt. Dabei ist für die verschiedenen Peripheriekomponenten jeweils ein eigenes Modul verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die Bibliothek kann hier bei ST kostenlos heruntergeladen werden.&lt;br /&gt;
Dazu auf der [http://www.st.com/internet/com/home/home.jsp ST-Webseite]:&lt;br /&gt;
* Unten unter Products &amp;quot;Micros and Memories&amp;quot; wählen,&lt;br /&gt;
* Unten erscheinen 4 Kästchen. Unter Products &amp;quot;Microcontrollers&amp;quot; auswählen,&lt;br /&gt;
* Links in dem grauen Kasten die passende Familie selektieren. Also &amp;quot;STM32 F1 Mainstream&amp;quot;,&lt;br /&gt;
* Danach in den blauen Kasten auf &amp;quot;Resources&amp;quot; klicken,&lt;br /&gt;
* Nach Auswahl von &amp;quot;Firmware öffnet sich ein Fenster in den man die jeweils aktuellste Version finden kann.&lt;br /&gt;
&lt;br /&gt;
Alternativ ist hier ein [http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware/stsw-stm32054.zip Direktlink].&lt;br /&gt;
In dem Archiv ist die ‎STM32F10x Standard Peripherals Library. Zu jeder Peripherie gibt es diverse Beispiele und eine Beschreibung als CHM Datei &amp;quot;stm32f10x_stdperiph_lib_um.chm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bevor Ihr lange sucht, die USB-Schnittstelle ist nicht in der &#039;&#039;STM32F10x Standard Peripherals Library&#039;&#039; enthalten. Die hierfür verfügbare Firmware sowie Beispielcode befindet sich in der [[STM32_USB-FS-Device_Lib]]&lt;br /&gt;
&lt;br /&gt;
===Hinweise===&lt;br /&gt;
Die notwendigen Informationen, um die Funktionen der Standard Peripherals Library zu verstehen, muss man sich leider aus verschiedenen Quellen zusammensuchen. Daher soll mit diesem Artikel versucht werden, deren Benutzung für die verschiedenen Peripheriekomponenten zu erläutern.&lt;br /&gt;
&lt;br /&gt;
Leider beziehen sich die von ST gelieferten Beispiele sehr auf die von ST verfügbaren Evalboards und der Code wimmelt von #defines, so dass man sich erst mühsam durchhangeln muss um zu verstehen, was da eigentlich passiert. Dies geht zwar durch die gute Verlinkung in der Hilfsdatei ganz gut, erschwert aber den Einstieg unnötig. &lt;br /&gt;
&lt;br /&gt;
In diesem Artikel soll daher die Anwendung &#039;&#039;bare bones&#039;&#039; ähnlich den Beispielen in den AVR Datenblättern erfolgen.&lt;br /&gt;
Wo nötig, werden die zum Verständnis relevanten Ausschnitte des Reference Manual [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008] in den Artikel kopiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(Bevor hier die Copyright Discussion entbrennt: Das Landgericht München hat 1996 festgestellt, dass die Beschreibung von elektronischen Schaltungen nicht dem Urheberrecht unterliegen. Außerdem sollte ST sehr daran gelegen sein mehr Entwickler für Ihre µC zu begeistern.)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Dokumentationen ===&lt;br /&gt;
&lt;br /&gt;
Um mit der Library zu arbeiten sind folgende Dokumentationen empfehlenswert:&lt;br /&gt;
&lt;br /&gt;
* RM0008 Reference Manual zum STM32Fxxxx Controller&lt;br /&gt;
    Beschreibung und Registerdoku der Peripherie (GPIO, Timer ...)&lt;br /&gt;
* PM0056 STM32F10xxx Cortex-M3 programming manual&lt;br /&gt;
    Cortex-M3 eigene Peripherie (wichtig zb. NVIC)&lt;br /&gt;
* Datasheet des verwendeten µC Types (zb. STM32F103xC/D/E)&lt;br /&gt;
    Pinout des µC und alternative Verwendbarkeit der PINs&lt;br /&gt;
&lt;br /&gt;
Download from [[http://www.st.com/internet/mcu/class/1734.jsp Documents and files for STM32F family]]&lt;br /&gt;
&lt;br /&gt;
=== Die ST Standard Peripheral Lib in CrossWorks ===&lt;br /&gt;
Aufgrund mehrfacher Anfragen, hier ein Archiv, das meine Arbeitsumgebung [[Bild:CrossWorks_StandardLib_Setup.zip]] mit zwei Crossworks Projekten (ARM_LED_TEST und ARM_USB_Test) enthält. Einfach alles in ein Verzeichnis entpacken und schon sollte es Laufen.&lt;br /&gt;
&lt;br /&gt;
=== Einführungsbeispiel Blinking LED ===&lt;br /&gt;
&lt;br /&gt;
Einführungsbeispiel [[STM32 LEDBlinken AtollicTrueStudio]]&lt;br /&gt;
&lt;br /&gt;
=== Die Idee hinter der STM32 Standard Peripherals Library ===&lt;br /&gt;
&lt;br /&gt;
So stellt sich ARM und ST-Microelectronics die Library vor.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Stm32_std_peripherial_library_idee.JPG]]&lt;br /&gt;
&lt;br /&gt;
=Clocks - Der Herzschlag unseres Mikrocontrollers=&lt;br /&gt;
&lt;br /&gt;
[[Datei:stm32_aufbau.jpg|thumb|Interner Aufbau eines [[STM32F103]]]]&lt;br /&gt;
Unser Mikrocontroller hat viele interne Takte. Diese müssen unbedingt konfiguriert werden. Dazu verwenden wir die RCC (Reset and Clock Control). Dazu gibt es Funktionen in der ST-Library. Welche Takte an welchen Bussen liegen, siehst du im Bild.&lt;br /&gt;
&lt;br /&gt;
Die Controller verfügen über zwei getrennte Datenbusse für die langsameren Teile der Periphierie. Den APB1 und den APB2. Diese sind wiederum über Brücken am Systembus angeschlossen. Das wären in diesem Fall die AHB1 und AHB2. Man muss beachten, dass der APB1 &amp;quot;nur&amp;quot; mit maximal 36MHz getaktet werden darf, der APB2 hingegen mit 72MHz.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig!&#039;&#039;&#039; Alle unsere Peripherie Teile, die wir verwenden möchten, &#039;&#039;&#039;müssen mit einem Takt versorgt werden,&#039;&#039;&#039; bevor man sie verwenden kann. Bei Nichtbeachten führt dies häufig zu langer Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der [[STM32]] wird normalerweise mit einem Quarz von 4-16MHz versorgt. Aus diesem wird dann mittels der internen PLL der eigentliche Takt gebildet (bis 72MHz).&lt;br /&gt;
Jeder benötigte Takt wird vom Haupttakt abgeleitet. Die Controller verfügen auch über interne RC-Oszillatoren (typischerweise ein 8 MHz RC-Oszillator mit einer Genauigkeit von 1 % sowie einem 40 kHz RC-Oszillator). Zumindest der interne 8 MHz-Oszillator ist für die meisten Anwendungen genau genug. Für z.B. USB oder CAN mit Taktraten &amp;gt; 100 kbit/s ist er aber &#039;&#039;&#039;nicht&#039;&#039;&#039; genau genug. Der interne 40 kHz-Oszillator hingegen ist &#039;&#039;&#039;sehr&#039;&#039;&#039; ungenau (zwischen 30 und 60 kHz).&lt;br /&gt;
&lt;br /&gt;
Hardwaretechnisch sollte darauf geachtet werden, dass bei Verwendung eines externen Quarzes dieser eine Frequenz von 8 MHz besitzt. &lt;br /&gt;
Die gesamten Defines in der Library beziehen sich darauf. Ansonsten ist eine Anpassung der PLL Multiplikatoren in der Datei &amp;quot;system_stm32f10x.c&amp;quot; nötig.&lt;br /&gt;
&lt;br /&gt;
==Taktquelle auswählen==&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset wird automatisch &#039;&#039;&#039;immer&#039;&#039;&#039; der interne HSI-Takt genutzt, um einen definierten Zustand zu haben (also der interne 8 MHz RC-Oszillator). Das ist z.B. erforderlich, damit der integrierte Bootloader mit einer bekannten Frequenz versorgt wird (sofern dieser über die Boot-Pins überhaupt gewünscht ist).&lt;br /&gt;
Zum Glück gibt es ein automatisches Sicherheitsfeature, sodass man die aktuelle Taktquelle des Controllers nicht abschalten kann, da der Controller sonst einfach stehen bleiben würde!&lt;br /&gt;
===HSI - Highspeed Internal Oscillator===&lt;br /&gt;
Man kann den internen Oszillator nach dem Reset umkonfigurieren. [Hier fehlt noch etwas]&lt;br /&gt;
&lt;br /&gt;
Zum Ein- und Ausschalten der HSI-Taktquelle verwendet man &#039;&#039;&#039;RCC_HSICmd()&#039;&#039;&#039;. Als Parameter werden entweder &#039;&#039;&#039;ENABLE&#039;&#039;&#039; oder &#039;&#039;&#039;DISABLE&#039;&#039;&#039; erwartet. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_HSICmd(ENABLE); //Aktiviert den internen Highspeed Oszillator.&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Takte Reseten==&lt;br /&gt;
Nach dem Reset befindet sich die gesamte Taktkonfiguration in einem definierten Zustand. Macht man später irgendwelche Änderungen an der Taktkonfiguration kann es sinnvoll sein, vorher alle Takte auf ihre Standardwerte zurückzusetzen. Dies schafft wieder eine definierte zentrale Taktkonfiguration. Man muß sich nicht überlegen, wo man noch was zuvor eingestellt hat. Hat man allerdings schon z.B. irgendwelche Peripheriemodule konfiguriert, muß man natürlich aufpassen, welche Folgen die zentrale Taktänderung hier haben kann!&lt;br /&gt;
Nach &#039;&#039;&#039;RCC_DeInit()&#039;&#039;&#039; sind alle Takte resettet. Übergeben wird nichts!&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_DeInit(); //Setzt alle Takte auf deren Ursprungsszustand zurück.&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HSE - Highspeed External Oscillator (Quarz)===&lt;br /&gt;
Es kann auch eine externe Taktquelle ausgewählt werden. Um dem Controller dies mitzuteilen, gibt es die Funktion &#039;&#039;&#039;RCC_HSEConfig()&#039;&#039;&#039;. Als Parameter erwartet sie einen der folgenden Werte: &#039;&#039;&#039;RCC_HSE_OFF&#039;&#039;&#039;, &#039;&#039;&#039;RCC_HSE_ON&#039;&#039;&#039; oder &#039;&#039;&#039;RCC_HSE_Bypass&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Ersten sind selbsterklärend. Wenn man der Funktion jedoch &#039;&#039;&#039;RCC_HSE_Bypass&#039;&#039;&#039; übergibt, so erwartet der Controller am OSC_IN Pin ein Taktsignal. Dieses darf bis zu 25MHz schnell sein und kann Rechteck, Sinus oder Dreieck Spannung mit einem Duty Cycle von 50% sein.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_HSEConfig(RCC_HSE_ON); //Aktiviert den Externen Highspeed Oszillator (Quarz).&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GPIOS - Wie greife ich auf einzelne Pins zur Ein/Ausgabe zu=&lt;br /&gt;
===Grundlagen===&lt;br /&gt;
&lt;br /&gt;
Unser Mikrocontroller hat ja einige Beinchen, diese können wir als Eingänge sowie als Ausgänge verwenden.&lt;br /&gt;
Dazu müssen wir unserem Käfer jedoch erst sagen welcher Pin was machen soll. Wie dies geht wird hier beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der STM32F10x verfügt zur Manipulation der IO-Pins über ein sehr raffiniertes Feature, das es erlaubt Bits für die IO-Pins zu setzen / löschen ohne vorher deren aktuellen Zustand auslesen zu müssen (üblicherweise Read-Modify-Write). Dadurch ist gewährleistet, dass beim Setzen/Löschen von Bits kein Interrupt dies stören kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each of the general-purpose I/O ports has two 32-bit configuration registers (GPIOx_CRL, GPIOx_CRH), two 32-bit data registers (GPIOx_IDR, GPIOx_ODR), a 32-bit set/reset register (GPIOx_BSRR), a 16-bit reset register (GPIOx_BRR) and a 32-bit locking register (GPIOx_LCKR).&#039;&#039;&#039;&lt;br /&gt;
  &lt;br /&gt;
&#039;&#039;&#039;Each I/O port bit is freely programmable, however the I/O port registers have to be accessed as 32-bit words (half-word or byte accesses are not allowed). The purpose of the GPIOx_BSRR and GPIOx_BRR registers is to allow atomic read/modify accesses to any of the GPIO registers. This way, there is no risk that an IRQ occurs between the read and the modify access.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die &#039;&#039;&#039;BRR&#039;&#039;&#039; und &#039;&#039;&#039;BSRR&#039;&#039;&#039; register greift man über die entsprechenden GPIO-Port zu.&lt;br /&gt;
&lt;br /&gt;
Hierzu existieren in &amp;lt;c&amp;gt;\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h&amp;lt;/c&amp;gt; folgende Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  __IO uint32_t CRL;&lt;br /&gt;
  __IO uint32_t CRH;&lt;br /&gt;
  __IO uint32_t IDR;&lt;br /&gt;
  __IO uint32_t ODR;&lt;br /&gt;
  __IO uint32_t BSRR;&lt;br /&gt;
  __IO uint32_t BRR;&lt;br /&gt;
  __IO uint32_t LCKR;&lt;br /&gt;
} GPIO_TypeDef;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pointer auf die entsprechenden GPIO-Ports sind hier ebenfalls definiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)&lt;br /&gt;
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)&lt;br /&gt;
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)&lt;br /&gt;
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)&lt;br /&gt;
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)&lt;br /&gt;
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)&lt;br /&gt;
#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Welche GPIO-Ports tatsächlich verfügbar sind ist abhängig vom verwendeten Controller!&lt;br /&gt;
&lt;br /&gt;
In stm32f10x_gpio.h sind darüber hinaus Definitionen für alle Pins vorhanden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!&amp;lt; Pin 0 selected */&lt;br /&gt;
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!&amp;lt; Pin 1 selected */&lt;br /&gt;
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!&amp;lt; Pin 2 selected */&lt;br /&gt;
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!&amp;lt; Pin 3 selected */&lt;br /&gt;
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!&amp;lt; Pin 4 selected */&lt;br /&gt;
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!&amp;lt; Pin 5 selected */&lt;br /&gt;
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!&amp;lt; Pin 6 selected */&lt;br /&gt;
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!&amp;lt; Pin 7 selected */&lt;br /&gt;
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!&amp;lt; Pin 8 selected */&lt;br /&gt;
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!&amp;lt; Pin 9 selected */&lt;br /&gt;
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!&amp;lt; Pin 10 selected */&lt;br /&gt;
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!&amp;lt; Pin 11 selected */&lt;br /&gt;
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!&amp;lt; Pin 12 selected */&lt;br /&gt;
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!&amp;lt; Pin 13 selected */&lt;br /&gt;
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!&amp;lt; Pin 14 selected */&lt;br /&gt;
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!&amp;lt; Pin 15 selected */&lt;br /&gt;
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!&amp;lt; All pins selected */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man also von Hand auf die Bits dieser Register zugreifen, so ist das denkbar einfach:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BSRR = GPIO_Pin_13;   &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
setzt das Bit für Pin 13 im Port C. &lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BRR = GPIO_Pin_13;   &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BSRR = GPIO_Pin_13 &amp;lt;&amp;lt; 16;   &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
löscht dieses Bit wieder. Mit&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 GPIOC-&amp;gt;BSRR = (0x00F0 &amp;lt;&amp;lt; 16) | ((data &amp;lt;&amp;lt; 4) &amp;amp; 0x00F0);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
kann man die Pins 4..7 auf einen beliebigen Wert setzen, ohne die übrigen Pins zu beeinflussen. Die oberen 16 Bits des geschriebenen Wertes definieren die betroffenen Pins, die unteren 16 Bits den Wert. In der &#039;&#039;Standard Peripheral Library&#039;&#039; ist keine Funktion enthalten, die diese Fähigkeit des Ports unterstützt.&lt;br /&gt;
&lt;br /&gt;
Die äquivalente Operation über das ODR ist nicht atomar und somit in Verbindung mit Interrupts problematisch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;Standard Peripheral Library&#039;&#039; stellt für dies Zugriffe allerdings auch komfortablere und vor allem sprechendere Funktionen zur verfügen, die weiter unten erklärt werden.&lt;br /&gt;
&lt;br /&gt;
===Initialisierung===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WICHTIG: Bevor man Pins eines GPIO-Ports benutzen kann, muss man die Clock des entsprechenden Ports mit der Funktion &#039;&#039;RCC_APB2PeriphClockCmd&#039;&#039; aktivieren , da diese nach einem Reset immer ausgeschaltet ist. Dies ist ein sehr beliebter Fehler beim Arbeiten mit Ports. Mehr dazu bei [[STM32F10x Standard Peripherals Library#Clocks - Der Herzschlag unseres Mikrocontroller|Clocks]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bevor man einen Pin benutzen kann, muss dieser Initialisiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Funktion &#039;&#039;&#039;GPIO_Init()&#039;&#039;&#039; ermöglicht es einen oder mehere Pins auf einmal zu konfigurieren. Hierzu muss eine struct ausgefüllt und GPIO_Init übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  u16 GPIO_Pin;&lt;br /&gt;
  GPIOSpeed_TypeDef GPIO_Speed;&lt;br /&gt;
  GPIOMode_TypeDef GPIO_Mode;&lt;br /&gt;
}GPIO_InitTypeDef;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Definieren müssen wird dieses zuvor jedoch auch. Dies geschieht mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_InitTypeDef GPIO_InitStructure;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können wir bequem auf die einzelnen Einträge aus der Struct zugreifen.&lt;br /&gt;
Der nachfolgende Code zeigt eine Beispielkonfiguration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;&lt;br /&gt;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GPIO_Speed&#039;&#039;&#039; definiert die maximale Änderungsrate des Pins. Das ist aber keine harte Grenze, sondern verändert die Charakteristik des Pintreibers. Eine niedrigere Grenzfrequenz reduziert die Flankensteilheit und damit Leitungsreflexionen. &lt;br /&gt;
Mögliche Werte für GPIO_Speed&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039; Wert&#039;&#039;&#039; ||&#039;&#039;&#039; Bedeutung&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Speed_2MHz || 2MHz / 125ns&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Speed_10MHz || 10MHz / 25ns &lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Speed_50MHz || 30-50MHz / 5-12ns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GPIO_Mode&#039;&#039;&#039; konfiguriert den Port oder den Port Pin.&lt;br /&gt;
Mögliche Werte für GPIO_Mode&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039; Wert&#039;&#039;&#039; ||&#039;&#039;&#039; Beschreibung&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_Out_PP || Der Pin wird als Ausgang im Push Pull Modus konfiguriert. Dies bedeutet, der Ausgang kann sowohl positive als auch negative Ströme liefern&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_Out_OD || Der Pin wird als Ausgang im Open Drain Modus konfiguriert.&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_IN_FLOATING || Der Pin wird als Eingang im Floating modus konfiguriert. Dies bedeutet, das der Pin kein Niveau hat. Er &amp;quot;schwebt&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_AIN || Der Pin wird als analoger Eingang konfiguriert&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_IPD || Der Pin wird als Eingang konfiguriert mit internem Pull Down Widerstand&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_IPU || Der Pin wird als Eingang konfiguriert mit internem Pull Up Widerstand&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_AF_OD || Der Pin wird mit Alternativer Funktion (SPI, I2C..) konfiguriert im Open Drain Modus&lt;br /&gt;
|-&lt;br /&gt;
| GPIO_Mode_AF_PP || Der Pin wird mit Alternativer Funktion (SPI, I2C..) konfiguriert im Push Pull Modus&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GPIO_Pin&#039;&#039;&#039; definiert den Pin welcher konfiguriert werden soll.&lt;br /&gt;
&lt;br /&gt;
Um den zu konfigurierenden Pin anzugeben, genügt es &#039;&#039;&#039;GPIO_Pin_X&#039;&#039;&#039; zu schreiben.&lt;br /&gt;
Wobei &amp;quot;X&amp;quot; durch die entsprechende Pinnummer zu ersetzen ist.&lt;br /&gt;
&amp;lt;br&amp;gt;Es können auch mehrere Pins gleichzeitig konfiguriert werden. &lt;br /&gt;
Dazu wird einfach logische ODER verknüfung verwendet ( | )&lt;br /&gt;
Möchte man den gesamten Port konfigurieren, so genügt es wenn man &#039;&#039;&#039;GPIO_Pin_All&#039;&#039;&#039; angibt.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel mit mehreren Pins&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;&lt;br /&gt;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GPIO_Init()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nachdem wir nun alle relevanten Parameter gesetzt haben, müssen wir den Port nur noch mit &#039;&#039;&#039;GPIO_Init()&#039;&#039;&#039; initialisieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GPIOx&#039;&#039; ist der Pointer auf den den zu initialisierenden Port. Wobei x einfach mit dem entsprechenden Buchstaben zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;GPIO_InitStruct&#039;&#039; ist der Pointer auf die soeben von uns ausgefüllte struct. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für GPIOA&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Clock des Ports einschalten&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;&lt;br /&gt;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;&lt;br /&gt;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7&lt;br /&gt;
&lt;br /&gt;
GPIO_Init(GPIOA, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Etwas auf den Port ausgeben===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um etwas an einem GPIO auszugeben, gibt es drei Möglichkeiten (Funktionen). &lt;br /&gt;
Entweder man schreibt den gesamten Port oder nur ein einzelnes Bit.&lt;br /&gt;
Die STMs bieten eine Bitbanding-Funktion, die in [[ARM Bitbanding]] genauer erklärt ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die erste Funktion lautet &#039;&#039;&#039;GPIO_SetBits()&#039;&#039;&#039; und &#039;&#039;&#039;GPIO_ResetBits()&#039;&#039;&#039;&lt;br /&gt;
Erster Parameter ist der GPIO Port, der zweite ist der Pin oder eine Kombination daraus. Kombinationen sind wieder logisch zu verknüpfen mit ODER ( | )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_5); //Setzt die Bits 1 und 5 am GPIOA auf high&lt;br /&gt;
&lt;br /&gt;
GPIO_ResetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_9); //Setzt die Bits 2 und 9 am GPIOA auf low&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die zweite Funktion lautet &#039;&#039;&#039;GPIO_WriteBit()&#039;&#039;&#039; Diese Funktion kann sowohl einen oder mehrere Pins setzen als auch löschen. Erster Parameter ist der GPIO Port, der zweite ist der Pin oder eine Kombination daraus, und der dritte sagt aus, ob gesetzt oder gelöscht wird! Kombinationen sind auch hier logisch zu verknüpfen mit ODER ( | ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_5, Bit_SET); //Setzt die Bits 1 und 5 am GPIOA auf high&lt;br /&gt;
&lt;br /&gt;
GPIO_WriteBit(GPIOA, GPIO_Pin_2 | GPIO_Pin_9, Bit_RESET); //Setzt die Bits 2 und 9 am GPIOA auf low&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktion 3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die dritte und somit letzte Funktion lautet &#039;&#039;&#039;GPIO_Write()&#039;&#039;&#039;. Diese Funktion beschreibt den gesamten Port! Erster Parameter ist der GPIO Port, der zweite ist der an dem Port auszugebende Wert. &#039;&#039;&#039;Wichtig!&#039;&#039;&#039; Hier wird der ganze Port mit einem 16 bit Wert beschrieben. Viel leserlicher als mit magic numbers im Hex-Format zu arbeiten, sind natürlich auch hier die defines: GPIO_Pin_1 | GPIO_Pin_5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_Write(GPIOA,0x0011); //Setzt die Bits 1 und 5 am GPIOA auf high&lt;br /&gt;
GPIO_Write(GPIOA, GPIO_Pin_1 | GPIO_Pin_5); // Geht natürlich auch und ist verständlicher                &lt;br /&gt;
&lt;br /&gt;
GPIO_ResetBits(GPIOA,0x0102); //Setzt die Bits 2 und 9 am GPIOA auf low&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Pin Sperren===&lt;br /&gt;
&lt;br /&gt;
Der [[STM32]] bietet die Möglichkeit, einen Pin zu sperren. Ist ein Pin gesperrt, so kann dessen Zustand (High / Low) &#039;&#039;&#039;bis zu einem Reset&#039;&#039;&#039; nicht mehr geändert werden! Wie wir es nun gewohnt sind, hat ST dafür eine eigene Funktion geschrieben. Diese lautet &#039;&#039;&#039;GPIO_PinLockConfig()&#039;&#039;&#039;. Erster Parameter ist der Port, der zweite sind die Pins, welche man sperren möchte. Diese kann man wieder mit der ODER Verknüpfung kombinieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_PinLockConfig(GPIOA,GPIO_Pin_1 | GPIO_Pin_5); //Sperrt die Pins bis zu einem Reset&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eingänge einlesen===&lt;br /&gt;
&lt;br /&gt;
Um Daten in den [[STM32]] einzulesen, gibt es wieder ein paar ST Funktionen. Diese möchten wir hier vorstellen. Die dafür verwendbaren Funktionen sind: &#039;&#039;&#039;GPIO_ReadInputDataBit()&#039;&#039;&#039; sowie &#039;&#039;&#039;GPIO_ReadInputData()&#039;&#039;&#039;. Erster Parameter ist der Port, der zweite sind die Pins, die man einlesen möchte. Bei &#039;&#039;&#039;GPIO_ReadInputData()&#039;&#039;&#039; wird jedoch nur der Port übergeben, da diese Funktion den &#039;&#039;&#039;gesamten&#039;&#039;&#039; Port zurück liefert! Hier wird der tatsächliche logische Pegel am Pin eingelesen!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t ucStatus = 0;&lt;br /&gt;
&lt;br /&gt;
ucStatus = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5); //Speichert den Zustand von Pin5 am GPIOA in die 8-bit-Variable ucStatus &lt;br /&gt;
                                                    //(uint8_t ist die kleinstmögliche, eigenständige Variable für dieses eine Bit)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint16_t uiPort = 0;&lt;br /&gt;
&lt;br /&gt;
uiPort = GPIO_ReadInputData(GPIOA); //Speichert den Zustand von GPIOA in die 16-bit-Variable uiPort&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ausgänge einlesen===&lt;br /&gt;
&lt;br /&gt;
Man hat ja häufig das Problem, dass man gerne nachsehen möchte, was man denn gerade am Ausgang ausgibt. Dazu kann man den Ausgang wie ein Eingang einlesen. Die dafür verwendbaren Funktionen sind: &#039;&#039;&#039;GPIO_ReadOutputDataBit()&#039;&#039;&#039; sowie &#039;&#039;&#039;GPIO_ReadOutputData()&#039;&#039;&#039;. Erster Parameter ist der Port, der zweite sind die Pins, welche man auslesen möchte. Bei &#039;&#039;&#039;GPIO_ReadOutputData()&#039;&#039;&#039; wird jedoch nur der Port übergeben, da diese Funktion den &#039;&#039;&#039;gesamten&#039;&#039;&#039; Port zurück liefert!Hier wird &#039;&#039;&#039;nicht&#039;&#039;&#039; der tatsächliche logische Pegel am Pin eingelesen, sondern was im Ausgangsregister eingestellt wurde (also eigentlich anliegen sollte)! Diese beiden Werte können sich auf Grund externer Einflüsse aber unterscheiden!!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint8_t ucStatus = 0;&lt;br /&gt;
&lt;br /&gt;
ucStatus = GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5); //Speichert den Zustand von Pin5 am GPIOA in die 8-bit-Variable ucStatus &lt;br /&gt;
                                                     //(uint8_t ist die kleinstmögliche, eigenständige Variable für dieses eine Bit)&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
uint16_t uiPort = 0;&lt;br /&gt;
&lt;br /&gt;
uiPort = GPIO_ReadOutputData(GPIOA); //Speichert den Zustand von GPIOA in die 16-bit-Variable uiPort&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deinitialisieren von Ports===&lt;br /&gt;
&lt;br /&gt;
Es gibt auch die Möglichkeit, den Port zu deinitialisieren. Dann wird er mit seinen Standardwerten konfiguriert. Die Funktion dazu lautet &#039;&#039;&#039;GPIO_DeInit()&#039;&#039;&#039;. Erster und einziger Parameter ist der Port, den man deinitialisieren möchte.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
GPIO_DeInit(GPIOA); //Setzt den GPIOA auf seine Standardwerte zurück&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weblinks, Foren, Communities =&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/175840 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.libopencm3.org libopencm3] -- Eine Open-Source Alternative (GPL, Version 3 oder höher) zur ST Library&lt;br /&gt;
* Artikel [[STM32]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=72382</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=72382"/>
		<updated>2013-02-15T19:40:57Z</updated>

		<summary type="html">&lt;p&gt;Mixer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist ein Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [http://www.arm.com/products/processors/cortex-m/index.php ARM Cortex-M0/M3/M4] CPU. Diese Architektur ist speziell für den Einsatz in Microcontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es sieben STM32-Familien:&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1588.jsp STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** µC zum Einstieg&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1169.jsp STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line &lt;br /&gt;
* [http://www.st.com/internet/mcu/product/250173.jsp STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Wie die STM32F1 Serie, jedoch 120MHz, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1605.jsp STM32F3]&lt;br /&gt;
** Cortex M4&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/internet/mcu/subclass/1521.jsp STM32F4]&lt;br /&gt;
** Cortex M4&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
* [http://www.st.com/mcu/inchtml-pages-stm32l.html STM32L]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
* [http://www.st.com/mcu/inchtml-pages-stm32w.html STM32W]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/internet/mcu/class/1734.jsp Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0 / Cortex-M3 / Cortex-M4 Kern&lt;br /&gt;
* 16KB ... 1MB  [[Flash-ROM]]&lt;br /&gt;
*  4KB ... 192KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 4KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 36 ... 176 Pins als QFN, LQFP und BGA&lt;br /&gt;
* Derzeit sind über &#039;&#039;&#039;250&#039;&#039;&#039; STM32 Derivate/Varianten verfügbar&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168 MHz beim STM32F4xx, wobei eine spezielle prefetch-hardware bis 120/168 MHz eine Geschwindigkeit erzielen soll, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet.&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für 8x40 Punkte (nicht beim STM32F2xx)&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 140 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]]&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (6 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]]&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 2x [[CAN]]&lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* RNG - Random Number Generator (STM32F2/4xx)&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr . . .&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation: ==&lt;br /&gt;
&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/mcu/devicedocs-STM32F103RC-110.html STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00191185.pdf  Datasheet STM32F103xC/D/E]&lt;br /&gt;
* [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf  Reference Manual (RM0008)]&lt;br /&gt;
* [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00228163.pdf  Cortex-M3 Programming Manual]&lt;br /&gt;
* [http://www.st.com/stonline/products/literature/pm/13259.pdf Flash Programming Reference]&lt;br /&gt;
&lt;br /&gt;
Im Datasheet sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben. In der Referenz ist der gesamte Controller mit Peripheriemodulen im Detail beschrieben, gültig für eine STM32-Familie. Details zum Prozessorkern selbst und den nicht STM32-spezifischen mit dem Cortex-M3 Core assoziierten Modulen wie dem Interrupt-Controller und dem Systick-Timer findet man jedoch nicht dort, sondern im Cortex-M3 Manual. Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich die Flash Programming Reference für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates. Hinzu kommen optionale Dokumente von ARM, die den [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337-/ Cortex-M3 Kern] / [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439c/index.html Cortex-M4 Kern] beschreiben. Hier gibt es den Opcode wenn man ihn in [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0403-/ Assembler] programmieren möchte. Zusätzlich sollten auch die [http://www.st.com/stonline/products/literature/es/14732.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00164185.pdf STM32F10xxx hardware development: getting started]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== ‎STM32F10x Standard Peripherals Library ==&lt;br /&gt;
&lt;br /&gt;
ST bietet eine umfangreiche Firmwarebibliothek, eine einzige Bibliothek für alle STM32 Derivate. Das ist der große Vorteil von ST (gibt es beispielsweise auf den Cortex-M3 Controllern von TI auch, ist teilweise in einem separaten ROM untergebracht). Einmal programmieren und in allen STM32 verwendbar. Alle Funktionen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherieregister kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.A. Referenz und diverse Appnotes vermitteln. Diese FW-Lib (Download von ST) ist ein MUSS für jeden, denn darin sind auch jede Menge Beispiele für alle Peripheriemodule. &lt;br /&gt;
&lt;br /&gt;
Details siehe: [[‎STM32F10x Standard Peripherals Library]].&lt;br /&gt;
&lt;br /&gt;
Mit [http://www.libopencm3.org/wiki/Main_Page libopencm3] ist derzeit auch eine Open-Source Alternative (GPL, Version 3 oder höher) zur ST Library in Entwicklung, die zukünftig auch Cortex-M3 Controller von anderen Herstellern unterstützen soll.&lt;br /&gt;
&lt;br /&gt;
== CMSIS ==&lt;br /&gt;
&lt;br /&gt;
Parallel zur Firmware-Library (FW-Lib) gibt es für die &amp;quot;Selbermacher&amp;quot; die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard), die grundsätzlich nur den herstellerübergreifenden ARM-Core abdeckt. Hierzu gehört bei den Cortex-M4-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der FW-Lib enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte FW-Lib (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Austattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-Polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Bootmodi ==&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen . Siehe Application Note [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00167594.pdf AN2606].&lt;br /&gt;
&lt;br /&gt;
=== Boot from FLASH ===&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boot from SRAM === &lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 1000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
=== Boot from SYSMEM (RS232, CAN und USB) ===&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (nur in bestimmten MCUs mit entsprechender Bootloader-Version und PIN-Anzahl, z.B. STM32F105/107)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [http://www.st.com/mcu/files/mcu/1221142709.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20.&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 168MHz) (Aber NXP hat schon 150MHz angekündigt)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden.&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* bessere Peripherie&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* Boot-Pins: Boot0 -&amp;gt; GND | Boot1 -&amp;gt; Egal ---&amp;gt; Mit der Konfiguration wird das Programm aus dem Flash ausgeführt.&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Als Programmieroberfläche kann eine kostenlose Struktur verwendet werden. Es ist für den Einsteiger schwierig herauszufinden welche Open-Source Programme man braucht damit es funktioniert, daher hier eine Zusammenstellung:&lt;br /&gt;
&lt;br /&gt;
* [http://www.eclipse.org Eclipse]&lt;br /&gt;
* [http://www.yagarto.de Yagarto Tools] oder [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] oder [https://launchpad.net/gcc-arm-embedded Launchpad]&lt;br /&gt;
* Programmieradapter OOCD, Turtelizer2 oder andere JTAG Programmieradapter&lt;br /&gt;
* Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit [http://www.firefly-power.de/ARM/debugging.html OpenOCD server]&lt;br /&gt;
* [http://www.st.com/internet/com/software/ides_mcu.jsp#stm32 ST Liste: IDEs, Toolsets and Debug tools for MCUs]&lt;br /&gt;
* [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] [http://openocd.sourceforge.net/ OpenOCD] und [https://launchpad.net/gcc-arm-embedded Launchpad]-Toolchain&lt;br /&gt;
&lt;br /&gt;
* Zum Starten eine fertige Zusammenstellung: [http://www.mikrocontroller.net/topic/216554 Eclipse+codesourcery+st-link]&lt;br /&gt;
&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0 / F1 / F4 Hilfreiche Infos gibt es im [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] Forum&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/265600 STM32F4 mit Code::Blocks]&lt;br /&gt;
&lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE die mit dem Segger J-LINK funktioniert.&lt;br /&gt;
&lt;br /&gt;
Sehr nützlich für Linux-Anwender auch diese Seite: [http://fun-tech.se/stm32/index.php STM32/ARM Cortex-M3 HOWTO: Development under Ubuntu.]&lt;br /&gt;
&lt;br /&gt;
===Folgende kommerzielle Umgebungen sind verfügbar===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden.&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code)&lt;br /&gt;
* [http://www.isystem.com/products/itag winIDEAiTag] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag Adapter.&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.atollic.com Atollic] (Lite Version (bis V2.3.0) ohne Code-Limit, auf GCC basierend. Die neueste Version ab V3 hat fast keine Beschränkungen mehr außer jetzt einen Code-Limit von 32kB. Außerdem werden jetzt die meisten ARM Familien unterstützt. )&lt;br /&gt;
* [http://www.coocox.org CoIDE] (Kostenlose GCC, Eclipse basierende IDE mit einem Code-Generator Tool)&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend)&lt;br /&gt;
* [http://www.code-red-tech.com Code Red] (GCC basierend)&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* SEGGER [http://www.segger.com J-LINK / J-TRACE] ARM7..11, Cortex-M0..4, Cortex A8..15, als [http://www.segger.com/cms/j-link-edu.html NonComercial] J-LINK-EDU für ca. 60,- zu haben, läuft in µVision, IAR, gdb, Keil, ...&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro]&lt;br /&gt;
* [http://www.st.com/internet/evalboard/product/219866.jsp ST-LINK], [http://www.st.com/internet/evalboard/product/251168.jsp ST-LINK/V2]&lt;br /&gt;
*[http://www.st.com/internet/com/press_release/p3065.jsp STM32xx Discovery] jedes STM32 Discovery board hat einen ST-Link für Programmierung/Debugging per SWD on-board, welcher auch für eigene STM32 Target Hardware benutzt werden kann (ca. 12,- bis 19,-€, je nach Typ).&lt;br /&gt;
* [http://www.raisonance.com/~rlink-debugger-programmer__microcontrollers__tool~tool__T018:4cn9ziz4bnx6.html Raisonance RLink]&lt;br /&gt;
* [http://www.amontec.com Amontec]&lt;br /&gt;
* [http://www.hjtag.com H-JTAG] Personal Edition für ca. 60,- zu haben, läuft mit ADS, SDT, IAR, Vision und RVDS &lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50.- bei Amazon zu bestellen, oder als Eigenbau version (offenes Design) läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
Solch ein STM32FxDISCOVERY Demo-Board ist ideal für den Einstieg, da man kein extra [[JTAG]] Adapter kaufen muss. Das Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4DISCOVERY] mit 12..15 EUR ist sehr günstig und hat einen leistungsfähigen STM32F407 Prozessor mit 168MHz und einen ST-LINK/V2 schon drauf. Zusammen mit der [http://www.coocox.org/ Coocox] Entwicklungsumgebung hat man einen günstigen Einstieg in die STM32 Welt.&lt;br /&gt;
&lt;br /&gt;
In der Regel haben diese [[JTAG]] Adapter einen 20-Poligen Stecker, den man direkt auf die Demo-Boards, die auch einen 20-Poligen [[JTAG]]-Anschluss haben, einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]].&lt;br /&gt;
&lt;br /&gt;
Andere [[JTAG]] Adapter wie z.B. der ULink von Keil funktionieren nur mit dem Keil Compiler.&lt;br /&gt;
&lt;br /&gt;
Zu erst sollte man sich die IDE heraus suchen mit der man Arbeiten mag, und dann darin den unterstützten JTAG Adapter.&lt;br /&gt;
&lt;br /&gt;
Aus eigener Erfahrung kann ich den J-LINK von Segger sehr empfehlen, da er mit der meisten Software, auch GCC sehr gut und vor allem schnell (FLASH programmieren) funktioniert und enorm viele Prozessoren (ARM7/9/11, Cortex-M0..M4, Cortex-A8..15, uvm., viele Hersteller) unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/colinkEx.htm unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [http://www.oocdlink.com/ OOCDLink]&lt;br /&gt;
* [https://github.com/texane/stlink Stlink]&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
* [http://capitanio.org/mlink/ Linux Demo Code für die Discovery&#039;s ST-Link Programmierung]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne daß man einen JTAG-Adapter benötigt.&lt;br /&gt;
&lt;br /&gt;
Tipps für Installation mit Eclipse können in [http://www.mikrocontroller.net/topic/214719 diesem Thread] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 (Linux) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Variante A ====&lt;br /&gt;
&lt;br /&gt;
* Benötigte Hardware&lt;br /&gt;
** Ein Desktop PC oder Laptop mit Linux OS (openSuSE, Ubuntu, ...) alternativ: Ein Windows System mit Linux in einer virtuellen Maschine &lt;br /&gt;
** root Zugang zum Linux OS (superuser Passwort)&lt;br /&gt;
** GNU C Compiler&lt;br /&gt;
** Programmer ARM-USB-TINY-H (optimal) alternativ: OpenOCD kompatiblen Programmer&lt;br /&gt;
** Prototypboard Olimex STM32-P107 (optimal) alternativ: irgendein board mit STM32 uC und JTAG Port&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
* Download + Installation (in einem Terminal)&lt;br /&gt;
  wget http://hlb-labor.de/cortexm3/install_ToolChain_STM32.sh&lt;br /&gt;
  chmod +x install_ToolChain_STM32.sh&lt;br /&gt;
  ./install_ToolChain_STM32.sh&lt;br /&gt;
 &lt;br /&gt;
Die Installation sollte im Idealfall voll automatisch durchlaufen. Anschliessend wird ein Beispielprojekt mit Multitasking OS und LED-Heartbeat kompiliert und auf den uC programmiert.&lt;br /&gt;
Für andere Protoboards/ Programmer muss die ToolChain entsprechend der readme Anleitung umkonfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Das Projekt kann im QtCreator (http://qt.nokia.com/) geöffnet und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
==== Variante B ====&lt;br /&gt;
&lt;br /&gt;
Die Installation einer Toolchain (Make, Flash, Debug via JTAG, IDE) ist in folgendem Manual beschrieben:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;How-to manual - Installing a toolchain for Cortex-M3/STM32 on Ubuntu&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*http://www.seng.de/downloads/HowTo_ToolChain_STM32_Ubuntu.pdf&lt;br /&gt;
*http://www.seng.de/downloads/HowTo_ToolChain_STM32_Ubuntu.odt&lt;br /&gt;
&lt;br /&gt;
Die Beschreibung im OpenOffice Format erlaubt die Weiterbearbeitung des Textes und das Entnehmen von Quelltexten ohne den Verlust von Formatierungen.&lt;br /&gt;
&lt;br /&gt;
Verwendete Hardware:&lt;br /&gt;
*JTAG device&lt;br /&gt;
**Olimex “ARM-USB-OCD-H”, basierend auf FTDI “FT2232H”&lt;br /&gt;
*Microcontroller&lt;br /&gt;
**Olimex “STM32-H103” basierend auf STM32F103RBT6 mit 128KB Flash, 20KB RAM, 3xUART, ...&lt;br /&gt;
Die Toolchain sollte sich leicht an andere &amp;quot;FT2232&amp;quot; basierte JTAG Probes und &amp;quot;Cortex-M3&amp;quot; Derivate anpassen lassen.&lt;br /&gt;
&lt;br /&gt;
Das Manual umfasst die Installation und Inbetriebnahme sowie Hinweise und Bug-fixes zu folgenden Komponenten:&lt;br /&gt;
*OpenOCD&lt;br /&gt;
*Serial bootloader&lt;br /&gt;
*Sourcery CodeBench Lite for ARM EABI&lt;br /&gt;
*STM32F10x standard peripheral library&lt;br /&gt;
*USB full-speed device library&lt;br /&gt;
*Project templates&lt;br /&gt;
*Makefiles&lt;br /&gt;
*Linker Sript&lt;br /&gt;
*Startup Code&lt;br /&gt;
*Doxygen&lt;br /&gt;
*Git&lt;br /&gt;
*Terminal emulation&lt;br /&gt;
*Eclipse IDE&lt;br /&gt;
*Links zu Datenblättern, Manuals und Toools&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 Eclipse(Windows) ===&lt;br /&gt;
&lt;br /&gt;
Hier ist der Anfang des Artikels [[STM32 Eclipse Installation]], hier ist neueres beschrieben als hier aufgeführt. Wenn der Artikel fertig ist, dann wird dieser Teil gelöscht.&lt;br /&gt;
&lt;br /&gt;
* Eclipse &amp;quot;Helios&amp;quot; installieren mit GNU ARM Eclipse Plug-in&lt;br /&gt;
Eclipse IDE for C/C++ Developers&amp;lt;ref&amp;gt;http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliosr&amp;lt;/ref&amp;gt; downloaden und installieren&lt;br /&gt;
&lt;br /&gt;
* GNU ARM Eclipse Plug-in&amp;lt;ref&amp;gt;http://sourceforge.net/projects/gnuarmeclipse/&amp;lt;/ref&amp;gt; runterladen und installieren. [http://sourceforge.net/apps/mediawiki/gnuarmeclipse/index.php?title=Main_Page Weitere Infos].&lt;br /&gt;
&lt;br /&gt;
Wird CodeSourcery G++ Lite verwendet, so muss die PATH Variable angepasst &lt;br /&gt;
werden, damit das Plugin die CodeSourcery exe-Files findet&amp;lt;ref&amp;gt;für Discovery notwendig&amp;lt;/ref&amp;gt;. Alternativ das eclipse von einem script aus starten und zuerst den PATH erweitern.&lt;br /&gt;
&lt;br /&gt;
Soll das ST-LINK verwendet werden, so kann der Atollic ST-LINK GDBSERVER aus der Atollic free version genutzt werden. Mit dem gdbclient im Eclipse kann damit problemlos geflasht und gedebuggt werden (JTAG und SWD). &lt;br /&gt;
&lt;br /&gt;
Neuere Versionen von OpenOCD können ebenfalls mit STLINK und STLINK2 Kontakt aufnehmen. Bei vorkompilierten OpenOCD-Packeten (z.B. die von Freddy Chopin) mit libusb-Support und installiertem Herstellertreiber von STM ist noch der libusb-Filtertreiber einzurichten (relativ einfach per libusb-win32 filter wizard GUI).&lt;br /&gt;
&lt;br /&gt;
Die Startup- und Linkerscripts der Atollic free version können für ein Projekt in dieser Konstallation genutzt werden.&lt;br /&gt;
&lt;br /&gt;
* Eclipse &amp;quot;Galileo&amp;quot; installation&amp;lt;ref&amp;gt;[http://www.eclipse.org/] → Downloads → &amp;quot;Eclipse IDE for C/C++ Developers (79 MB)&amp;lt;/ref&amp;gt;. Und das Servicepack 1&amp;lt;ref&amp;gt;[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-cpp-galileo-SR1-win32.zip Eclipse SR1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Entpacken der Datei eclipse-cpp-galileo-SR1-win32.zip nach &amp;quot;C:\WinARM\&amp;quot; (Ordner neu erstellen)&lt;br /&gt;
&lt;br /&gt;
* Eclipse PlugIn&amp;lt;ref&amp;gt;http://download.eclipse.org/tools/cdt/releases/galileo&amp;lt;/ref&amp;gt; hinzufügen: Help → Install New Software... → &amp;quot;Eclipse C/C++ Development Tools&amp;quot; + &amp;quot;Eclipse C/C++ GDB Hardware Debugging&amp;quot; installieren&lt;br /&gt;
&lt;br /&gt;
* Yagarto Tools&amp;lt;ref&amp;gt;[http://www.yagarto.de/] &amp;quot;Download (for Windows)&amp;quot; → &amp;quot;YAGARTO Tools&amp;quot; http://www.yagarto.de/download/yagarto/yagarto-tools-20091223-setup.exe Installieren, Auswahl Verzeichnis &amp;quot;C:\WinARM\yagarto-tools&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* CodeSourcery: Achtung! Die Menustruktur ändert sich durchaus mal, dann suchen gehen. http://www.codesourcery.com/ → Products → Sourcery G++ → Editions&amp;gt;Lite Edition → ARM → Downloads. Direkter Download&amp;lt;ref&amp;gt;[http://www.codesourcery.com/sgpp/lite/arm/portal/package6496/public/arm-none-eabi/arm-2010q1-188-arm-none-eabi.exe]&amp;lt;/ref&amp;gt;. Installieren, Auswahl Verzeichnis &amp;quot;C:\WinARM\CodeSourcery&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OpenOCD: Kompilierte Version für Windows&amp;lt;ref&amp;gt;[http://www.freddiechopin.info/] → Download → Software → OpenOCD&amp;lt;/ref&amp;gt; installieren nach &amp;quot;C:\WinARM\OpenOCD_0_4_0&amp;quot; ist auch auf der Seite&amp;lt;ref&amp;gt;[http://yagarto.de/#ocd Yagarto.de]&amp;lt;/ref&amp;gt; beschrieben. PS: Sollte der Olimex ARM-USB-OCD verwendet werden, dann darf nicht der Treiber von Olimex verwendet werden, sondern der vom OpenOCD Download&amp;lt;ref&amp;gt;[http://www.mikrocontroller.net/topic/173753#1668913]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* ST Firmware: http://www.st.com → Auswahl CPU STM32F103xxx → &amp;quot;Firmware&amp;quot; &amp;quot;STM32F10x_StdPeriph_Lib&amp;quot;&amp;lt;ref&amp;gt;http://www.st.com/mcu/devicedocs-STM32F103RC-110.html&amp;lt;/ref&amp;gt;. Das ZIP &amp;quot;stm32f10x_stdperiph_lib.zip&amp;quot; Entpacken nach &amp;quot;C:\WinARM\examples\stm32_FW3.4.0\&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 auf einem zweiten Rechner===&lt;br /&gt;
&lt;br /&gt;
* Kopieren des Verzeichnisses C:\WinARM\ (Zuvor wurden aus diesem Grund alle Setup-Pakete nach C:\WinARM\... installiert)&lt;br /&gt;
* Die PATH-Variable in der Systemsteuerung mit den C:\WinARM\.... Verzeichnissen nachführen&lt;br /&gt;
* Fertig.&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 mit AtollicTrueStudio (+Demo) ===&lt;br /&gt;
* Installation + Demo: [[STM32 LEDBlinken AtollicTrueStudio]]&lt;br /&gt;
&lt;br /&gt;
=== Installation für STM32 mit MDK-ARM Lite und Einstellungen STM32F0/F4-Discovery Board ===&lt;br /&gt;
* [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
* [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
* [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
&lt;br /&gt;
== Demo-Projekte ==&lt;br /&gt;
&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISR&#039;s, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00209826.pdf AN2824]&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokummentierte Features]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und dem GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Tipp FPU von STM32F4xx nutzen ===&lt;br /&gt;
Es benötigt dafür 2 Dinge, zum einen muss die Compileroption gesetzt sein, zum anderen auch die FPU aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
Compileroption:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;COMMON_FLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Code für das Aktivieren der FPU:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;/*FPU settings*/&lt;br /&gt;
__asm volatile (&amp;quot;ldr     r0, =0xE000ED88&amp;quot;);           /* Enable CP10,CP11 */&lt;br /&gt;
__asm volatile (&amp;quot;ldr     r1,[r0]&amp;quot;);&lt;br /&gt;
__asm volatile (&amp;quot;orr     r1,r1,#(0xF &amp;lt;&amp;lt; 20)&amp;quot;);&lt;br /&gt;
__asm volatile (&amp;quot;str     r1,[r0]&amp;quot;);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne Inline-Assembler in C wie in system_stm32f4xx.c aus den Beispielen von ST-Microelectronics:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
SCB-&amp;gt;CPACR |= ((3UL &amp;lt;&amp;lt; 10*2)|(3UL &amp;lt;&amp;lt; 11*2)); /* set CP10 and CP11 Full Access */&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiterhin sollte die Toolchain auch Laufzeitbibliotheken mit FPU-Unterstützung mitbringen (CodeBench lite wird ohne ausgeleifert, GCC for ARM embedded von launchpad.org mit).&lt;br /&gt;
&lt;br /&gt;
Mehr dazu in diesem Thread: [http://www.mikrocontroller.net/topic/261021 Floating Pointing Unit STM32F4]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE (Farnell Programm für Private)] &lt;br /&gt;
* [http://www.sander-electronic.de/be00069.html Sander]&lt;br /&gt;
*[http://www.tme.eu/de/katalog/index.phtml#cleanParameters%3D1%26search%3DSTM32F10%26bf_szukaj%3D+ TME] &lt;br /&gt;
*[http://teske-electronics.de/index.php?cPath=3_9_53 Teske electronics]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, Mouser, Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
&lt;br /&gt;
* [http://shop.embedded-projects.net/index.php?module=artikel&amp;amp;action=gruppe&amp;amp;id=14 Im Shop von Embedded Projects]&lt;br /&gt;
* [http://www.watterott.com/de/Boards-Kits/ARM/ARM-Cortex-M3 Cortex M3 bei Watterott]&lt;br /&gt;
* [http://www.raisonance.com/~primer-starter-kits__microcontrollers__tool~tool__T018:4enfvamuxbtp.html Primer und Primer2 von Raisonance]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.propox.com/products/t_174.html Propox, Header-Boards für 103R und 103V sowie Trägerplatine dafür]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://olimex.com/dev/index.html STM32 bei Olimex]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [http://www.de.rs-online.com/web/p/products/7458434/ STM32Discovery bei RS-Components] 12,65 € +MwSt.&lt;br /&gt;
* [http://www.segor.de/#Q=STM32 VL DISCOVERY] STM32 Discovery bei Segor&lt;br /&gt;
* [http://www.watterott.com/de/STM32F4Discovery STM32F4DISCOVERY] STM32F4 Cortex M4 Controller mit JTAG-Debugger auf der Platine bei Watterott für 16,66EUR.&lt;br /&gt;
* [http://www.steitec.net/ARM-Boards/ Steitec, STM32F103 Cortex M3 Board 34,80€]&lt;br /&gt;
* [http://www.mcu-raisonance.com/~open4-development-platform__microcontrollers__tool~tool__T018:g65gu6ghg2n.html/ Open 4 oder auch genannt Evo-Primer]&lt;br /&gt;
* [http://www.wayengineer.com/index.php?main_page=index&amp;amp;cPath=50_66&amp;amp;page=1&amp;amp;sort=3a WayEngineer]&lt;br /&gt;
* [http://thinkembedded.ch/ST-STMicroelectronics:::24.html Im Thinkembedded Shop] in der Schweiz / DiscoveryF4, div. ETT und Olimex Boarde ab 20,18 CHF / 16,15 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://shop.myavr.de/ARM-Produktlinie/STM32F4-Discovery.htm?sp=article.sp.php&amp;amp;artID=200072 Im myAVR Shop] DiscoveryF4 mit möglichem Zubehör 16,45 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://www.keil.com Keil Microcontollertechnik]&lt;br /&gt;
* [http://www.phytec.de Phytec]&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/173753 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/AllItems.aspx Forum auf der ST Homepage] &lt;br /&gt;
* [http://www.stm32circle.com/hom/index.php STM32 Community] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://www.ebv.com/fileadmin/products/Press_Print/Brochures/Product_Brochures/EBV_Cortex%20Collection_V2.pdf Übersicht der Cortex Prozessoren und deren Hersteller (nicht nur ST, von EBV)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/258652 Tutorial]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32| ]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=55955</id>
		<title>Benutzer:Mixer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=55955"/>
		<updated>2011-03-19T12:44:23Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Interessen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=RFM12&amp;diff=55855</id>
		<title>RFM12</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=RFM12&amp;diff=55855"/>
		<updated>2011-03-14T20:51:41Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* SPI Interface */  Datenrate in MHz??&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beschreibung der Funkmodule RFM01, RFM02 und RFM12.&lt;br /&gt;
&lt;br /&gt;
Benötigt werden in der Minimal-Version im FIFO-Modus nur die Anschlüsse nSEL, SDO, SDI und SCK, eben das komplette SPI-Interface. Der Zugriff auf das Sende- und Empfangs-FIFO ist per Software möglich, ebenso die Abfrage der Statusbits. Deshalb werden z.&amp;amp;nbsp;B. nIRQ und nFFS nicht unbedingt benötigt. nIRQ signalisiert unter anderem, dass das Modul bereit ist Daten zu empfangen. Wenn Daten empfangen wurden, kann dies über den FFIT-Pin abgefragt werden (falls die Füllschwelle eingestellt wurde). nFFS dient dazu das FIFO direkt anzusprechen (es ist quasi der Chipselect für das FIFO), davon wird in der Minimalversion aber kein Gebrauch gemacht. Der Pin muss daher auf high-Pegel gelegt werden!&lt;br /&gt;
An CLK kann eine Frequenz von 1MHz bis 10MHz eingestellt werden. Hiermit kann dann z.&amp;amp;nbsp;B. der Mikrocontroller versorgt werden.&lt;br /&gt;
Reset ist ein Open-Collector-Ausgang und gleichzeitig der Reset-Eingang. Er sollte daher entweder gar nicht, oder aber hochohmig angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Im FIFO-Mode kann das Modul konfiguriert werden mit dem Empfang zu warten, bis die Daten 0x2DD4 empfangen wurden. Sobald dieses Bitmuster empfangen wurde, werden Daten in das FIFO geschrieben, bis man das FIFO abschaltet und die Mustererkennung neu startet.&lt;br /&gt;
&lt;br /&gt;
Als weitere Modi stehen unter anderem ein synchroner Modus zur Verfügung (no FIFO mode), in dem der Sender/Empfänger den Bittakt ausgibt, und synchron dazu die zu sendenden Daten einliest bzw. die empfangenen Daten ausgibt. Der SPI Bus ist trotzdem zur Initialisierung des Moduls notwendig.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Soll ich 433 oder 868 MHz nehmen? ===&lt;br /&gt;
&lt;br /&gt;
Wähle das für deine Anwendung kleinere der beiden Übel: Bei 433 MHz sind i.d.R. mehr Störer unterwegs und bei 868 MHz sind die maximale Belegungsdauer bzw. das listen-before-talk (LBT) Verfahren gemäß [[Allgemeinzuteilung]] zu beachten. Siehe auch im Forum [http://www.mikrocontroller.net/topic/198559] und [http://www.mikrocontroller.net/topic/196693].&lt;br /&gt;
&lt;br /&gt;
=== SPI Interface ===&lt;br /&gt;
&lt;br /&gt;
* Maximale SPI Frequenz: 2,5MHz (10MHz Quarz / 4)&lt;br /&gt;
&lt;br /&gt;
=== CLK-Ausgang bleibt bei 1 MHz ===&lt;br /&gt;
&lt;br /&gt;
* Vor dem Umschalten (mit 0xC0E0) länger warten.&lt;br /&gt;
&lt;br /&gt;
=== RFM12 empfängt ein paar Bytes, dann nur Müll ===&lt;br /&gt;
&lt;br /&gt;
* Es wird zu langsam gesendet (TX FIFO underrun)&lt;br /&gt;
* Es wird zu langsam empfangen (RX FIFO overrun)&lt;br /&gt;
&lt;br /&gt;
Die Status-Bits helfen hier beim Debuggen. SPI sollte auf maximaler Transferrate stehen.&lt;br /&gt;
&lt;br /&gt;
=== RFM empfängt nur Müll ===&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/topic/73560#605528&lt;br /&gt;
&lt;br /&gt;
Deine Module verhalten sich normal. Man muß mit den Gain- und AFC-Bits&lt;br /&gt;
eine ganze Weile spielen, bis die Module korrekt laufen (kommt auf die&lt;br /&gt;
Anwendung an). Fakt ist: der Empfänger empfängt ständig Datenmüll als&lt;br /&gt;
Rauschen. Wenn der FIFO durch die Präambel getriggert wird, sind die&lt;br /&gt;
Daten im FIFO ziemlich korrekt, wenn alles &amp;quot;gut&amp;quot; eingestellt ist. Der&lt;br /&gt;
FIFO sollte per Interrupt dann auch sofort abgeholt werden, da sonst das&lt;br /&gt;
nächste Byte das alte direkt überschreibt. Jeder zusammenhängende&lt;br /&gt;
Datensatz (mehrere Bytes an einem Stück) muß von einer Präambel&lt;br /&gt;
eingeleitet werden. Nach dem kompletten Einlesen eines Datensatzes muß&lt;br /&gt;
der FIFO abgeschaltet, wieder eingeschaltet und für den Empfang der&lt;br /&gt;
nächsten Präambel neu scharf gemacht werden.&lt;br /&gt;
&lt;br /&gt;
=== RFM hängt sich auf ===&lt;br /&gt;
&lt;br /&gt;
Wenn man die AFC nicht begrenzt, also keinen Wertebereich vorgibt, die eine maximale Abweichung korrigiert wird passiert es nach einer Weile, dass sich der Empfänger aufhängt, die Offsetbits im Status werden maximal und dann geht gar nichts mehr, er hängt fest.&lt;br /&gt;
&lt;br /&gt;
edit: Leider bringt die Beschränkung der AFC auf Minimum bei mir keine Verbesserung. Zumindest ist obige Aussage nicht allgemein gültig.&lt;br /&gt;
&lt;br /&gt;
Siehe auch &lt;br /&gt;
* Forenbeitrag [http://www.mikrocontroller.net/topic/82456#689660 RFM12: Erfahrungen ]&lt;br /&gt;
&lt;br /&gt;
=== Kommunikation mit RFM funktioniert nur sporadisch ===&lt;br /&gt;
&lt;br /&gt;
* Ist die Versorgungsspannung stabil? (evtl. Kondensator einbauen)&lt;br /&gt;
&lt;br /&gt;
=== Interrupt nIRQ klappt nicht bei 868MHz ===&lt;br /&gt;
&lt;br /&gt;
Wenn bei der Verwendung der 868er Module die üblichen Sourcen (dasLabor, etc) verwendet werden, müssen einige Änderungen gemacht werden, die sich leicht finden lassen. Ohne weiteres funktionierte der blockierende Empfang, der Interruptbetriebene (nIRQ) machte in mindestens einem Fall Probleme. Hier half die Anpassung des FIFO IT Level . In vorhandenen Sourcen ist 0xCA83 zu finden, eine Änderung auf 0xCAF3 hilft dabei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Register ==&lt;br /&gt;
&lt;br /&gt;
Von https://www.mikrocontroller.net/attachment/24947/RFM12.txt&lt;br /&gt;
&lt;br /&gt;
Dieses Dokument beschreibt die Nutzung des RFM12 TRX Moduls!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; WICHTIG &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieses Dokument wurde aus mehreren Quellen zusammengestellt, und kann Fehler enthalten!&lt;br /&gt;
Es können Abweichungen in Bezug auf RF01 / RF02 / RF12 / RFM01 / RFM02 und andere Module auftreten!&lt;br /&gt;
Es wurde das Datenblatt vom RFM12B und RF12 von www.hoperf.com als Basis genuzt. Zusätzlich wurden diese Informationen mit Hilfe von Forums-Nutzern (https://www.mikrocontroller.net/topic/71682) weiter vervollständigt!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; WICHTIG &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die LNA-Eingangsimpedanz beträgt 250 Ohm, und muss beim Anschluss einer 50-Ohm-Antenne entsprechend angepasst werden, um das Rauschen zu minimieren! &#039;&#039; -- (Auf den Pollin-Modulen bereits vorhanden)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration Setting ===&lt;br /&gt;
 Hex = 80 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: &lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!width=&amp;quot;20%&amp;quot;| Byte ||width=&amp;quot;40%&amp;quot;| 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
!Bits&lt;br /&gt;
|{{8Bit|width=100%| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 }}||{{8Bit|width=100%| el | ef | b1 | b0 | x3 | x2 | x1 | x0}}|}&lt;br /&gt;
 el (TX FIFO) = Sendepuffer für Datentransfer nutzen (1 = An / 0 = Aus)&lt;br /&gt;
 ef (RX FIFO) = Empfangspuffer für Datenspeicherung nutzen (1 = An / 0 = Aus)&lt;br /&gt;
 b... = Zu nutzende Basisfrequenz (00=315MHz / 01=433MHz / 10=868MHz / 11=915MHz)&lt;br /&gt;
 x... = Interner Clock des Chips kann durch verschieben einer Kondensator-Anpass-Stufe bestimmt werden.&lt;br /&gt;
        0,5pF pro Schritt. Basis ist 8,5pF -&amp;gt; (0000=8,5 / 0001=9,0 / 0010=9,5 / ...)&lt;br /&gt;
&lt;br /&gt;
=== Power-Management ===&lt;br /&gt;
 Hex = 82 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 10000010 | er | ebb | et | es | ex | eb | ew | dc&lt;br /&gt;
 er = Empfänger einschalten (1 = an / 0 = Aus)&lt;br /&gt;
 ebb = ... (Synthesizer muss aktiv sein!) (1 = an / 0 = aus)&lt;br /&gt;
 et = Sender einschalten (1 = an / 0 = Aus) (Wenn das TX-Register aktiv und mit Daten gefüllt ist/wurde,&lt;br /&gt;
      werden diese Daten sofort gesendet) (1 = an / 0 = aus)&lt;br /&gt;
 es = Schaltet den Synthesizer ein. (1 = an / 0 = aus)&lt;br /&gt;
 ex = Schaltet den Quarz-Oszilator ein. (1 = an / 0 = aus)&lt;br /&gt;
 eb = Vergleichbar mit BrownOutDetection -&amp;gt; Erkennt eine zu geringe Betriebsspannung und erzeugt einen Interrupt,&lt;br /&gt;
      um einen drohenden Spannungsaufall anzukündigen (1 = An / 0 = Aus)&lt;br /&gt;
 ew = Aktiviert den WakeUpTimer des Prozessors. (1 = an / 0 = aus)&lt;br /&gt;
 dc = Deaktiviert die Ausgabe des SystemClocks auf dem CLK Pin am Chip (1 = Keine ClockAusgabe / 0 = Clock ausgeben)&lt;br /&gt;
&lt;br /&gt;
=== PLL Setting ===&lt;br /&gt;
 Hex = 198 + y&lt;br /&gt;
 Bit-Syntax: 110011000 | ob1 | ob0 | lpx | ddy | ddit | bw1 | bw0&lt;br /&gt;
 ob... = ... (00= 5 oder 10MHz [standard] / 01=3.3MHz / 1x=2.5MHz oder weniger)&lt;br /&gt;
 lpx = Wählt den Low-Power-Mode für den Quarz-Oszilator aus. (0=1ms [620µA] / 1=2ms [460µA])&lt;br /&gt;
 ddy = ...&lt;br /&gt;
 ddi = Schaltet das Dithering in PLL-Schleife ab. (1=abgeschaltet / 0=eingeschaltet)&lt;br /&gt;
 bw... = Wählt die Bandbreite des PLL-Signals aus. (00=86.2kbps [-107dBc/Hz] / 01=256kbps [-102dBc/Hz]) Bei 1MHz Offset Phasenrauschen.&lt;br /&gt;
&lt;br /&gt;
=== LowBatt / µC Clock Control ===&lt;br /&gt;
 Hex = c0 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 11000000 | d2 | d1 | d0 | v4 | v3 | v2 | v1 | v0&lt;br /&gt;
 d... = Bestimmt den Teilungsfaktor für die Clockausgabe am CLK-Pin in Abhängigkeit des Internen SystemTakts.&lt;br /&gt;
        (000=1 / 001=1.25 / 010=1.66 / 011=2 / 100=2.5 / 101=3.33 / 110=5 / 111=10)&lt;br /&gt;
 v... = Bestimmt die Minimalspannung, ab der ein Interrupt durchgeführt werden&lt;br /&gt;
 muss. (Ähnlich einer BrownOutDetection). Im Power-Managment muss das eb-Bit&lt;br /&gt;
 aktiv sein, damit dies funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Frequency-setting ===&lt;br /&gt;
Bestimmt den Offset der Sende- und Empfangsfrequenz. Dieser Offset wird auf das Basisband im Configuration Setting hinzu gerechnet.&lt;br /&gt;
 Hex = a &amp;amp; xxx&lt;br /&gt;
 Bit-Syntax:&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!width=&amp;quot;20%&amp;quot;| Byte ||width=&amp;quot;40%&amp;quot;| 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
!Bits&lt;br /&gt;
|{{8Bit|width=100%| 1 | 0 | 1 | 0 | f11 | f10 | f9 | f8 }}||{{8Bit|width=100%| f7 | f6 | f5 | f4 | f3 | f2 | f1 | f0}}|}&lt;br /&gt;
&lt;br /&gt;
 f... = Bestimmt den Offsetwert der Frequenz.&lt;br /&gt;
        Als Basis gilt das eingestellte Band im Configuration-Settings-Kommando&lt;br /&gt;
&lt;br /&gt;
freq = 10 * C1 * (C2 + f/4000) [MHz]&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
! Band || C1 || C2&lt;br /&gt;
|-&lt;br /&gt;
| 315 || 1 || 31&lt;br /&gt;
|-&lt;br /&gt;
| 433 || 1 || 43&lt;br /&gt;
|-&lt;br /&gt;
| 868 || 2 || 43&lt;br /&gt;
|-&lt;br /&gt;
| 915 || 3 || 30&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data-Rate ===&lt;br /&gt;
 Hex = c6 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 11000110 | cs | r6 | r5 | r4 | r3 | r2 | r1 | r0&lt;br /&gt;
 cs =  Vorteiler, Faktor 8. Hiermit kann ein Vorteiler aktiviert werden,&lt;br /&gt;
       der die errechnete Baudrate (r...) durch 8 teilt.&lt;br /&gt;
 r... = Baudratenteilerfaktor&lt;br /&gt;
&lt;br /&gt;
=== RX Control ===&lt;br /&gt;
 Hex = 94 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 10010 | p20 | d1 | d2 | i2 | i1 | i0 | g1 | g0 | r2 | r1 | r0&lt;br /&gt;
 p20 = Bestimmt die Funktion des Pin20 (nINT / VDI) am RFM12 Chip (1 = VDI-Ausgang / 0 = Interrupt-Eingang)&lt;br /&gt;
 d... = (Valid Data Indicator). Definiert die Geschwindigkeit, mit der bestimmt wird, ob ein Signal korrekt ist, oder nicht.&lt;br /&gt;
        (00=schnell / 01=mittel / 10=langsam / 11=immer an). Je nach eingestellter Variante werden&lt;br /&gt;
        unterschiedliche Hardware- und Software-Kombinationen genuzt.&lt;br /&gt;
        Fast:  CR_Lock  OR  DQD  ... Medium:  CR_Lock  AND ( DRSSI  OR  DQD ) ... &lt;br /&gt;
        SLOW: R/S FlipFlop aus (SET)  DRSSI  OR  DQD  OR  CR_Lock  und (CLR)  DRSSI  AND  DQD  AND  CR_Lock .&lt;br /&gt;
 i... = Bestimmt die Bandbreite des Empfängers in KHz (KiloHertz).&lt;br /&gt;
        (000=Reserviert / 001=400 / 010=340 / 011=270 / 100=200 / 101=134 / 110=67 / 111=Reserviert)&lt;br /&gt;
 g... = (LNA-Gain) Verstärkungsfaktor des Rauscharmen-Eingangs-Signal-Verstärkers (LNA Low Noise Amplifier).&lt;br /&gt;
        Werte in dBm (Dezibel [Grösse: Milliwatt]) Mögliche Werte sind: 0 / -6 / -14 / -20&lt;br /&gt;
 r... = (DRSSI = Digital Received Signal Strength Indication) Minimale Empfangssignalfeldstärke.&lt;br /&gt;
        6 dBm pro Schritt: (000=-103 / 001=-97 / 010=-91 / ...)&lt;br /&gt;
&lt;br /&gt;
=== Synchron Pattern ===&lt;br /&gt;
 Hex = ce &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 11001110 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0&lt;br /&gt;
 b... = Legt den Wert fest, der als Synchronisations-Byte für die Datenfilterung verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Data Filter ===&lt;br /&gt;
 Hex = c2 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 11000010 | al | ml | -unknow- (1) | s | -unknow- (1) | f2 | f1 | f0&lt;br /&gt;
 al = Baudratenregenerator schaltet automatisch in den langsamen Modus, &lt;br /&gt;
      sobald er einen Takt erkannt hat.&lt;br /&gt;
 ml = schneller/langsamer Modus&lt;br /&gt;
 -unknown- (1) = ??? (Standard = 1) (Auch im Datenblatt von IA4420 so beschrieben)&lt;br /&gt;
 s = (DataFilter) Typ des Datenfilters (0=DigitalFilter / 1=AnalogFilter).&lt;br /&gt;
     Bei Nutzung des Analog-Filters kann kein FIFO sowie kein ClockRecovery genuzt werden.&lt;br /&gt;
 -unknown- (1) = ??? (Standard = 1) (Auch im Datenblatt von IA4420 so beschrieben)&lt;br /&gt;
 f... = (DQD Threshold) Bestimmt den Schwellwert, ab dem ein Signal als gut empfunden wird,&lt;br /&gt;
         und der Empfänger dieses weiterverarbeiten soll.&lt;br /&gt;
         DQD (data quality detection) zählt die &amp;quot;Spikes&amp;quot; des ungefilterten Signals, und bestimmt darüber die Qualität der Daten.&lt;br /&gt;
&lt;br /&gt;
=== FIFO und RESET-Mode ===&lt;br /&gt;
 Hex = ca &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 11001010 | f3 | f2 | f1 | f0 | sp | al | ff | dr&lt;br /&gt;
 f... = (FIFO interrupt Level)&lt;br /&gt;
 sp = (Sync-Pattern length) Legt die Länge des Synchron-Patterns fest&lt;br /&gt;
      (0 = 2Byte / 1 = 1Byte)&lt;br /&gt;
 al = (FIFO Fill Condition) Legt den Wert fest, ab dem das Füllen des FIFOs beginnt.&lt;br /&gt;
      (0=Synchron / 1=Ständig). Bei Nutzung des Synchron-Modus, werden erst dann Daten in den FIFO geschrieben,&lt;br /&gt;
      wenn eine definierte 8-Bit od. 16-Bit lange Datenfolge empfangen wurde (Standard ist Hex: 2dd4,&lt;br /&gt;
      das LSB kann geändert werden und stellt das 8-Bit Synchron-Pattern dar).&lt;br /&gt;
 ff = (FIFO Fill) Startet das Einlesen der empfangenen Daten in den FIFO-Puffer.&lt;br /&gt;
      Wenn al (FIFO Fill Condition) auf synchron steht, dann startet das Setzen dieses Bits die Synchronisation-Bit-Erkennung.&lt;br /&gt;
 dr = (Sens Reset Mode) Wenn dieses Bit auf 0 steht, wird bei einer Schwankung von 200mV auf&lt;br /&gt;
      der VCC-Leitung (Spannungsversorgung des Chips), ein System-Reset ausgelöst.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Frequency Control ===&lt;br /&gt;
 Hex = c4 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 11000100 | a1 | a0 | rl1 | rl0 | st | fi | oe | en&lt;br /&gt;
 a... = Modus der AFC-Schaltung, 0=Auto off, 1=einmalig nach Einschalten, 2=Solange VDI low ist, 3=unabhängig von VDI&lt;br /&gt;
 r... = (Range Limit) Frequenzraster (00=KeineBegrenzung / 01=+15 &amp;gt; -16 / 10=+7 &amp;gt; -8 / 11=+3 &amp;gt; -4)&lt;br /&gt;
 st = Berechneten Offset-Wert übernehmen&lt;br /&gt;
 fi = Genauer Berechnungsmodus (besser aber lansgamer)&lt;br /&gt;
 oe = AFC-Offset freischalten&lt;br /&gt;
 en = AFC-Berechnung aktivieren&lt;br /&gt;
&lt;br /&gt;
=== TX Configuration Control ===&lt;br /&gt;
 Hex = 98 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 1001100 | mp | m3 | m2 | m1 | m0 | -unknow- (0) | p2 | p1 | p0&lt;br /&gt;
 mp = (Modulation Polarity) Bestimmt die Richtung der FSK-Erzeugung (invertiert das Spektrum).&lt;br /&gt;
 m... = (fDeviation) Bestimmt den Frequenzabstand des High- und Low-Wertes bei der Ubertragung im FSK-Betrieb. Basis ist der mp-Wert.&lt;br /&gt;
 -unknown- (0) = ??? (Standard = 0) (Auch im Datenblatt von IA4420 so beschrieben)&lt;br /&gt;
 p... = Bestimmt die relative Ausgangsleistung des Senders anhand des dBm-Wertes (Dezibel [Grösse: Milliwat]) 3-dBm-Schritte.&lt;br /&gt;
        (000=0 / 001=-3 / 010=-6 / ...). Der Wert steht im Zusammenhang mit der angeschlossenen Antennen-Impedanz.&lt;br /&gt;
&lt;br /&gt;
=== Wake-Up Timer ===&lt;br /&gt;
 Bestimmt die Zeitperiode der zyklischen Einschaltung des WakeUp-Timers&lt;br /&gt;
 Hex = e &amp;amp; xxx&lt;br /&gt;
 Bit-Syntax: 111 | R4 | R3 | R2 | R1 | R0 | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0&lt;br /&gt;
 R = Exponent der Zeit&lt;br /&gt;
 M = Zeit&lt;br /&gt;
&lt;br /&gt;
=== Low Duty-Cycle ===&lt;br /&gt;
&lt;br /&gt;
Bestimmt die maximale Sendezeit pro Stunde. Dies ist wichtig, um sich an gesetzliche Frequenzzuteilungsrichtlinien zu halten, die bestimmen, wie lang jemand mit einer definierten Sendeleistung auf einer bestimmten Frequenz (mit eventuell definierter Betriebsart [Modulationstyp]) senden darf.)&lt;br /&gt;
&lt;br /&gt;
 hex = 6400 + Bits&lt;br /&gt;
 Bit-Syntax: 11001000 | d6 | d5 | d4 | d3 | d2 | d1 | d0 | en&lt;br /&gt;
 d... = Einschaltdauer während der zyklischen Einschaltung&lt;br /&gt;
 en = zyklische Einschaltung aktivieren&lt;br /&gt;
&lt;br /&gt;
=== RX FIFO Read ===&lt;br /&gt;
 Hex = b000&lt;br /&gt;
 Bit-Syntax: 1011000000000000&lt;br /&gt;
&lt;br /&gt;
Dieses Kommando löst die Rückgabe eines Datenbytes (synchron mit dem 8. Bit) aus. Es ist nötig, dass das ef-Bit (RX-FIFO) im Configuration Setting gesetzt wurde, um diese Funktion nutzen zu können!&lt;br /&gt;
&lt;br /&gt;
=== TX Register Write ===&lt;br /&gt;
Dieses Kommando schreibt Daten in den TX-Puffer. Wenn der Sender aktiv ist, wird dieses sofort gesendet. el (TX-Register) muss im Configuration-Setting-Kommando aktiv sein.&lt;br /&gt;
 Hex = b8 &amp;amp; xx&lt;br /&gt;
 Bit-Syntax: 10111000 | DataByteToSend&lt;br /&gt;
 DataByteToSend = Das Datenbyte, welches gesendet werden soll.&lt;br /&gt;
&lt;br /&gt;
(Senden Funktioniert nur wenn zuvor der Status abgefragt wurde)&lt;br /&gt;
&lt;br /&gt;
=== Status Read ===&lt;br /&gt;
Dieses Kommando löst die Rückgabe des Statusregisters aus, welches nach der ersten 0 im ersten Bit synchron übertragen wird.&lt;br /&gt;
 Hex = 0000&lt;br /&gt;
 Bit-Syntax: 0000000000000000&amp;lt;000&amp;gt;&lt;br /&gt;
 Rückgabe-Syntax: x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | x10 | x11 | x12 | x13 | x14 | x15 | x16 | x17 | x18&lt;br /&gt;
 x0 -&amp;gt; x5 = Interrupt bits&lt;br /&gt;
 x6 -&amp;gt; x15 = Status Bits&lt;br /&gt;
 x16 -&amp;gt; x18 = FIFO&lt;br /&gt;
 x0 = FFIT / RGIT (RGIT = TX-Register ist bereit neue Daten zu senden ... kann mit dem TX-Register gelöscht werden)&lt;br /&gt;
     (FFIT = Die Anzahl der Datenbits im FIFO-Puffer hat das eingestellte Limit erreicht.&lt;br /&gt;
      Kann mit einer der FIFO-Lesemethoden gelöscht werden)&lt;br /&gt;
 x1 = POR (PowerOnReset)&lt;br /&gt;
 x2 = FFOV / RGUR (RGUR = Der Datenstrom beim Senden ist abgerissen, da nicht schnell genug Daten nachgeladen wurden)&lt;br /&gt;
      (FFOV = Der RX-FIFO ist übergelaufen)&lt;br /&gt;
 x3 = WKUP&lt;br /&gt;
 x4 = EXT (Externer IRq vom nINT-Pin)&lt;br /&gt;
 x5 = LBD (Low Battery Detected)&lt;br /&gt;
 x6 = FFEM (Der FIFO-Puffer ist leer/EMpty)&lt;br /&gt;
 x7 = RSSI/ATS (ATS = )(RSSI = Die Signalstärke ist über dem eingestelltem Limit)&lt;br /&gt;
 x8 = DQD&lt;br /&gt;
 x9 = CRL&lt;br /&gt;
 x10 = ATGL&lt;br /&gt;
 x11 = OFFS_6 (sign of offset)&lt;br /&gt;
 x12 = OFFS_3&lt;br /&gt;
 x13 = OFFS_2&lt;br /&gt;
 x14 = OFFS_1&lt;br /&gt;
 x15 = OFFS_0&lt;br /&gt;
 x16 = FO&lt;br /&gt;
 x17 = FO+1&lt;br /&gt;
 x18 = FO+2&lt;br /&gt;
&lt;br /&gt;
== Einstellungen für maximale Reichweite ==&lt;br /&gt;
&lt;br /&gt;
Für eine maximale Reichweite eignen sich folgende Einstellungen:&lt;br /&gt;
* Bitrate: 2k - 10kbit/s.&lt;br /&gt;
* Receiver Baseband Bandwidth: 134kHz&lt;br /&gt;
* RSSI Threshold: -97dBm&lt;br /&gt;
* LNA gain: 0dB. Falls in der Gegend Störer im gleichen Frequenzbereich sind, dann -6dB, ansonsten kann die Eingangsstufe übersteuern.&lt;br /&gt;
* FSK frequency deviation: +/-90kHz&lt;br /&gt;
* Output Power: 0dB&lt;br /&gt;
&lt;br /&gt;
Und vor allem: Eine gute (Richt-) Antenne.&lt;br /&gt;
&lt;br /&gt;
== Quarzfrequenz ändern==&lt;br /&gt;
Im Datenblatt wird die Verwendung eines 10 MHz-Quarzes empfohlen. Man darf die Frequenz aber nach oben und unten variieren, wie Messungen mit einem DDS-Generators anstelle des Quarzes zeigen: [[Media:PLL-Rastbereich_log.pdf|PLL-Einrast-Tabelle]]. Eine [[Media:RFM12Quarz.pdf|Tabelle: Quarzfrequenzen von 8,5-11 MHz]] zeigt die damit erreichbaren Frequenzen. Quarze für 3. oder auch 5.Oberton sollten auch auf ihrer Grundfrequenz verwendbar sein, dafür bieten sich u.a. CB-Funk- und 10m-Amateurbandquarze an. &lt;br /&gt;
&lt;br /&gt;
Den Einfluß der vier unteren Bits im Configuration Setting Register und des mp-Bits (Modulations-Polarität?) auf die PLL-Frequenz zeigt diese [[Media:Varicap_RFM12.pdf|Kapazitäts-Tabelle]]. Pro Stufe sind es hier etwa 4 kHz, das kann je nach Quarz schwanken. Möglicherweise ist so auch Schmalband-FSK möglich, ohne Änderung des PLL-Teilers.&lt;br /&gt;
&lt;br /&gt;
Was können wir damit anfangen? Neben dem regulären Einsatz auf den beiden zugelassenen Bändern 433 und 868 MHz sind das unter anderem (bitte weitere Ideen einfügen):&lt;br /&gt;
&lt;br /&gt;
* Packet-Radio mit 9600 Baud im 70cm-Amateurband 430-440 MHz. Die einfachste Möglichkeit ist das Programm [http://www.baycom.org/~tom/ham/soundmodem/ Soundmodem], das für Windows und Linux existiert. Wer es komfortabler haben will findet [http://www.dj4uf.de/funktechnik/soundmodem/soundmodem.htm hier] eine Beschreibung wie Soundmodem mit den Programmen [http://www.flexnet.info/ Flexnet] und [http://www.paxon.de Paxon] zusammenarbeitet. Eine Karte der Packet-Radio-Digipeater im 70cm-Band kann man mittels [http://www.hammap.de Hammap] erstellen. Leider werden die Daten in den letzten Jahren nicht mehr sehr gepflegt, es dürften einige Karteileichen enthalten sein.&lt;br /&gt;
&lt;br /&gt;
* Empfang der [http://www.adacom.org/projekte/funkruf/ POCSAG-Funkrufsender] am oberen Ende des Amateurbandes auf  439,9875 MHz 2-FSK mit 4kHz Hub und 1200 bit/s im POCSAG Radio Paging Code 1 [http://home.arcor.de/norbert_n/samsfaq/sams.txt (Liste der Sender, Stand 18.09.07)]. Zur Decodierung existieren mehrere Programme, aufbauend auf [http://www.baycom.org/~tom/ham/linux/multimon.html Multimon] die Weiterentwicklungen [http://www.monitor.mgrohmann.de/ Monitor] und [http://monitord.de/ MonitorD]. Im Prinzip könnte man damit auch die verschlüsselten Wettermeldungen auf 466,23 MHz mitschreiben, aber nicht decodieren.&lt;br /&gt;
&lt;br /&gt;
* Empfang der [http://www.darc.de/vus/digital.html D-Star-Relais]. Das ist eine patentierte digitale Sprach- und Datenübertragung, deren Eigentümer dafür sorgt, dass kein käufliches oder Selbstbaufunkgerät ohne den &amp;quot;AMBE&amp;quot;-Modemchip D-Star senden und empfangen darf. Es gibt eine kleine Ausnahme, das [http://www.darc.de/vus/down/dstar_decode_v02a.zip Programm r00t&#039;s D-Star Decoder V0.2a] für die Soundkarte, das nur Rufzeichen und Datentelegramme der beteiligten Funkamateure darstellt.&lt;br /&gt;
&lt;br /&gt;
* Panoramaempfänger (die Bezeichnung Spektrumanalysator wäre etwas übertrieben) unter Verwendung des analogen RSSI Ausgangs (Anschluß am Kondensator in der Ecke). Damit ließe sich z.&amp;amp;nbsp;B. auch die Bandbelegung im PMR-Bereich 446,0-446,2 MHz oder im Mobilfunkband um 900 MHz anzeigen.&lt;br /&gt;
&lt;br /&gt;
* Pegelanzeige für Mobilfunksender. Im 900 MHz Mobilfunkbereich könnte man mit dem RSSI-Ausgang die umliegenden Funkmasten anpeilen und ihre Pegel anzeigen. Laut Datenblatt nur ein Anzeigeumfang von 35 dB, aber mit umschaltbarem Grundpegel.&lt;br /&gt;
&lt;br /&gt;
* In Verbindung mit einem Frequenzumsetzer lassen sich weitere Frequenzbereiche erschließen, z.&amp;amp;nbsp;B. Packet-Radio im 23cm- (1240-1200 MHz)  und 13cm- (2320-2450 MHz) Amateurband. Leider liegt die Zwischenfrequenz der Satellitentuner (479,5 MHz) schon am oberen Ende des PLL-VCO-Einrastbereiches. Damit wäre ein preiswerter Konverter für 23cm möglich, meistens schon mit I2C-Bus PLL.&lt;br /&gt;
&lt;br /&gt;
* Local Oscillator für einen Empfänger. Mir den ca. 5 Milliwatt des RFM12 läßt sich ein [http://www.mini-circuits.com/products/fm_sm_main.html passiver Diodenringmischer] ansteuern. Damit kann man einen Überlagerungsempfänger oder -sender mit hoher erster Zwischenfrequenz bauen.&lt;br /&gt;
&lt;br /&gt;
== Antennen-Anpaßnetzwerk==&lt;br /&gt;
[[Image:Antennenanpassung.png|thumb|right|400px|Antennen-Anpassnetzwerk im Datenblatt]]&lt;br /&gt;
Soll das RFM12 auf anderen Frequenzen betrieben werden, ist nur eine Änderung des Antennennetzwerks nötig. Das Datenblatt bietet knappe aber ausreichende Informationen.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zwischen Pin 12 und 13 liegt eine Spannungsquelle, die ihre maximale Sendeleistung in eine komplexe Last nach der Tabelle &amp;quot;Note4&amp;quot; abgibt. Das bedeutet, ihr Innenwiderstand ist konjugiert-komplex zu dieser Last, also dieselben Zahlenwerte, nur mit Minuszeichen vor dem &amp;quot;j&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anpassnetzwerk läßt sich auf zwei Bauteile reduzieren: von der Antenne ausgehend, die als reeller 50 Ohm- Widerstand angenommen wird, ist ein Kondensator in Reihe geschaltet. C8 und C9 (in der Tabelle C9 und C10 bezeichnet) liegen in Reihe und sind gleich groß, dürfen also in einem Kondensator mit der halben Kapazität zusammengefasst werden. Dann liegt noch L1 parallel zur Quelle, L3 hat mehr als den 20-fachen Wert und kann vernachlässigt werden.&lt;br /&gt;
Das ganze läßt sich im Smith-Diagramm gut darstellen.&lt;br /&gt;
&lt;br /&gt;
[[Image:SmithDiagramm.png|thumb|right|400px|Anpassnetzwerk im Smith-Diagramm]]&lt;br /&gt;
&lt;br /&gt;
Von der Antenne im Mittelpunkt ausgehend bewegen wir uns mit dem Serien-C Cs auf einem Kreisbogen nach unten (kapazitive Halbebene) auf den Punkt &amp;quot;Unendlich&amp;quot; rechts außen zu. Ungefähr senkrecht unter dem Zielpunkt, hier für 433 MHz gezeichnet, biegen wir ab auf eine Kreisbahn für die Parallelinduktivität Lp. Sie führt in die obere (induktive) Halbebene auf den Nullpunkt links zu. Der genaue Schnittpunkt beider Kreise kann &amp;quot;mit Zirkel und Lineal&amp;quot; oder einem der [http://www.mikrocontroller.net/articles/Schaltungssimulation#Hochfrequenztechnik Hochfrequenz-Berechnungsprogramme] ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Die Kreise für Lp oder Cp sind im Smith-Diagramm nicht eingezeichnet , um die Übersicht zu wahren. Man könnte ein gespiegeltes Diagramm darüberlegen, aber stattdessen spiegelt man die Kurve am Diagramm-Mittelpunkt (dünne blaue Kurven). Am Rand kann man jetzt die auf 50 Ohm (bzw. 1/50Ohm für die gespiegelte Kurve) normierten Blindwiderstände ablesen. Für Cs lesen wir eine Differenz zwischen Start und Zielpunkt von etwa Xc=(3,2-0) * 50 Ohm ab, für Lp sind es (0,25 +0,32) = 0,57*(1/50 Ohm). Damit erhalten wir Cs=1/(2*Pi*f*Xc)=2,3 pF das war wie gesagt die halbe Kapazität der beiden hintereinandergeschalteten Kondensatoren, Tabellenwert ist 4,7pF und Lp=1/(2*Pi*f*0,57*(1/50))= 32,2 nH, der Tabellenwert ist 27nH.&lt;br /&gt;
&lt;br /&gt;
[[Image:Antennenanpassung_RF12.png|thumb|right|400px|Anpassnetzwerk im Datenblatt zu RF12]]&lt;br /&gt;
[[Image:Smith-Diagramm-RF12.png|thumb|right|400px|Smith-Diagramm zum RF12]]&lt;br /&gt;
Im RF12 wird ein um zwei Bauteile (im Bild C2 und L1 genannt) erweitertes Netzwerk empfohlen, das macht man um eine breitbandigere Anpassung zu erreichen.&lt;br /&gt;
&lt;br /&gt;
== Betriebsspannung==&lt;br /&gt;
Achtung nicht alle Module sind für 5V geeignet, alle Typen mit &amp;quot;B&amp;quot; am Ende sind nur für 3,3V. Man muß dann entweder den Mikrocontroller ebenfalls mit 3,3V betreiben, oder [http://www.mikrocontroller.net/articles/Pegelwandler Pegelwandler] verwenden.&lt;br /&gt;
&lt;br /&gt;
== Messungen ==&lt;br /&gt;
Drei Messungen am RFM12 zeigen den Einfluß von Eingangpegel, Frequenzhub und Mittenfrequenz auf das Ausgangssignal, gemessen am Filterkondensator CFIL. Zwei weitere Kurven zeigen die ARSSI-Spannung (Anschluß am Kondensator in der Ecke) und die damit gemessene Filterkurve.&lt;br /&gt;
[[Image:RFM12_Eingangspegel.png|thumb|right|800px|Messungen am RFM12 Änderung des Eingangspegels]]&lt;br /&gt;
[[Image:RFM12_Frequenzhub.png|thumb|right|800px|Messungen am RFM12 Änderung des Frequenzhubs]]&lt;br /&gt;
[[Image:RFM12_Mittenfrequenz.png|thumb|right|800px|Messungen am RFM12 Änderung der Mittenfrequenz]]&lt;br /&gt;
[[Image:RFM12_ARSSI_und_Filterkurve.png|thumb|right|200px|Messungen am RFM12 ARSSI_und_Filterkurve]]&lt;br /&gt;
&lt;br /&gt;
Was folgt aus diesen Messungen?&lt;br /&gt;
* Der ARRSI-Anschluß zeigt uns über mehr als 100 kHz ein Sendesignal an. Decodierbar ist es aber nur im Abstand von weniger als 5 kHz von der Mittenfrequenz. Ohne Abgleich von Sender und Empfänger ist also die AFC unverzichtbar.&lt;br /&gt;
* Das &amp;quot;Loch&amp;quot; in der Mitte der Durchlaßkurve stammt von dem im Datenblatt gezeigten Hochpass &amp;quot;&amp;gt; 7 kHz&amp;quot;. Für ein unmoduliertes Sendesignal geht die ARSSI-Spannung fast auf den Rauschpegel herunter, hier wurde mit +/-15kHz moduliert. &lt;br /&gt;
* Damit läßt sich der Empfänger abgleichen. Man braucht dazu nur ein unmoduliertes Sendesignal auf der Sollfrequenz. Das kann ein mittels Frequenzzähler abgeglichenes zweites RFM12 sein. Der Empfängerquarz wird mit den 4 Bit für die Oszillatorkapazität genau auf dieses &amp;quot;Loch&amp;quot; der ARRSI-Spannung eingestellt.&lt;br /&gt;
&lt;br /&gt;
Die AFC-Messdauer ist im Datenblatt nicht genannt, eine schnelle Abfrage des ATGL-Bit im Statusregister im &amp;quot;Auto-AFC&amp;quot; - Modus liefert minimale Pulsbreiten von ca. 250..270 µsec, entsprechend einer Messfolgefrequenz von 4 kHz - leider nicht ausreichend um 9600 Baud Schmalband-FM zu demodulieren. Im Auto-Modus werden zwei Messungen zusammengefasst, damit beträgt die Updaterate sogar nur 2 kHz. Weitere Messung : ab etwa +/-10 kHz Hub synchronisiert sich das ATGL-Bit auf der Mittenfrequenz mit einem bis zu 1,8...2 kHz FM-modulierten Signal.&lt;br /&gt;
&lt;br /&gt;
Neue Idee: &amp;quot;Dithering und FM-Flankendemodulator&amp;quot;: &amp;lt;br&amp;gt; &lt;br /&gt;
Wenn das Empfangssignal nicht weit genug FM-moduliert ist, müssen wir eben den Empfänger modulieren. Im Timer-Interrupt wird die Quarzkapazität oder die PLL z.&amp;amp;nbsp;B. mit 38,4 oder 76,8 kHz und mindestens +/-15kHz Hub umgeschaltet, sodaß bei Empfang eines unmodulierten Signals am CFIL-Ausgang ein symmetrisches Rechteck dieser Frequenz erscheint. Ist das Empfangssignal schmalbandig FM-moduliert, und man stimmt den Empfänger leicht daneben ab, so sollte das CFIL-Signal mit dieser Modulation PWM-moduliert sein. Ein Tiefpass filtert die Dithering-Frequenz weg und übrig bleibt (wenns funktioniert) die Modulation, vielleicht sogar analoger Sprechfunk...&lt;br /&gt;
Motto &amp;quot;Engineering is the art of making what you want from things you can get.&amp;quot; (von http://www.dsprelated.com)&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
* [[Elektronikversender#csd-electronics|csd-electronics]]&lt;br /&gt;
* [[Elektronikversender#IT-WNS|IT-WNS]]&lt;br /&gt;
* [[Elektronikversender#Pollin_Electronic|Pollin Electronic]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR RFM12]]&lt;br /&gt;
* [[RFM12 Protokoll Stack]]&lt;br /&gt;
* [[RF_SOAP]]&lt;br /&gt;
* [[ Pollin_Funk-AVR-Evaluationsboard]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/93801 Bezugsquellen]&lt;br /&gt;
* [http://www.das-labor.org/storage/LaborLib/rfm12/ Library zur Ansteuerung des RFM12]&lt;br /&gt;
* [http://www.compotron.com/daten/any/IA4420.pdf Datenblatt des Chipherstellers Integration IA4420.pdf]&lt;br /&gt;
* [https://www.silabs.com/Support%20Documents/TechnicalDocs/Si4420.pdf Silabs hat Integration im Juni 2008 gekauft, Chipbezeichnung jetzt Si4420]&lt;br /&gt;
Folgende Links sind mit Vorsicht zu genießen, da die Datenblätter teilweise  fehlerbehaftet sind. Es empfiehlt sich, direkt mit dem Datenblatt des RF12 (das ist das IC auf dem Modul) zu arbeiten. Dieses ist so gut wie fehlerfrei.&lt;br /&gt;
&lt;br /&gt;
* [http://www.hoperf.com/upfile/RF12.pdf Datenblatt des ICs RF12] (PDF)&lt;br /&gt;
* [http://www.hoperf.com/upfile/RFM12.pdf Datenblatt des Moduls RFM12] (PDF)&lt;br /&gt;
* [http://www.hoperf.com/upfile/RF12_code.pdf Programming Guide] (PDF)&lt;br /&gt;
* [http://www.hoperf.com/upfile/RF12TOOLS.pdf Demo Kit User Manual] (PDF)&lt;br /&gt;
* [http://www.pollin.de/shop/downloads/D810047S.ZIP Beispielprogramm von Pollin] (ZIP)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ModelSim&amp;diff=54963</id>
		<title>ModelSim</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ModelSim&amp;diff=54963"/>
		<updated>2011-02-11T13:07:28Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Leerzeichen eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Beschreibung=&lt;br /&gt;
Modelsim ist eine mächtige Simulationsumgebung für [[Hardwarebeschreibungssprachen|HDL]]s. Diese erlaubt die taktsynchrone oder timinggenaue Simulation von digitalen Logikelementen. Anders, als reine Logiksimulatoren erlaubt Modelsim auch das Berechnen und Darstellen von Analogwerten, da Integer und Dezimaltypen intern als normale Variablen (Real) gehandhabt werden. Somit lassen sich auch analoge Modelle verwenden, wenn man sie zuvor in eine gerasterte digitale Darstellung (Signalbus oder Integer) überführt.&lt;br /&gt;
&lt;br /&gt;
=Versionen=&lt;br /&gt;
==Kommerzielle Versionen ==&lt;br /&gt;
Derzeit werden folgende Versionen von ModelTech vertrieben:&lt;br /&gt;
* ModelSim SE (Special Edition)&lt;br /&gt;
* ModelSim LE (Linux Edition) &lt;br /&gt;
* ModelSim PE (Personal Editon)&lt;br /&gt;
* ModelSim Designer&lt;br /&gt;
&lt;br /&gt;
SE ist dabei die leistungsfähigste Version und auch für Unix sowie 64bit-Systeme verfügbar. Die Linux Edition (LE) kann kein VHDL (nur Verilog HDL, 07/2008) und die Personal Edition arbeitet nur mit 40% der Geschwindigkeit von SE und enthält z.&amp;amp;nbsp;B. keinen Optimizer (vopt). Der Designer entspricht ungefähr der PE-Version und besitzt die Möglichkeit VHDL per Schaltplan zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Vergleichen lassen sich die Versionen direkt auf der [http://www.model.com/products/products_comparison.asp ModelTech-Seite]. Zu Einschränkungen/ Geschwindigkeit der Xilinx Edition (XE) bzw. XE Starter siehe auch folgenden [http://www.mikrocontroller.net/topic/58551#454480 Forumsbeitrag].&lt;br /&gt;
&lt;br /&gt;
==Freie Versionen ==&lt;br /&gt;
Eine kostenlose Simulationsumgebung für Xilinx Bausteine ist z.&amp;amp;nbsp;B. im ISE WebPack als ModelSim XE III Starter enthalten, das kostenlos bei [http://www.xilinx.com Xilinx] erhältlich ist. Sie simuliert bei mehr als 10000 Codezeilen nur noch mit geringerer Geschwindigkeit (siehe [http://www.xilinx.com/support/answers/8078.htm Xilinx-Answer Record]). Für die Alteraumgebung, gibt es mittlerweile ebenfalls eine kostenlose &amp;quot;Altera Web Edition&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Tips und Tricks=&lt;br /&gt;
==Unter Modelsim XE Altera Bauteile simulieren==&lt;br /&gt;
Für die Simulation Altera-spezifischer Bausteine wie BRAM, DDR, IOs, PLL werden die Libraries von Altera benötigt, die eingebunden werden müssen.&lt;br /&gt;
&lt;br /&gt;
Dazu die Modelsim Altera Version downloaden und installieren, das Verzeichnis Modelsim ae/altera nach modelsim xe/altera kopieren und die INI-Datei im Modelsim_xe verzeichnis folgendermassen erweitern:&lt;br /&gt;
&lt;br /&gt;
[Library]&lt;br /&gt;
*std = $MODEL_TECH/../std  &lt;br /&gt;
*ieee = $MODEL_TECH/../ieee&lt;br /&gt;
*verilog = $MODEL_TECH/../verilog&lt;br /&gt;
*vital2000 = $MODEL_TECH/../vital2000&lt;br /&gt;
*std_developerskit = $MODEL_TECH/../std_developerskit&lt;br /&gt;
*synopsys = $MODEL_TECH/../synopsys&lt;br /&gt;
*modelsim_lib = $MODEL_TECH/../modelsim_lib&lt;br /&gt;
*lpm = $MODEL_TECH/../altera/vhdl/220model&lt;br /&gt;
*alt_vtl = $MODEL_TECH/../altera/vhdl/alt_vtl&lt;br /&gt;
*altera_mf = $MODEL_TECH/../altera/vhdl/altera_mf&lt;br /&gt;
*altgxb = $MODEL_TECH/../altera/vhdl/altgxb&lt;br /&gt;
*cyclone = $MODEL_TECH/../altera/vhdl/cyclone&lt;br /&gt;
*sgate = $MODEL_TECH/../altera/vhdl/sgate&lt;br /&gt;
&lt;br /&gt;
Modelsim_xe starten, die neu hinzugekommenen Libraries rekompilieren&lt;br /&gt;
&lt;br /&gt;
==Farben==&lt;br /&gt;
===Schriftfarbe beim Waveform Print Postscript ändern===&lt;br /&gt;
Bsp Schwarz in der .ps Datei 0.5 0.5 0.5 durch 0.0 0.0 0.0 ersetzen.&lt;br /&gt;
&lt;br /&gt;
===Waveform===&lt;br /&gt;
Viele wissen nicht, daß man sowohl den Namen als auch den Graphen eines Signales einfärben kann. (Eigenschaften). So wird die Darstellung erheblich verbessert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simulation von Speicherinhalten von Quartus unter Modelsim==&lt;br /&gt;
Der Inhalt des Speichers muss im Intel hex Format vorliegen.&lt;br /&gt;
Falls dies nicht der Fall ist müssen folgende Schritte durchgeführt werden:&lt;br /&gt;
* Quartus öffnen&lt;br /&gt;
* Speicher Datei öffnen (mif)&lt;br /&gt;
* Datei/speichern unter.. &lt;br /&gt;
** hex als Dateiendung wählen&lt;br /&gt;
* Hinweis: Dateiname und Endung immer klein schreiben!!!&lt;br /&gt;
&lt;br /&gt;
Im Design muss noch die File Endung von mif in hex geändert werden.&lt;br /&gt;
* init_file =&amp;gt; &amp;quot;prog.hex&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
Der Speicherinhalt kann unter View/debug/memory angeschaut werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crash==&lt;br /&gt;
Falls in der &#039;&#039;vish_stacktrace.vstf&#039;&#039; nach dem Crash sowas drin steht:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exception c0000005 has occurred at address 10229069. Traceback:&lt;br /&gt;
# 0    0x10229069: &#039;TkWinGetDrawableDC + 0x9&#039;&lt;br /&gt;
# 1    0x1022918d: &#039;XCopyArea + 0x3d&#039;&lt;br /&gt;
# 2    0x10275e25: &#039;Tk_CreatePhotoImageFormat + 0x2e25&#039;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dann könnte es am /3GB-Switch von Windows XP liegen (boot.ini).&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bildergalerien&amp;diff=53756</id>
		<title>Bildergalerien</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bildergalerien&amp;diff=53756"/>
		<updated>2010-12-22T18:09:35Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Klammer eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier sind die Bildergalerien einiger netter Threads aufgelistet.&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/91350 Elektronikphotos]; [http://www.mikrocontroller.net/topic/91350]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/15027 Eure Basteltische]; [http://www.mikrocontroller.net/topic/15027]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/91509 Kätzchenthread, Vorsicht Nonsense]; [http://www.mikrocontroller.net/topic/91509]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/136702 Zeigt her eure Kunstwerke]; [http://www.mikrocontroller.net/topic/136702]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/114555 EAGLE 3D - zeigt eure Projekte]; [http://www.mikrocontroller.net/topic/114555]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/111726 Adapter, quick &amp;amp; dirty]; [http://www.mikrocontroller.net/topic/111726]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/156661 Brauche Hilfe beim Bau einer Uhr]; [http://www.mikrocontroller.net/topic/156661]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/gallery/75486 Früher waren Layouter noch Künstler]; [http://www.mikrocontroller.net/topic/75486]&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=50272</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=50272"/>
		<updated>2010-08-30T16:08:16Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* I/O Anschlüsse */ Link zu Verilog eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich [[FlipFlop]]s (FF) und davor geschalteten Logikelementen. Diese Logikelemente sind entweder Verschaltungen verschiedener Logikgatter (Actel) oder aber kleine LUTs (LUT = Lookup-Table), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die [[FlipFlop]]s dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch [[Speicher#SRAM | SRAM]]-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen [[Speicher#Flash | Flash-ROM]]-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zur Betriebsbereitschaft.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf [[Speicher#EEPROM | EEPROM]]-, [[Speicher#Flash | Flash]]-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards. Üblich sind verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 4 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung.&lt;br /&gt;
&lt;br /&gt;
Ebenso können FPGA-interne Pull-Up und Pull-Down-Widerstände zugeschaltet werden, [[Wellenwiderstand | Terminierung]] wird ebenfalls unterstützt. Zudem befinden sich hinter vielen IO-Pads sog. [[Boundary_scan| Boundary Scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des [[Verilog]]/[[VHDL]] Codes mit angegeben werden.&lt;br /&gt;
&lt;br /&gt;
[[Ausgangsstufen Logik-ICs | Tristatebuffer]] werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand &amp;quot;Z&amp;quot; zugewiesen wird. Alternativ kann er explizit als Komponente eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der [[JTAG]]-Schnittstelle z.&amp;amp;nbsp;B. die Pins zum Einlesen der Konfigurationsdaten. &lt;br /&gt;
&lt;br /&gt;
Ferner sind einige wenige Pins (2 - 8) zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen müssen diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken direkt auf Taktnetze / PLLs.&lt;br /&gt;
&lt;br /&gt;
Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1000 I/Os, die kleinsten bieten ca. 80 User-I/O. Oft werden nur [[IC-Geh%C3%A4useformen#BGA|BGA]] und [[IC-Geh%C3%A4useformen#QFP|QFP]] Gehäuse (bis ca. 240(?) Pins) angeboten.&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Funktionsblöcke ===&lt;br /&gt;
&lt;br /&gt;
Neben den einfachen FlipFlops beinhalten FPGAs darüber hinaus komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente (LEs), die es gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Für rechenintensive Designs, z.&amp;amp;nbsp;B. in der Signalverarbeitung, enthalten viele FPGAs &#039;&#039;&#039;Multiplizierer&#039;&#039;&#039; direkt auf dem Chip, die in einem einzigen Taktzyklus Multiplikationen durchführen können.&lt;br /&gt;
&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren &#039;&#039;&#039;RAM&#039;&#039;&#039;-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport [[Speicher#BRAM | RAM-Blöcke]] von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung spezieller Takte sind &#039;&#039;&#039;PLL&#039;&#039;&#039;s (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen mit dem selben Ziel &#039;&#039;&#039;DLL&#039;&#039;&#039;s (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere erzeugt werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt geteilt werden oder ein Signal gleicher Frequenz, aber um eine halbe, viertel usw. Periode verschoben erzeugt werden. Typische Anwendungen sind die Ansteuerung von [[Speicher#DDR-RAM | DDR-RAMs]] oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
&lt;br /&gt;
Programmierbare Prozessoren sind auch bei FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen auch deutlich einfacher zu entwickeln. Insbesondere bei sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird man gerne auf eine klassische CPU zurückgreifen. &lt;br /&gt;
&lt;br /&gt;
Manche FPGAs integrieren dazu einen oder mehrere Prozessorkerne (z. B. [[AVR]] bei Atmels FPSLIC oder PowerPC bei Xilinx&#039; Virtex) als &#039;&#039;HardCores&#039;&#039; auf einem IC.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite gibt es auch [[FPGA Soft Core | SoftCores]] (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com ACTEL]), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig instanziiert werden. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039;. &lt;br /&gt;
 &lt;br /&gt;
Teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil optimiert auf die FPGAs einzelner Hersteller. Auch auf vergleichsweise &lt;br /&gt;
kleinen aktuellen FPGAs kann man problemlos eine 32bit-RISC-CPU integrieren.&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen [[Speicher#BRAM | RAM-Blöcke]] oder externe [[Speicher]] (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
&lt;br /&gt;
Die maximale „Geschwindigkeit“ eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen, möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-600 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich dann reale Systemtaktfrequenzen von meist 10-100 MHz für global operierende Einheiten und bis zu 300 MHz für schnelle lokale Module. Maßgeblich ist in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.&amp;amp;nbsp;B. zeitkritische Pfade entschärfen (Pipelining), sodass die Frequenz des Chips angehoben werden kann und somit der effektive Datendurchsatz erhöht wird, mit dem Nachteil der gesteigerten Latenz durch das Mehr an Takten. Der Datendurchsatz lässt sich darüber hinaus durch die Nutzung paralleler Architekturen verbessern.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann-, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt von 20 MHz lassen sich z.&amp;amp;nbsp;B. 18-Bit AD-Wandler auslesen, die so z.&amp;amp;nbsp;B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.&amp;amp;nbsp;B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen etwa 10-30% weniger Taktgeschwindigkeit bei gleichem Design zu erwarten als bei den großen Brüdern der Virtex- (Xilinx) bzw. Stratix-Familie (Altera). Es muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, langsamere Logikelemente). Dafür sind sie sehr preiswert.&lt;br /&gt;
&lt;br /&gt;
Funktionstechnisch identische Chips werden oft in zwei oder mehr Geschwindigkeitsklassen (speed grades) angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-10% höhere Taktung zwischen zwei speed grades erwarten.&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
&lt;br /&gt;
Die größten Hersteller von FPGAs sind [http://www.altera.com Altera] und [http://www.xilinx.com Xilinx]. Weitere Hersteller sind [http://www.latticesemi.com/ Lattice], [http://www.actel.com Actel] und [http://www.atmel.com Atmel].&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau komplizierter, applikationsnaher Strukturen wird meist durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer logischen, funktionellen Beschreibung der Architektur in einer Hardwarebeschreibungssprache wie z.&amp;amp;nbsp;B. VHDL &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung in [[VHDL]] gelingt ihrerseits z.&amp;amp;nbsp;B. mit VHDL-generierenden Werkzeugen, mittels derer zuvor Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert wurden.&lt;br /&gt;
&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits und die Entkoppplung von applikationsorientierter Beschreibung sowie Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi als Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplett nutzbare Schaltungen wie serielle Bausteine, RAM-Controller und vieles mehr als Open Source zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsboards und Starterkits ==&lt;br /&gt;
=== Boards für Xilinx-FPGAs ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;fpgaevalboards&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichn.&lt;br /&gt;
! Preis (&amp;amp;euro;)&lt;br /&gt;
! FPGA&lt;br /&gt;
! RAM (MByte)&lt;br /&gt;
! Flash (MByte)&lt;br /&gt;
! USB&lt;br /&gt;
! Ethernet&lt;br /&gt;
! RS-232&lt;br /&gt;
! µC&lt;br /&gt;
! Eingabe&lt;br /&gt;
! sonst.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.knjn.com/board_Xylo.html Xylo-L]&lt;br /&gt;
| 130&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| 10base-T&lt;br /&gt;
| -&lt;br /&gt;
| LPC213x&lt;br /&gt;
| -&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xilinx.com/s3estarter Spartan3e Starter Kit]&lt;br /&gt;
| 180&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| 64 MB DDR-SDRAM&lt;br /&gt;
| 16&lt;br /&gt;
| (JTAG)&lt;br /&gt;
| 10/100&lt;br /&gt;
| 2x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 1 Drehgeber, 4 Schalter&lt;br /&gt;
| Coolrunner CPLD, LCD, 3-Bit VGA, PS/2&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=S3BOARD Digilent Spartan-3]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA, PS/2, 7seg&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys]]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 16&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| 7seg, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys 2]]&lt;br /&gt;
| 121&lt;br /&gt;
| XC3S500E/1200E&lt;br /&gt;
| 16&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| Cypress FX2 &lt;br /&gt;
| 4 Taster, 8 Schalter, 8 LEDs&lt;br /&gt;
| 4x7Seg, Programmierung &amp;amp; Stromversorgung über USB oder über Netzteil (5V-15V)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uxibo.de Uxibo]&lt;br /&gt;
| 88&lt;br /&gt;
| XC2S200E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA I/O, Videomux, dual PS/2, 7seg, Buzzer, IOs auf Pinleisten, dual-channel FTDI2232C, 48 MHz + prog. Oszillator, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fpgaz.com/wiki/doku.php?id=fpgaz:usbp:hw FPGAz USBP]&lt;br /&gt;
| $135&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Cypress FX2&lt;br /&gt;
| 2 Taster&lt;br /&gt;
| 8 LEDs, I2C-EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys.com/fpga/spartan/efm01_de.html EFM 01] Embedded FPGA Modul &lt;br /&gt;
| ~173,-&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| -&lt;br /&gt;
| 28 x 44mm, 50 I/O auf 2.54mm Stiftleiste, WIN und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://shop.trenz-electronic.de/catalog/product_info.php?products_id=456 Avnet Spartan 3A Evaluation Kit]&lt;br /&gt;
| 50&lt;br /&gt;
| XC3S400A&lt;br /&gt;
| -&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| WIN und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ct-lab.de FPGA-Karte aus dem c´t-Lab]&lt;br /&gt;
| 92&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| SD-Kartenslot (Bitstream-File wird über µC ins FPGA geladen, Dateiauswahl via Systembus oder Panel oder fest einstellbar)&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| ATmega644&lt;br /&gt;
| optionales Bedienpanel mit LCD-Display, Drehgeber und Taster&lt;br /&gt;
| Bestandteil des Laborsystems c´t-Lab der Zeitschrift c´t.&lt;br /&gt;
VGA-Buchse, SD-Kartenslot (u.a. auch zum Laden des FPGA). Preis für FPGA-Platine mit verlöteten SMD-Bauteilen und Teilesatz. Optionale Erweiterungskarten mit schnellen DACs, Eingangskomparator, SRAM, Echtzeituhr, PS/2, RS232 (am FPGA). Optionaler JTAG-Adapter. &lt;br /&gt;
http://www.ct-lab.de, http://www.segor.de, http://thoralt.ehecht.com/phpbb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Raggedstone 1 - Spartan-3 Development PCI-Karte ====&lt;br /&gt;
* Spartan-3 FPGA FG456-Package&lt;br /&gt;
* 32 bit, 33 MHz, 3.3/5V PCI interface&lt;br /&gt;
* 4Mbit Flash Memory&lt;br /&gt;
* 16KBit serielles EEprom&lt;br /&gt;
* 4 x 7 Segment Anzeigen LED, abnehmbar&lt;br /&gt;
* LM75 Temperatursensor&lt;br /&gt;
* viele DIL-Header für eigene Erweiterungen, verschiedene werden auch durch Hersteller angeboten&lt;br /&gt;
* 2 Drucktaster&lt;br /&gt;
* Mit dem PCI-Interface kann bei entsprechender Programmierung des FPGA auf den PCI-Bus eines Hostrechners zugegriffen werden, Beispieldesign unter http://projects.varxec.net/raggedstone1&lt;br /&gt;
* Webseite: http://www.enterpoint.co.uk/moelbryn/raggedstone1.html&lt;br /&gt;
* Preis mit XC3S400 ca. €145,- (inkl MwSt.)&lt;br /&gt;
* Preis mit XC3S1500 ca. €255,-  (inkl. MwSt.)&lt;br /&gt;
&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Xilinx-Version direkt mit ISE Webpack nutzbar&lt;br /&gt;
* Xilinx XC3S1000-4FG456C, wahlweise aber auch mit Altera EP1C12F324C8 (s.u.)&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Listenpreis $99,- Endpreis: ~150 Euro (inkl. MwSt. und Versand)&lt;br /&gt;
&lt;br /&gt;
==== Trenz-Electronic ====&lt;br /&gt;
http://www.trenz-electronic.de/products.html&lt;br /&gt;
* Kleines FPGA Board mit ucLinux und Virtex-II PowerPC, optional: ucLinux und Microblaze Softprozessor im Spartan-3 FPGA&lt;br /&gt;
* Spartan-3 FPGA Mikromodul mit 200K bis 1000K Systemgattern&lt;br /&gt;
* Pal/Gal kompatible FPGA und CPLD Module&lt;br /&gt;
&lt;br /&gt;
==== Simple-Solutions ====&lt;br /&gt;
http://www.simple-solutions.de/de/products/index.php&lt;br /&gt;
Mehrere Spartan3-FPGAs - Boards&lt;br /&gt;
&lt;br /&gt;
==== CESYS ====&lt;br /&gt;
http://www.cesys.com&lt;br /&gt;
&lt;br /&gt;
Cesys ist Entwickler und Hersteller von FPGA-boards mit Sitz in Deutschland.&lt;br /&gt;
&lt;br /&gt;
* Verschiedene FPGA boards mit USB, PCI und PCIe Schnittstellen im Lieferprogramm&lt;br /&gt;
* Je nach Ausführung mit Spartan-2/3/3E/6, Virtex2/2PRO/4&lt;br /&gt;
* verschiedene Speicherkonfigurationen (SO-DIMM, SRAM, SDRAM, DDR2)&lt;br /&gt;
* Auftragsentwicklungen nach Kundenwunsch möglich&lt;br /&gt;
&lt;br /&gt;
=== Boards für Altera-FPGAs ===&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* * Wahlweise mit Altera EP1C12F324C8 oder Xilinx XC3S1000-4FG456C&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Endpreis: ~150 Euro (inkl. MwSt. und Versand)&lt;br /&gt;
&lt;br /&gt;
==== Terasic TREX C1 Multimedia Development Kit ====&lt;br /&gt;
* Altera EP1C6Q240C8 &amp;amp; EP1S Serial Configuration Device&lt;br /&gt;
* Built-in USB Blaster programming circuitry (JTAG and AS mode)&lt;br /&gt;
* 1 MiB Flash Memory &amp;amp; 8 MiB SDRAM (1M x 4 x 16)&lt;br /&gt;
* CF Card Socket, 16-bit CD-quality Audio DAC&lt;br /&gt;
* TV Encoder, VGA, RS-232, PS/2, and more&lt;br /&gt;
* Many reference designs and C++ applications&lt;br /&gt;
* [http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;amp;CategoryNo=39&amp;amp;No=14 www.terasic.com.tw]&lt;br /&gt;
* fertiger Core eines CPC6128 (8-Bit Homecomputer von 1984) für dieses Board, inlusive Sourcecode (eigener Z80 in AHDL, mit 24MHz eingesetzt): [http://www.symbos.de/trex.htm http://www.symbos.de/trex.htm]&lt;br /&gt;
* Listenpreis $149,-&lt;br /&gt;
&lt;br /&gt;
==== Altera Cyclone II 2C20 ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C7N FPGA mit 20000 LEs&lt;br /&gt;
* USB-BlasterTM download cable (integriert)&lt;br /&gt;
* EPCS4 serial configuration Flash&lt;br /&gt;
* 8-Mbyte SDRAM, 512-Kb SRAM, 4-Mbyte flash &lt;br /&gt;
* externer SMA - Clock-Eingang&lt;br /&gt;
* 24-bit Audio coder/decoder (CODEC) &lt;br /&gt;
* 10 Schalter, 4 Druckknöpfe inkl Reset &lt;br /&gt;
* 4St. 7-Segmentanzeigen, 10 rote LEDs + 8 grüne LEDs&lt;br /&gt;
* VGA, RS-232, and PS/2 Stecker&lt;br /&gt;
* Zwei 40-pin expansion ports + SD/MMC socket&lt;br /&gt;
* USB-Kabel, externes Steckernetztteil, CD-Rom&lt;br /&gt;
* Reference designs&lt;br /&gt;
* Qartus II Web Edition + NIOS II Web Edition&lt;br /&gt;
* http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html&lt;br /&gt;
* Listenpreis $150,-&lt;br /&gt;
&lt;br /&gt;
==== Hpe Mini AC II - Altera Cyclone board von Gleichmann Research ====&lt;br /&gt;
* Altera Cyclone II EP2C35 FPGA (speed grade 6)&lt;br /&gt;
* Mit reprogrammierbarem Flash zur automatischen FPGA-Konfiguration&lt;br /&gt;
* 25 pin SUB-D connector (parallel) für direktes FPGA-Programmieren&lt;br /&gt;
* RS232 (9 pin SUB-D) &lt;br /&gt;
* VGA (15 pin SUB-D) mit 64 möglichen Farben&lt;br /&gt;
* Ethernet 10/100 Mbit/s, full/half duplex&lt;br /&gt;
* 1 USB 2.0 compatible full-speed target connector&lt;br /&gt;
* 3 USB 2.0 compatible full-speed host connectors&lt;br /&gt;
* Santa Cruz connector mit 40 nutzbaren I/Os&lt;br /&gt;
* Audio interface (line-in and line-out) mit CODEC&lt;br /&gt;
* SODIMM144 Sockel für (SDRAM) 256MB&lt;br /&gt;
* SDRAM-Speichersockel mit nur 32-Bit angebunden, die Hälfte des Speichers bleibt nicht nutzbar&lt;br /&gt;
* 25 MHz oscillator&lt;br /&gt;
* Prototyping area, Lötfläche&lt;br /&gt;
* 8 LEDs, grün, blau, 3x4 key matrix, 4-bit DIP switch&lt;br /&gt;
* LCD connector, 2-character 7-segment display&lt;br /&gt;
* Single step Knopf und Reset Knopf&lt;br /&gt;
* Parallelportkabel für PC&lt;br /&gt;
* Beispieldesign, Testprogramme, Datenblätter&lt;br /&gt;
* LEON3-CPU Design inkl. Source Code, Quartus IDE, SnapGear Linux&lt;br /&gt;
* Je nach Ausführung des Flashs €399,- bis €499,-&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2 - Development and Education Board ====&lt;br /&gt;
* Altera Cyclone II 2C35 FPGA mit 35000 LEs&lt;br /&gt;
* Altera Serial Configuration devices (EPCS16) für Cyclone II 2C35&lt;br /&gt;
* USB Blaster board zur Programmierung und User API&lt;br /&gt;
* 8 MB SDRAM, 4 MB Flash Memory, 512KB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, Ethernet, 10-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* Viele Besipiel mit Source Code wie TV, SD Music Player)&lt;br /&gt;
* [http://www.fh-wedel.de/fileadmin/mitarbeiter/bos/files/VHDL/VhdlEinfuehrung.pdf Kleines aber nettes Tutorial zum Altera DE2 Dev. Board]&lt;br /&gt;
* Listenpreis US $495,-&lt;br /&gt;
&lt;br /&gt;
==== Cyclone III embedded Development Kit====&lt;br /&gt;
* Altera Cyclone III EP3C25 FPGA&lt;br /&gt;
* 640x480 LCD Display mit touch screen function&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* Audio Interface ADC CODEC&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstelle&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* NIOS II EVAL Lizenz&lt;br /&gt;
* IP LIB Altera&lt;br /&gt;
* Listenpreis US $495,-  über ALtera Webseite&lt;br /&gt;
* Bei EBV €349,- inkl. MwSt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== NanoBoard-NB1 von Altium ====&lt;br /&gt;
* kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Unterstützt eine breite Palette von Ziel-FPGAs durch Aufsteckplatinen &lt;br /&gt;
* Altera Cyclone (EP1C12-Q240C7) Aufsteckplatine enthalten &lt;br /&gt;
* Xilinx Spartan IIE (XC2S300E-PQ208) im Lieferumfang enthalten &lt;br /&gt;
* Enthält Stromversorgung mit verschiedenen Steckern für unterschiedliche Konfigurationen &lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* NanoBoard-NB1 Reference-Handbuch zur Hardware &lt;br /&gt;
* Peripherie: LCD, LEDs, Dip-Schalter, Tastenblock, Summer, ADC/DAC, 256K x 8 RAM, 8 MiB Serial Flash RAM, on-board Serial Flash RAM für FPGA-Konfig.&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, CAN, VGA, I2C, IO Stecker für allg. Zwecke &lt;br /&gt;
* Upgradefähige NanoBoard Controller Firmware &lt;br /&gt;
* Stabiler NanoBard-Sockel&lt;br /&gt;
* Listenpreis €995,-&lt;br /&gt;
&lt;br /&gt;
=== Boards für Lattice-FPGAs ===&lt;br /&gt;
==== www.hardware-design.de ====&lt;br /&gt;
* bietet verschiedene einfache Boards mit Lattice-Bausteinen an&lt;br /&gt;
* FPGA-Board mit XP2-17/XP2-8/XP2-5 -&amp;gt; 113,- bis 101,- Euro&lt;br /&gt;
* CPLD-Boards u.a. mit MachXO640 -&amp;gt; 89,- Euro&lt;br /&gt;
&lt;br /&gt;
=== Debugging-Hilfen ===&lt;br /&gt;
Gerade beim [[Debugging]] größerer FPGA-Designs ist es oft notwendig, auf interne Signale und Busse zuzugreifen, die aus routing- oder Platzgründen nicht an Pins des FPGAs gelegt - und mit konventionellen Analysatoren beobachtet werden können. Nebst den einschlägigen Tools der Hersteller, welche Signal probing über JTAG gestatten (z.&amp;amp;nbsp;B. ChipsScope und SignalTap), werden in FPGAs oft mehr oder weniger komplexe [[Logic Analyzer]] integriert, welche die internen Signale in vielfältiger Weise aufzeichnen. Diese werden in Block-RAMs oder FIFOs gespeichert und durch externe Master ausgelesen. Hier kommen auf der Platine befindliche MCUs oder fremd zugreifende FPGAs / CPUs in Betracht, welche über unterschiedliche Kommunikationsverbindungen (seriell, parallel, LVDS) angeschlossen sind. Dazu werden in die FPGAs entsprechende Cores / Treiber eininstanziiert.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
====Proprietärer serieller Logic Analyzer ====&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist die direkte Instanziierung eines Blockrams als FIFO mit &amp;quot;breitem&amp;quot; Busanschluss: Linksseitig besitzt das FIFO eine Breite von z.&amp;amp;nbsp;B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface oder einen 1 Bit breiten Anschluss für ein serielles streaming interface. Mit einem FiFo-enable können die zu sampelnden Zeiten (Busphasen) festgelegt werden, z.&amp;amp;nbsp;B. anhand eines Kriteriums wie die Erfüllung einer bestimmten mathematischen Bedingung, die man in VHDL formuliert, oder es wird einfach ein Trigger gesetzt. Solange das FiFo nicht voll ist, kann geschrieben werden, was durch die interne FiFo-Verwaltung selbst bereits komplett geregelt wird.&lt;br /&gt;
&lt;br /&gt;
Beim einfachen seriellen Logic Analyzer benötigt man nur noch einen kleinen Core, der permanent das FiFo liest, und den seriellen Overhead (Startbit, Stoppbit, Parity und gfs CRC) hinzufügt. Mit einem einfach Pegelwandler kann so ein PC direkt angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Auch denkbar ist die Anbindung an ein fremdes FPGA-board mit viel Speicher über (LV-)DS-Kommunikation. In komplexeren Systemen wird ein CAN- oder USB-Core eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn mittels des Kriteriums nur ganz bestimmte kritische Phasen herausgesampelt werden (z.&amp;amp;nbsp;B. das Auftauchen eines bestimmten Rechenfehlers im FPGA) und so das Datenaufkommen je Zeiteinheit über längere Zeit betrachtet eher gering ist, kann bei geeignetem Datendurchsatz in Echtzeit dauerhaft mitprotokolliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== BusProbe, der Debugging Core von abaxor engineering  ====&lt;br /&gt;
Mit der BusProbe kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Plugging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
[http://www.abaxor.de/produkte.html abaxor.de-Webseite]&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator von sump.org====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder internes RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigenen einstellen und an anderen mitarbeiten. U.a. gibt es verschiedene CPUs für FPGAs.&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm John&#039;s FPGA Page]&lt;br /&gt;
* [http://www.embedded.com/columns/whatsnew/197003073 More about designing with embedded FPGAs] by Bernard Cole, Embedded.com&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=49600</id>
		<title>AVR Softwarepool</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=49600"/>
		<updated>2010-07-29T14:46:22Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* DMX */ Programmiersprache ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die interessantesten Softwareprojekte aus der Codesammlung...&lt;br /&gt;
&lt;br /&gt;
(A)  ... Projekt ist in &#039;&#039;&#039;Assembler&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C)  ... Projekt ist in &#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(B)  ... Projekt ist in &#039;&#039;&#039;Bascom&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(PC) ... Projekt ist nicht für einen µC, sondern für den PC&lt;br /&gt;
&lt;br /&gt;
==1-Wire==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14792  DS1820, DS18B20 in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6505 Mehrere DS1820/DS18B20 auslesen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Mehrere DS1820/DS18B20/DS18S20/DS1822 über einen Webserver auslesbar]&lt;br /&gt;
&lt;br /&gt;
==Akkulader==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72627#594587 Bleiakku-Lader 12/24V]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
&lt;br /&gt;
==Bootloader==&lt;br /&gt;
* (A,C,PC) [http://www.mikrocontroller.net/topic/12181#79866 AVR Bootloader]&lt;br /&gt;
* (A, PC) [http://www.mikrocontroller.net/topic/146638#1364260 AVR Bootloader für GCC-Toolchain]&lt;br /&gt;
* (A,PC) [http://www.mikrocontroller.net/topic/95839 AVR Bootloader mit Verschlüsselung]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72308#591159 ATtiny45 Bootloader]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader für ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/56818#439359 SD/MMC Card Bootloader (passt in 2kb bootsection)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/61170#480765 boofa - Bootloader für AVR über UART (AVR109)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53130#413058 Bootloader ATmega168]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/73196#600293 UART Bootloader ATtiny13 - ATmega644]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/150816#1414460 UART Bootloader AtMega644P @ 20MHz] (Eclipse Projekt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Bootloader]]&lt;br /&gt;
&lt;br /&gt;
==DCC==&lt;br /&gt;
&lt;br /&gt;
(Digital Command Control, Standard zur digitalen Steuerung von Modelleisenbahnen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31397#241300 DCC Decoder]&lt;br /&gt;
&lt;br /&gt;
==DCF77==&lt;br /&gt;
&lt;br /&gt;
(Zeitsignaldienst für funkgesteuerte Uhren auf der Langwellen-Frequenz 77,5 kHz)&lt;br /&gt;
 &lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38914#287867 DCF77 AVR-Assemblerbaustein ]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6500#41738 DCF77-Uhr mit ATTINY12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31385#241104 DCF Digital Empfangsmodul - Korrelation - (Assembler)ATmega8 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25071#186286 DCF 77 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14788#101528 DCF-Uhr mit DotMatrix-Anzeige für avr-gcc]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12154#79501 PC DCF Timer ( PC Zeitschaltuhr)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25116#187197 DCF 77 Uhr mit CodeVision ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/58769#456232 DCF77 Uhr in C mit ATtiny26]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48597#372164 DCF77 Uhr, zum X.ten Mal, jetzt mit SAF]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 DCF77 mit beliebig gepoltem Eingangssignal innerhalb eines Webservers]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/121049 DCF-Uhr, Sonnenstand, TWI-Port, Alarmfunktion für Atmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/151260#1419218 DCF77 Uhr 7 Segment LED ATmega8 Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/168807#1614129 DCF-Uhr mit LCD in C]&lt;br /&gt;
&lt;br /&gt;
== DRAM ==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/25053#186085 2MB DRAM an AVR] und Anwendung als [http://www.mikrocontroller.net/topic/25053#186089 Audiorekorder]&lt;br /&gt;
&lt;br /&gt;
==Drehgeber==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6526#41978 Drehgeber auslesen]&lt;br /&gt;
&lt;br /&gt;
==DTMF==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/92444#792954 DTMF dekodieren]&lt;br /&gt;
&lt;br /&gt;
==DMX==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/92350#new 20 Kanal Relaissteuerung per DMX]&lt;br /&gt;
&lt;br /&gt;
==Entwicklungssysteme==&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/74198#611404 AVR Code Wizard]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/30110#230503 Multitasking kernel für ATtinys in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/65156#521012 BASIC-Computer mit ATmega32]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/64129#511368 AVR TinyBASIC Anpassung für ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/59189#460273 Mini-Computer mit BASIC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/55807 Forth System für ATmegas in Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94193 Forth-Computer mit ATmega32 und Videoausgabe] von Christian Berger&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62500#493931 Fixpoint-Arithmetik in &amp;quot;C&amp;quot;]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/85256#717037 64 Bit float Emulator in C, IEEE754 kompatibel]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/94468#812992 Gleitkomma-Bibliothek für AVR]&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
&lt;br /&gt;
(Fast Fourier Transformation, &amp;quot;schnelle&amp;quot; Fouriertransformation)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25095#186536 FFT auf dem AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25062#186225 128point FFT in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/27001#203911 Schnelle FFT in Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131525#1191497 AVR-Lichtorgel per FFT MEGA8 32 644 ]&lt;br /&gt;
&lt;br /&gt;
==Funksteckdosen==&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 Ansteuerung von Funksteckdosen mit einem Webserver]&lt;br /&gt;
&lt;br /&gt;
==GPS==&lt;br /&gt;
&lt;br /&gt;
(Global Positioning System, satellitengestütztes System zur weltweiten Positions- und Zeitbestimmung)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48544#371717 GPS - MOUSE - MINI- NAVIGATOR (Assembler) ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/72507#593252 GPS an mega8,88 oder 168]&lt;br /&gt;
&lt;br /&gt;
==IR==&lt;br /&gt;
* siehe auch [[AVR Softwarepool#RC5|RC5]]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/162119#1545798 IRMP - Infrared Multi Protocol Decoder]&lt;br /&gt;
&lt;br /&gt;
==Kryptographie==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/73468 Verschiedene kryptographische Funktionen] &lt;br /&gt;
&lt;br /&gt;
==LANC==&lt;br /&gt;
&lt;br /&gt;
(Steuerprotokoll für Video- und Digitalfotokameras, auch als Control-L bekannt)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/40463#302754 Sony LANC Auswertung mit AVR] (Atmega 128 @ 16 MHz)&lt;br /&gt;
&lt;br /&gt;
==LEDs und LED-Anzeigen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76839#638278 Solarlicht Steuerung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/73776#606472 LED-Touch-Panel] (ARM)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/54561#421940 HSV RGB Led Dimmer, C Code &amp;amp; Video &amp;amp; Doku]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/67567#543492 Mini RGB Lichteffektgenerator mit Menü für Pic16F84]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48464#370871 Ansteuerung einer RGB LED (PWM)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/87149#737282 3x7 Segment und 1 I/O-Pin (Assembler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] (vier 7-Segmentanzeigen)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31388#241192 AVR-Lauflicht]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94746#815809 HSB-&amp;gt;RGB Umrechnung rein in Assembler, auch für ATiny]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/110168 2x7-Segment an nur 3 Leitungen]&lt;br /&gt;
* (A) [[Ambilight in Hardware]]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131525#1191497 AVR-Lichtorgel per FFT MEGA8 32 644 ]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/182305 TLC5940 16-Kanal 12bit LED Treiber ansteuern und HighPower LEDs über MosFETs treiben]&lt;br /&gt;
&lt;br /&gt;
==LCD und VFD==&lt;br /&gt;
* (C) [http://bluematrixi.bl.funpic.de/index.php/elektronik-avr/lcd-display-nokia3310 Bibliothek für Nokia 3310 Lcd Ansteuerung in &amp;quot;C&amp;quot; - sehr gut]&lt;br /&gt;
*(C,A)[http://www.mikrocontroller.net/articles/Ansteuerung_Handy_Displays Ansteuerung_Handy_Displays]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/53137#413137 Programm zum Erstellen eigener Schriftarten (LCD)]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/54860#423255 LCD Schriftarten ( Fonts in veschiedenen Größen )]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31403  The Siemens S65 132x176, 65536 color display with AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48501#371218 LCD Ansteuerung im 4bit-Modus]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48456#370782 LCD Library T6963c]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76399#633680 &amp;quot;Bessere&amp;quot; T6963c Library]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25099#186569 LCD Controller für 640x480 LCD mit mega8515]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38923#287939 LCD Controller KS0073 Support im 4-Bit Mode]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/79609#664268 KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/81793#683135 Pollin E0855-2 SED1530-Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90449#772843 LCD über nur einen IO-Pin ansteuern]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120475 VFD Library (Vacuum Fluorescent Display Library)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98321#851423 Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/140369 Menüsystem für beliebige schwarz-weiß LCDs bis 4096x4096 Pixeln und grafischem Editor]&lt;br /&gt;
&lt;br /&gt;
==I2C==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/83871#new  I2C-Master realisiert in Software, ohne TWI für alle ATMEGAs]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38919#new  RS232 &amp;lt;-&amp;gt; TWI / I2C Interface für ATMega8 (ASM) inkl. Windows Software]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67698#544930 USI TWI Master]&lt;br /&gt;
&lt;br /&gt;
==Messgeräte==&lt;br /&gt;
===Drehzahlmesser===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/1518#8469 Drehzahlmesser 4 mal 7-Segment mit 90S2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/Drehzahlmesser Drehzahlmesser mit 4 mal 7-Segment anzeigen mit Tiny2313, Wiki-Artikel]&lt;br /&gt;
&lt;br /&gt;
===Entfernungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/130834 3D Umgebungserfassung mit einem auf zwei Servors montiertem Sharp Distanzsensor, Eigenbau]&lt;br /&gt;
&lt;br /&gt;
===Frequenzmesser===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/62610#495030 Frequenzmesser bis 2Mhz -- mit AVR ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48582#372072 Frequenzmessung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62517#494146 Input Capture Pin (ICP) auslesen ( Frequenz messen)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25144#187587 Frequenzmessung und Impulszählung über den Parallelport-IR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31394#241251 einfacher 5 MHz Frequenzzähler (Assembler) ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/173665#new sehr genauer Frequenzmesser Atmega8]&lt;br /&gt;
&lt;br /&gt;
===Frequenzgenerator===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/152966#1438488 Einstellbarer Frequenzgenerator für 0.12 Hz - 8 MHz mit Atmega 8 und Bascom ]&lt;br /&gt;
&lt;br /&gt;
===Kompass===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/100239#870281 KOMPASS KMZ10A KMZ10B ATmega8 Assembler]&lt;br /&gt;
&lt;br /&gt;
===Messgeräte für elektronische Bauteile===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60797#477026 LC-METER / LC-Messgerät ATmega8 Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60591#474873 Widerstandstester]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56770#438957 Ladungsmessgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31386#241139 Transistortester]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131804#1194273 Transistortester]&lt;br /&gt;
&lt;br /&gt;
===Spannungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] - Voltmeter&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
&lt;br /&gt;
===Thermometer===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53127#413006 Thermometer mit LED &amp;amp; LM35]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Viele DS18x20-Thermometer in einem Webserver]&lt;br /&gt;
&lt;br /&gt;
===Oszilloskop===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/53129#413011 Einfaches Oszilloskop - Bascom]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48586#372093 Oszi- &amp;amp; Logikanalyser mit LCD]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31376#240880 einfaches DIGITAL- Oszilloskop (800 Datenpunkte) Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56616#437772 Einfaches &amp;quot;Oszilloskop&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
==MIDI==&lt;br /&gt;
&lt;br /&gt;
(Musical Instrument Digital Interface, Datenübertragungsstandard für Musikinstrumente)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/106512# Drum-Trigger mit MIDI-Ausgabe]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/159760#1517791 Drum-Trigger mit USB-Midi-Ausgabe]&lt;br /&gt;
&lt;br /&gt;
==MMC==&lt;br /&gt;
&lt;br /&gt;
(Multimedia Card, digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25056#186117 SourceCode MMC die Zweite]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48481#370950 MMC/SD-Karte mit FAT16 an AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader füt ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14800#102024 MMC/SD ansteuern mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/FAT32 MMC/SD - FAT16/32 Bibliothek für AVR  mit Wiki]&lt;br /&gt;
&lt;br /&gt;
==Netzgeräte==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/60786#476904 Labornetzgerät]&lt;br /&gt;
* [[RADLAB-PS1]] [http://www.mikrocontroller.net/topic/124858#1138781 Netzteil um LM317 mit Strombegrenzung und Anzeige!]&lt;br /&gt;
&lt;br /&gt;
==Netzwerk==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87517#new Kleiner ENC28J60 µWebserver von SimonK]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/82127#new Ulrich Radigs ENC28J60 mit leicht lötbaren/beschaffbaren Bauteilen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131825 Dirk Broßwick Webserver auf ENC28j60 Basis mit einem ATmega2561, es gibt auch einen Port auf das AVR-NET IO]&lt;br /&gt;
&lt;br /&gt;
==Parser==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64763#517245 Zwei Parser für numerische Ausdrücke]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76842#638283 uShell - ein universeller Parser für uCs]&lt;br /&gt;
&lt;br /&gt;
==RFID==&lt;br /&gt;
&lt;br /&gt;
(Radio Frequency Identification, Verfahren zur funkbasierten Identifizierung und Lokalisierung von Gegenständen)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
&lt;br /&gt;
==RC - Fernsteuerungen/Servos==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48529#371582 RC Summen Signal erzeugen ]&lt;br /&gt;
==RC5==&lt;br /&gt;
&lt;br /&gt;
(verbreitetes Datenübertragungsprotokoll für Infrarot-Fernbedienungen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/14789#101536 RC5 Sender auf einem Attiny11L]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12216#80856 Fernbedien RC5 Empfänger]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/59235#460765 RC5 Sender selber bauen ???]&lt;br /&gt;
&lt;br /&gt;
==Ringpuffer==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66789#536189 Ringpuffer AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
&lt;br /&gt;
==SD==&lt;br /&gt;
&lt;br /&gt;
(Secure Digital Memory Card; digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68257#550336 Datenrekorder auf SD-Karte mit mega88]&lt;br /&gt;
&lt;br /&gt;
==Sonstiges==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/111783#994358 Sonnenstandberechnung mit Atmega 8]&lt;br /&gt;
&lt;br /&gt;
==Spaßprojekte==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/119876#1083044 Miniprojekt: Lagerfeuer-LED (ATtiny25)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/167528#1601077 Toastbrote zählen]&lt;br /&gt;
&lt;br /&gt;
==Spiele==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48505#371259 Tetris auf dem AtMega8]&lt;br /&gt;
==Steuerungen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/123551 Aquarium Controller]&lt;br /&gt;
&lt;br /&gt;
==Taster / Schalter==&lt;br /&gt;
===mechanisch===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6492#41625 Tasten entprellen - Bulletproof] (siehe auch: [[Entprellung]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48465#370877 Universelle Tastenabfrage]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6491#41624 Tasten-Matrix entprellen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64731#517001 Tastenmatrix auslesen über nur 2 Leitungen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64743#517105 Tasten Entprellen für N00bs]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
===kapazitiv===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38904  Sensor mit nur einer Kontaktfläche]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25045 Einfache Sensortaste]&lt;br /&gt;
&lt;br /&gt;
==Tonerzeugung==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66945#537624 ATMEGA8 Soundgenerator/Synthesizer]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/134362 RTTTL Melodiegenerator mit ATTINY85]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25051 Melodie ausgeben mit AVR ATTiny12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
&lt;br /&gt;
==TWI==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87597#742070 AVR TWI Master und Slave Funtionen in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31404#242081 TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8]&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/75254#622120 USB Host Stack für Eingebettete Systeme (LGPL)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90791#776280 Relaiskarte für den USB Port]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/130381#1179352 USB-Stick am Mikrocontroller VNC1L]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/155241 PDIUSBD12 Treiber und micro USB-Device stack]&lt;br /&gt;
&lt;br /&gt;
==UART==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38928#287985 Software UART]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/125651#1147436 Software UART mit FIFO]&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53140#413249 AVR ASCII Video Terminal - 40 x 25 - BAS Signal]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53139#413225 TV VIDEO BILD BAS Frequenzzähler DVM Atmega8 Assembler]&lt;br /&gt;
* (A) [http://www.electronicspit.com/video/ Videosignal in Farbe aus dem ATMega32]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25091#new VGA Testbildgenerator]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101429#882288 ATmega8 erzeugt Video in C!]&lt;br /&gt;
&lt;br /&gt;
==Zeitgeber und Uhren==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/12185#80055 Die genaue Sekunde / RTC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74673#616226 LCD-Timer für Belichtungsgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/119859#1082804 DS1307 Assembler-Code]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31374#240878 AVR Library für RTC 12C887 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25136#187534 RTC DS1302 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25087#186454 RTC + Scheduler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53131#413059 Jumbo-LED Uhr]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25069 Sekunden in Zeit/Datum umwandeln (mit Sommerzeit/Schaltjahren)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/48560#371911 BASCOM Uhr mit Butterfly]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48450#370765 Countdown timer für UV Belichter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98885 Countdown Timer mit ATtiny2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Schaltuhr mit DCF77-Referenz in einem Webserver, Steuerung von Funksteckdosen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/100892#876549 Eieruhr mit ATtiny24V/ATtiny2313V]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/151236 Zeitauslöser für Casio EX F1 mit Attiny2313]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/151260#1419218 DCF77 Uhr 7 Segment LED ATmega8 Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/177688# NIXIE Uhr mit vielen Funktionen in C mit ATTiny2313]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Codesammlung Übersicht]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR| ]]&lt;br /&gt;
[[Kategorie:Forum]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Spule&amp;diff=47073</id>
		<title>Spule</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Spule&amp;diff=47073"/>
		<updated>2010-05-04T13:32:37Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Berechnungsformeln für Spulen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Spulen sind Bauelemente, welche mittels Magnetfeld Energie speichern, übertragen oder umwandeln (transformieren) können. Sie bestehen prinzipiell aus einem isolierten Draht, welcher in bestimmter Weise auf einen magnetisch wirksamen Kern aufgewickelt wurde. Sie werden in nahezu unzähligen Varianten in der Elektronik eingesetzt, von winzigen SMD-Bauteilen bis zu haushohen Transformatoren.&lt;br /&gt;
&lt;br /&gt;
== Vereinfachte Erklärung ==&lt;br /&gt;
&lt;br /&gt;
Während man sich einen Kondensator wie eine Art Lager für Elektronen vorstellen kann, und einen Widerstand wie ein mehr oder weniger enges Rohr für einen Wasserfluß, ist eine Analogie aus dem täglichen Leben für eine Spule ein Schwungrad. Man hat eine Antriebskraft, mit der man eine Achse in Bewegung setzen möchten, aber auf dieser ist ein großes Schwungrad befestigt. Damit sich die Antriebskraft in der Bewegung der Achse bemerkbar machen kann, muss das Schwungrad mit in Bewegung gesetzt werden, was nur langsam, nach und nach möglich ist, und wenn es sich einmal dreht, möchte es nach dem Beenden der Einwirkung der Antriebskraft zunächst einmal in derselben Richtung weiterlaufen, es kann nicht sofort abgebremst werden, und wenn man versucht, das drehende Schwungrad zu blockieren, wird bei diesem plötzlichen Abbremsen eine gewaltige Kraft freigesetzt.&lt;br /&gt;
&lt;br /&gt;
Eine Spule verhält sich ähnlich. Sie ist stets bestrebt, den Stromfluß aufrecht zu erhalten, sprich sie verzögert eine schnelle Änderung des Stromflusses. Soll der Strom ansteigen, muss zunächst ein Magnetfeld aufgebaut werden, das dauert je nach anliegender Spannung und Induktivität der Spule eine gewisse Zeit. Hier wird Energie gespeichert. Soll der Stromfluß abnehmen, muss das Magnetfeld erst abgebaut werden, hier wird Energie in den Stromkreis zurückgeführt.&lt;br /&gt;
&lt;br /&gt;
Diese Eigenschaft ist sehr wichtig für [[Transformatoren und Spulen]] in Schaltnetzteilen, Filtern und vielen anderen Anwendungen. Das Maß, wieviel Magnetfeld bei einem bestimmten Strom in der Spule gespeichert werden kann, wird mit dem Begriff Induktivität ausgedrückt.&lt;br /&gt;
&lt;br /&gt;
Manchmal ist eine Spule aber auch von Nachteil, wenn die nämlich ungewollt die schnelle Änderung des Stromflusses bremst. Das ist meist dann der Fall, wenn Bauteile zu lange Anschlussdrähte oder Zuleitungen haben. Hier spricht man von parasitärer Induktivität.&lt;br /&gt;
&lt;br /&gt;
== Berechnungsformeln für Spulen ==&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Formel ist die zur Definition der Induktivität. Das ist der charakteristischste Parameter einer Spule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L=\frac{U \cdot t}{I}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Diese Formel ist vor allem für die Beschreibung des elektrischen Verhaltens einer Spule mit bekannter Induktivität wichtig. Sie sagt aus, dass wenn man an eine Spule mit 1H eine Spannung von 1V für 1s anlegt, steigt der Strom um 1A (Rampenfunktion).&lt;br /&gt;
&lt;br /&gt;
D.h. die Spule integriert (sammelt) eine an ihren Klemmen anliegende Spannung und baut damit ein Magnetfeld auf. Die Folge davon ist ein Stromfluß durch die Spule. Das ist das Gegenteil eines Kondensators. Dieser integriert (sammelt) einen an seinen Klemmen eingespeisten Strom und baut damit ein elektrisches Feld auf. Die Folge davon ist eine Spannung zwischen den Klemmen.&lt;br /&gt;
&lt;br /&gt;
In praktischen Anwendungen wickelt man [http://de.wikipedia.org/wiki/Spule_%28Elektrotechnik%29 Spulen] meist auf fertige Spulenkörper mit zugehörigen Kernen. Die Induktivität berechnet sich aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L=A_L \cdot N^2&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;math&amp;gt;A_L&amp;lt;/math&amp;gt;-Wert ist der Kehrwert des magnetischen Widerstands der Spule (Der Raum um den Drahtwickel) und beinhaltet sowohl die Geometrie als auch das Material des Kerns. Er wird im Datenblatt des Kerns angegeben, kann aber ggf. auch berechnet werden. Wichtig ist zu wissen, dass die Induktivität quadratisch von der Windungszahl abhängt, d.h. bei doppelter Windungszahl erhält man die vierfache Induktivität.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Spulenauswahl ==&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Vor allem bei Schaltreglern sind folgende Daten der Spulen wichtig:&lt;br /&gt;
&lt;br /&gt;
* Induktivität&lt;br /&gt;
* Drahtwiderstand&lt;br /&gt;
* Maximaler Strom&lt;br /&gt;
* Sättigungsstrom&lt;br /&gt;
&lt;br /&gt;
==== Induktivität ====&lt;br /&gt;
&lt;br /&gt;
Die Induktivität gibt an, wie schnell sich der Strom bei einer anliegenden Spannung ändert. Üblicherweise berechnet man bei der Dimensionierung die minimale Spulengröße die notwendig ist, damit der Ripple des Stromes einen bestimmten Wert (typisch 50% des Ausgangsstroms bei einem StepDown) nicht überschreitet. Eine zu große Induktivität stört bei einem StepDown Regler meist nicht. Bei einem StepUp dagegen darf diese einen bestimmten Wert nicht überschreiten, damit der Regler die gewünschte Leistung liefern kann wie im StepUp Abschnitt beschrieben.&lt;br /&gt;
Die Induktivität ist nicht konstant, sondern ändert sich je nach vorhandenem Kern mehr oder weniger mit Frequenz oder Strom.&lt;br /&gt;
Vor allem Eisenpulverkerne weisen eine ausgeprägte Abhängigkeit der Induktivität von Frequenz und Strom ab.&lt;br /&gt;
Die Induktivität mit Nennstrom ist daher meist etwas geringer als die Induktivität ohne Stromfluss. Dies sollte bei der Spulendimensionierung beachtet werden.&lt;br /&gt;
Aufgrund der starken Stromabhängigkeit erfolgt die Angabe der Induktivität bei Spulen mit Eisenpulverkernen häufig auch bei Nennstrom. Ohne Strombelastung liegt die Induktivität etwa Faktor 1,2-2 darüber. Bei Spulen mit Ferittkern dagegen wird die Induktivität meist ohne Strombelastung spezifiziert.&lt;br /&gt;
&lt;br /&gt;
==== Drahtwiderstand ====&lt;br /&gt;
&lt;br /&gt;
Der Drahtwiderstand beeinflusst vor allem den Wirkungsgrad der Schaltung bzw. begrenzt den maximal zulässigen Effektivwert des Stromes der durch die Spule fließt. Vor allem bei StepUp Wandlern sollte man sich dem Einfluss des Spulenwiderstands bemerkbar sein: Möchte man z.&amp;amp;nbsp;B. aus 5V eine höhere Spannung erzeugen und verwendet eine Spule mit 2 Ohm die mit 0,5A angesteuert wird, dann fallen an dem Drahtwiderstand bereits 1Volt ab. Das entspricht 20% der Eingangsspannung!&lt;br /&gt;
&lt;br /&gt;
==== Maximaler Strom ====&lt;br /&gt;
&lt;br /&gt;
Der maximale Strom wird meist anhand der Erwärmung der Spule durch einen bestimmten Strom bestimmt. Oft ist dies der Punkt bei der sich die Spule um z.&amp;amp;nbsp;B. 40°C erwärmt. Häufig wird dies mit Gleichspannung gemessen oder bei einer niedrigen Frequenz deren Effektivwert angegeben wird. Bei Verwendung der Spule in einem Schaltregler reduziert sich dieser Wert daher um bis zu 50%, da einerseits der Sättigungsstrom beachtet werden muss und andererseits auch der Kern innerhalb der Spule sich auch erwärmt. Vor allem Eisenpulverkerne besitzen teilweise recht hohe Kernverluste, die bei einer üblichen Dimensionierung im gleichen Bereich wie die Verluste durch den Drahtwiderstand liegen.&lt;br /&gt;
Der Spitzenstrom darf diesen Stromwert allerdings übersteigen, solange der Effektivwert bzw. die Erwärmung im zulässigen Bereich liegt.&lt;br /&gt;
&lt;br /&gt;
==== Sättigungsstrom ====&lt;br /&gt;
&lt;br /&gt;
Der Sättigungsstrom ist fast schon das wichtigste Kriterium bei der Spulenauswahl, denn wenn dieser Wert zu gering ist, ist die Spule unbrauchbar für die Schaltung.&lt;br /&gt;
Wie bei den Induktivität schon geschrieben, ist diese mehr oder weniger abhängig vom Spulenstrom. Der Sättigungsstrom (der bei für Schaltnetzteilanwendungen gedachten Spulen immer angegeben ist), gibt meist den Strom an, bei dem die Induktivität um 10-40% gegenüber der Nenninduktivität gefallen ist. Erhöht man den Strom weiter, nimmt die Induktivität je nach Kernmaterial und mechanischem Aufbau schnell ab, eine Verringerung um den Faktor 10 ist keine Seltenheit.&lt;br /&gt;
&lt;br /&gt;
Der Sättigungsstrom wird bei einem ordentlich dimensionierten Schaltregler nie überschritten werden, da die Strombegrenzung vorher anspricht. Bei einem schlechten Design spricht die Strombegrenzung dagegen erst durch den hohen Strom an, wenn die Spule in die Sättigung geht. Dies führt nur zu unnötigen Verlusten und sollte daher vermieden werden.&lt;br /&gt;
&lt;br /&gt;
Für den MC34063 heißt dies konkret, dass der Strombegrenzungswiderstand Rsc auf einen Wert unterhalb des Sättigungsstromes dimensioniert werden muss!&lt;br /&gt;
Da die Induktivität einer Spule in der Sättigung minimal ist, kann diese auch keine weitere Energie speichern. Ein Großteil der in die Spule fließenden Energie wird daher im Drahtwiderstand in Wärme umgesetzt was den Wirkungsgrad stark reduziert und eventuell die Regelung des Schaltreglers durcheinander bringt.&lt;br /&gt;
&lt;br /&gt;
Bei einer typischen, für Schaltnetzteile entworfenen Spule, liegt der Sättigungsstrom etwa Faktor 1,5-2 über dem Nennstrom. Dies erlaubt den Nennstrom voll auszunutzen, da der Stromripple bei der üblichen Spulendimensionierung bei etwa 50% des Nennstroms, der Spitzenstrom also bei etwa 1,5x Nennstrom liegt.&lt;br /&gt;
&lt;br /&gt;
Der durch den Begrenzungswiderstand definierte Strom kann auch im Leerlauf ohne Last auftreten, geringe Last schützt also nicht vor Sättigung!&lt;br /&gt;
&lt;br /&gt;
=== Ferritkern vs. Eisenpulverringkern ===&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Energie einer Spule wird nicht direkt im Kern, sondern in einem Luftspalt des Kerns gespeichert. Daher benötigt jede Spule für ein Schaltnetzteil, welche zur Energiespeicherung genutzt wird, einen mehr oder weniger großen Luftspalt. Je größer der Luftspalt, desto mehr Energie kann die Spule speichern, allerdings benötigt man mehr Windungen um eine bestimmte Induktivität zu erreichen. Das gilt für Sperrwandler sowie Speicherdrosseln in Flußwandlern. Echte Trafos, wie z.&amp;amp;nbsp;B. im Flusswandler, dürfen möglichst keinen Luftspalt besitzen.&lt;br /&gt;
Die in Übertragern oder stromkompensierten Drosseln eingesetzten Ferritringkerne besitzen kein Luftspalt. Daher können sie kaum Energie speichern, sind daher auch nicht für Speicherdrosseln oder Sperrwandler geeignet. Dafür erreichen diese mit wenigen Windungen schnell Induktivitäten im mH Bereich, wozu andere Spulen etliche 100 Windungen benötigen.&lt;br /&gt;
Eisenpulverringkerne gehen einen anderen Weg: Hier stellen die minimalen, mit Kunststoff gefüllten Zwischenräume zwischen den einzelnen Teilchen bereits den Luftspalt dar, weshalb hier kein zusätzlicher Luftspalt erforderlich ist.&lt;br /&gt;
Die hierfür verwendeten Materialien besitzen allerdings deutlich höhere Ummagnetisierungsverluste als Ferrit, weshalb Eisenpulverringkerne üblicherweise nur für niedrige Frequenzen eingesetzt werden. Das am weitesten verbreitete Material sind die gelb-weiß markierten Ringkerne mit dem Materialcode 26. Dieses zeichnet sich vor allem durch die niedrigen Kosten aus. Der Einsatzbereich liegt entweder in Entstördrosseln für Gleichstrom- oder 50Hz Anwendungen oder in Schaltnetzteilen bis 100kHz. Für höhere Frequenzen sind auch bessere, und natürlich teurere Materialien, erhältlich.&lt;br /&gt;
Dieser Spulentyp ist vor allem für Abwärtswandler sinnvoll, da Eisenpulverkerne kein Problem mit hohen DC Strömen, allerdings mit hohen AC Anteilen aufgrund der Kernverluste haben. Da der Stromripple bei diesem Wandlertyp meist kleiner als der DC Strom ist, sind beide Bedingungen erfüllt. Allerdings sollte man beachten, dass die Induktivität einer Eisenpulverringkernspule stark von der Frequenz, dem Strom und auch vom Alter abhängig ist! Je nach Temperatur altern Eisenpulverringkerne mehr oder weniger schnell und die Spule verliert dabei an Induktivität.&lt;br /&gt;
Die Dimensionierung einer Eisenpulverringkernspule ist alles andere als einfach, da hier sehr viele Faktoren beachtet werden müssen. Die Berechnung der Kernverluste ist auch aufwendig, einige Hersteller liefern dafür aber Formeln oder Berechnungsprogramme, so wie z.&amp;amp;nbsp;B. Micrometals:&lt;br /&gt;
[http://www.micrometals.com/software_index.html Berechnungsprogramm für Eisenpulverringkerne].&lt;br /&gt;
Vor allem Anfängern wird aber von der eigenen Dimensionierung von Eisenpulverringkernspulen abgeraten. Etliche Hersteller (wie z.&amp;amp;nbsp;B. Talema) haben fertige Ringkernspulen im Programm die bei verschiedenen Anbietern auch für Normalverbraucher erhältlich sind (z.&amp;amp;nbsp;B. bei elpro, DARISUS und vielen anderen).&lt;br /&gt;
&lt;br /&gt;
=== Speicherspulen vs. Entstörspulen ===&lt;br /&gt;
&lt;br /&gt;
Nicht selten machen vor allem Anfänger den Fehler die nächstbeste Spule mit einigermaßen passender Induktivität einzusetzen, ohne darauf zu achten, dass die Spule eigentlich als Entstörspule entwickelt wurde. Dies gilt vor allem für die Funkentstördrosseln der Baureihe MESC/MISC/77A die z.&amp;amp;nbsp;B. bei Reichelt erhältlich sind. Die Schaltungen funktionieren zwar einigermaßen, allerdings ist der Wirkungsgrad deutlich geringer als er es mit einer guten Spule wäre.&lt;br /&gt;
Dies liegt vor allem am Aufbau der Spule sowie deren vorhandenem Kern. Funkentstördrosseln sind dafür ausgelegt von einem niederfrequenten Strom durchflossen zu werden und eine, im Vergleich zum Nutzstrom niedrigen Störstrom abzublocken. Dadurch entstehen kaum Verluste im Kern, da das Magnetfeld konstant ist bzw. sich durch den niederfrequenten Strom nur sehr langsam ändert. Der Kern ist also nicht dafür ausgelegt verlustarm zu sein, bzw. es ist sogar erwünscht wenn er bei hohen Frequenzen gewisse Verluste aufweist, um Resonanzen innerhalb der Spule zu verhindern. Weiterhin kommt das Problem hinzu, dass aufgrund der hohen Länge der Spule die Feldlinien außerhalb der Spule den magnetischen Kreis schließen und sich so ein deutliches Magnetfeld um die Spule herum aufbaut, diese arbeitet quasi wie eine Ferittstabantenne und erzeugt beträchtliche EMV Störungen!&lt;br /&gt;
Speziell für Schaltnetzteile ausgelegte Spulen besitzen daher nicht selten einen entsprechenden mechanischen Aufbau um die Feldlinien möglichst innerhalb bzw. sehr nahe an der Spule zu halten um diese Störungen zu minimieren.&lt;br /&gt;
&lt;br /&gt;
Besonders bei Spulen mit Eisenpulverringkernen sollte man genau nachschauen ob die Angaben für Entstöranwendungen oder für Schaltnetzteilanwendungen gelten: Hier wird oft die gleiche Spule je nach Verwendungszweck unterschiedlich spezifiziert. Dies liegt daran, dass man bei der Entstöranwendung eben kaum Verluste im Kern hat und somit aufgrund der geringeren Erwärmung der Draht von einem höheren Strom durchflossen werden kann, ohne dass er überhitzt.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele geeigneter Spulen für Schaltregler ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Snt_spulen.jpg|thumb|250x250px|Verschiedene Spulen]]&lt;br /&gt;
&lt;br /&gt;
Von links nach rechts:&lt;br /&gt;
&lt;br /&gt;
*Speicherdrosseln: sehr gut geeignet&lt;br /&gt;
*Ringkernspulen: ja nach Anwendung gut bis sehr gut geeignet&lt;br /&gt;
*Widerstandsbauform, Trommelkern: für (sehr) kleine Leistungen geeignet&lt;br /&gt;
*Entstörspulen: schlecht geeignet&lt;br /&gt;
*Stromkompensierte Drosseln: absolut ungeeignet&lt;br /&gt;
&lt;br /&gt;
Für kleinere Schaltregler in beliebiger Konfiguration (also StepUp, StepDown, invertierend) geeignete Spulen sind z.&amp;amp;nbsp;B. die L-PISxx Serien die z.&amp;amp;nbsp;B. bei Reichelt oder Conrad erhältlich sind, oder vergleichbare Spulen.&lt;br /&gt;
Aufgrund des Ferritkerns sind diese Spulen nahezu für alle üblichen Frequenzbereiche geeignet.&lt;br /&gt;
Für Stepdownregler unter 100kHz eignen sich auch Eisenpulverringkernspulen z.&amp;amp;nbsp;B. aus dem Material 26. Vor allem bei höheren Strömen sind diese oft deutlich günstiger als vergleichbare Spulen auf Ferritkern.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [[Transformatoren und Spulen]]&lt;br /&gt;
* [[MC34063]] &lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Induktivit%C3%A4t_%28Bauelement%29 Wikipedia: Induktivität]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Spule&amp;diff=47072</id>
		<title>Spule</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Spule&amp;diff=47072"/>
		<updated>2010-05-04T13:30:32Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Vereinfachte Erklärung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Spulen sind Bauelemente, welche mittels Magnetfeld Energie speichern, übertragen oder umwandeln (transformieren) können. Sie bestehen prinzipiell aus einem isolierten Draht, welcher in bestimmter Weise auf einen magnetisch wirksamen Kern aufgewickelt wurde. Sie werden in nahezu unzähligen Varianten in der Elektronik eingesetzt, von winzigen SMD-Bauteilen bis zu haushohen Transformatoren.&lt;br /&gt;
&lt;br /&gt;
== Vereinfachte Erklärung ==&lt;br /&gt;
&lt;br /&gt;
Während man sich einen Kondensator wie eine Art Lager für Elektronen vorstellen kann, und einen Widerstand wie ein mehr oder weniger enges Rohr für einen Wasserfluß, ist eine Analogie aus dem täglichen Leben für eine Spule ein Schwungrad. Man hat eine Antriebskraft, mit der man eine Achse in Bewegung setzen möchten, aber auf dieser ist ein großes Schwungrad befestigt. Damit sich die Antriebskraft in der Bewegung der Achse bemerkbar machen kann, muss das Schwungrad mit in Bewegung gesetzt werden, was nur langsam, nach und nach möglich ist, und wenn es sich einmal dreht, möchte es nach dem Beenden der Einwirkung der Antriebskraft zunächst einmal in derselben Richtung weiterlaufen, es kann nicht sofort abgebremst werden, und wenn man versucht, das drehende Schwungrad zu blockieren, wird bei diesem plötzlichen Abbremsen eine gewaltige Kraft freigesetzt.&lt;br /&gt;
&lt;br /&gt;
Eine Spule verhält sich ähnlich. Sie ist stets bestrebt, den Stromfluß aufrecht zu erhalten, sprich sie verzögert eine schnelle Änderung des Stromflusses. Soll der Strom ansteigen, muss zunächst ein Magnetfeld aufgebaut werden, das dauert je nach anliegender Spannung und Induktivität der Spule eine gewisse Zeit. Hier wird Energie gespeichert. Soll der Stromfluß abnehmen, muss das Magnetfeld erst abgebaut werden, hier wird Energie in den Stromkreis zurückgeführt.&lt;br /&gt;
&lt;br /&gt;
Diese Eigenschaft ist sehr wichtig für [[Transformatoren und Spulen]] in Schaltnetzteilen, Filtern und vielen anderen Anwendungen. Das Maß, wieviel Magnetfeld bei einem bestimmten Strom in der Spule gespeichert werden kann, wird mit dem Begriff Induktivität ausgedrückt.&lt;br /&gt;
&lt;br /&gt;
Manchmal ist eine Spule aber auch von Nachteil, wenn die nämlich ungewollt die schnelle Änderung des Stromflusses bremst. Das ist meist dann der Fall, wenn Bauteile zu lange Anschlussdrähte oder Zuleitungen haben. Hier spricht man von parasitärer Induktivität.&lt;br /&gt;
&lt;br /&gt;
== Berechnungsformeln für Spulen ==&lt;br /&gt;
&lt;br /&gt;
Eine wichtige Formel ist die zur Definition der Induktivität. Das ist der charakteristischste Parameter einer Spule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L=\frac{U \cdot t}{I}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Diese Formel ist vor allem für die Beschreibung des elektrischen Verhaltens einer Spule mit bekannter Induktivität wichtig. Sie sagt aus, dass wenn man an eine Spule mit 1H eine Spannung von 1V für 1s anlegt, steigt der Strom um 1A (Rampenfunktion).&lt;br /&gt;
&lt;br /&gt;
D.h. die Spule integriert (sammelt) eine an ihren Klemmen anliegende Spannung und baut damit ein Magnetfeld auf. Die Folge davon ist ein Stromfluß durch die Spule. Das ist das Gegenteil eines Kondensators. Dieser integriert (sammelt) einen an seinen Klemmen eingespeisten Strom und baut damit ein elektrisches Feld auf. Die Folge davon ist eine Spannung zwischen den Klemmen.&lt;br /&gt;
&lt;br /&gt;
In praktischen Anwendung wickelt man [http://de.wikipedia.org/wiki/Spule_%28Elektrotechnik%29 Spulen] meist auf fertige Spulenkörper mit zugehörigen Kernen. Die Induktivität berechnet sich aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L=A_L \cdot N^2&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;math&amp;gt;A_L&amp;lt;/math&amp;gt;-Wert ist der Kehrwert des magnetischen Widerstands der Spule (Der Raum um den Drahtwickel) und beinhaltet sowohl die Geometrie als auch das Material des Kerns. Er wird im Datenblatt des Kerns angegeben, kann aber ggf. auch berechnet werden. Wichtig ist zu wissen, dass die Induktivität quadratisch von der Windungszahl abhängt, d.h. bei doppelter Windungszahl erhält man die vierfache Induktivität.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Spulenauswahl ==&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
&lt;br /&gt;
Vor allem bei Schaltreglern sind folgende Daten der Spulen wichtig:&lt;br /&gt;
&lt;br /&gt;
* Induktivität&lt;br /&gt;
* Drahtwiderstand&lt;br /&gt;
* Maximaler Strom&lt;br /&gt;
* Sättigungsstrom&lt;br /&gt;
&lt;br /&gt;
==== Induktivität ====&lt;br /&gt;
&lt;br /&gt;
Die Induktivität gibt an, wie schnell sich der Strom bei einer anliegenden Spannung ändert. Üblicherweise berechnet man bei der Dimensionierung die minimale Spulengröße die notwendig ist, damit der Ripple des Stromes einen bestimmten Wert (typisch 50% des Ausgangsstroms bei einem StepDown) nicht überschreitet. Eine zu große Induktivität stört bei einem StepDown Regler meist nicht. Bei einem StepUp dagegen darf diese einen bestimmten Wert nicht überschreiten, damit der Regler die gewünschte Leistung liefern kann wie im StepUp Abschnitt beschrieben.&lt;br /&gt;
Die Induktivität ist nicht konstant, sondern ändert sich je nach vorhandenem Kern mehr oder weniger mit Frequenz oder Strom.&lt;br /&gt;
Vor allem Eisenpulverkerne weisen eine ausgeprägte Abhängigkeit der Induktivität von Frequenz und Strom ab.&lt;br /&gt;
Die Induktivität mit Nennstrom ist daher meist etwas geringer als die Induktivität ohne Stromfluss. Dies sollte bei der Spulendimensionierung beachtet werden.&lt;br /&gt;
Aufgrund der starken Stromabhängigkeit erfolgt die Angabe der Induktivität bei Spulen mit Eisenpulverkernen häufig auch bei Nennstrom. Ohne Strombelastung liegt die Induktivität etwa Faktor 1,2-2 darüber. Bei Spulen mit Ferittkern dagegen wird die Induktivität meist ohne Strombelastung spezifiziert.&lt;br /&gt;
&lt;br /&gt;
==== Drahtwiderstand ====&lt;br /&gt;
&lt;br /&gt;
Der Drahtwiderstand beeinflusst vor allem den Wirkungsgrad der Schaltung bzw. begrenzt den maximal zulässigen Effektivwert des Stromes der durch die Spule fließt. Vor allem bei StepUp Wandlern sollte man sich dem Einfluss des Spulenwiderstands bemerkbar sein: Möchte man z.&amp;amp;nbsp;B. aus 5V eine höhere Spannung erzeugen und verwendet eine Spule mit 2 Ohm die mit 0,5A angesteuert wird, dann fallen an dem Drahtwiderstand bereits 1Volt ab. Das entspricht 20% der Eingangsspannung!&lt;br /&gt;
&lt;br /&gt;
==== Maximaler Strom ====&lt;br /&gt;
&lt;br /&gt;
Der maximale Strom wird meist anhand der Erwärmung der Spule durch einen bestimmten Strom bestimmt. Oft ist dies der Punkt bei der sich die Spule um z.&amp;amp;nbsp;B. 40°C erwärmt. Häufig wird dies mit Gleichspannung gemessen oder bei einer niedrigen Frequenz deren Effektivwert angegeben wird. Bei Verwendung der Spule in einem Schaltregler reduziert sich dieser Wert daher um bis zu 50%, da einerseits der Sättigungsstrom beachtet werden muss und andererseits auch der Kern innerhalb der Spule sich auch erwärmt. Vor allem Eisenpulverkerne besitzen teilweise recht hohe Kernverluste, die bei einer üblichen Dimensionierung im gleichen Bereich wie die Verluste durch den Drahtwiderstand liegen.&lt;br /&gt;
Der Spitzenstrom darf diesen Stromwert allerdings übersteigen, solange der Effektivwert bzw. die Erwärmung im zulässigen Bereich liegt.&lt;br /&gt;
&lt;br /&gt;
==== Sättigungsstrom ====&lt;br /&gt;
&lt;br /&gt;
Der Sättigungsstrom ist fast schon das wichtigste Kriterium bei der Spulenauswahl, denn wenn dieser Wert zu gering ist, ist die Spule unbrauchbar für die Schaltung.&lt;br /&gt;
Wie bei den Induktivität schon geschrieben, ist diese mehr oder weniger abhängig vom Spulenstrom. Der Sättigungsstrom (der bei für Schaltnetzteilanwendungen gedachten Spulen immer angegeben ist), gibt meist den Strom an, bei dem die Induktivität um 10-40% gegenüber der Nenninduktivität gefallen ist. Erhöht man den Strom weiter, nimmt die Induktivität je nach Kernmaterial und mechanischem Aufbau schnell ab, eine Verringerung um den Faktor 10 ist keine Seltenheit.&lt;br /&gt;
&lt;br /&gt;
Der Sättigungsstrom wird bei einem ordentlich dimensionierten Schaltregler nie überschritten werden, da die Strombegrenzung vorher anspricht. Bei einem schlechten Design spricht die Strombegrenzung dagegen erst durch den hohen Strom an, wenn die Spule in die Sättigung geht. Dies führt nur zu unnötigen Verlusten und sollte daher vermieden werden.&lt;br /&gt;
&lt;br /&gt;
Für den MC34063 heißt dies konkret, dass der Strombegrenzungswiderstand Rsc auf einen Wert unterhalb des Sättigungsstromes dimensioniert werden muss!&lt;br /&gt;
Da die Induktivität einer Spule in der Sättigung minimal ist, kann diese auch keine weitere Energie speichern. Ein Großteil der in die Spule fließenden Energie wird daher im Drahtwiderstand in Wärme umgesetzt was den Wirkungsgrad stark reduziert und eventuell die Regelung des Schaltreglers durcheinander bringt.&lt;br /&gt;
&lt;br /&gt;
Bei einer typischen, für Schaltnetzteile entworfenen Spule, liegt der Sättigungsstrom etwa Faktor 1,5-2 über dem Nennstrom. Dies erlaubt den Nennstrom voll auszunutzen, da der Stromripple bei der üblichen Spulendimensionierung bei etwa 50% des Nennstroms, der Spitzenstrom also bei etwa 1,5x Nennstrom liegt.&lt;br /&gt;
&lt;br /&gt;
Der durch den Begrenzungswiderstand definierte Strom kann auch im Leerlauf ohne Last auftreten, geringe Last schützt also nicht vor Sättigung!&lt;br /&gt;
&lt;br /&gt;
=== Ferritkern vs. Eisenpulverringkern ===&lt;br /&gt;
&lt;br /&gt;
Der Großteil der Energie einer Spule wird nicht direkt im Kern, sondern in einem Luftspalt des Kerns gespeichert. Daher benötigt jede Spule für ein Schaltnetzteil, welche zur Energiespeicherung genutzt wird, einen mehr oder weniger großen Luftspalt. Je größer der Luftspalt, desto mehr Energie kann die Spule speichern, allerdings benötigt man mehr Windungen um eine bestimmte Induktivität zu erreichen. Das gilt für Sperrwandler sowie Speicherdrosseln in Flußwandlern. Echte Trafos, wie z.&amp;amp;nbsp;B. im Flusswandler, dürfen möglichst keinen Luftspalt besitzen.&lt;br /&gt;
Die in Übertragern oder stromkompensierten Drosseln eingesetzten Ferritringkerne besitzen kein Luftspalt. Daher können sie kaum Energie speichern, sind daher auch nicht für Speicherdrosseln oder Sperrwandler geeignet. Dafür erreichen diese mit wenigen Windungen schnell Induktivitäten im mH Bereich, wozu andere Spulen etliche 100 Windungen benötigen.&lt;br /&gt;
Eisenpulverringkerne gehen einen anderen Weg: Hier stellen die minimalen, mit Kunststoff gefüllten Zwischenräume zwischen den einzelnen Teilchen bereits den Luftspalt dar, weshalb hier kein zusätzlicher Luftspalt erforderlich ist.&lt;br /&gt;
Die hierfür verwendeten Materialien besitzen allerdings deutlich höhere Ummagnetisierungsverluste als Ferrit, weshalb Eisenpulverringkerne üblicherweise nur für niedrige Frequenzen eingesetzt werden. Das am weitesten verbreitete Material sind die gelb-weiß markierten Ringkerne mit dem Materialcode 26. Dieses zeichnet sich vor allem durch die niedrigen Kosten aus. Der Einsatzbereich liegt entweder in Entstördrosseln für Gleichstrom- oder 50Hz Anwendungen oder in Schaltnetzteilen bis 100kHz. Für höhere Frequenzen sind auch bessere, und natürlich teurere Materialien, erhältlich.&lt;br /&gt;
Dieser Spulentyp ist vor allem für Abwärtswandler sinnvoll, da Eisenpulverkerne kein Problem mit hohen DC Strömen, allerdings mit hohen AC Anteilen aufgrund der Kernverluste haben. Da der Stromripple bei diesem Wandlertyp meist kleiner als der DC Strom ist, sind beide Bedingungen erfüllt. Allerdings sollte man beachten, dass die Induktivität einer Eisenpulverringkernspule stark von der Frequenz, dem Strom und auch vom Alter abhängig ist! Je nach Temperatur altern Eisenpulverringkerne mehr oder weniger schnell und die Spule verliert dabei an Induktivität.&lt;br /&gt;
Die Dimensionierung einer Eisenpulverringkernspule ist alles andere als einfach, da hier sehr viele Faktoren beachtet werden müssen. Die Berechnung der Kernverluste ist auch aufwendig, einige Hersteller liefern dafür aber Formeln oder Berechnungsprogramme, so wie z.&amp;amp;nbsp;B. Micrometals:&lt;br /&gt;
[http://www.micrometals.com/software_index.html Berechnungsprogramm für Eisenpulverringkerne].&lt;br /&gt;
Vor allem Anfängern wird aber von der eigenen Dimensionierung von Eisenpulverringkernspulen abgeraten. Etliche Hersteller (wie z.&amp;amp;nbsp;B. Talema) haben fertige Ringkernspulen im Programm die bei verschiedenen Anbietern auch für Normalverbraucher erhältlich sind (z.&amp;amp;nbsp;B. bei elpro, DARISUS und vielen anderen).&lt;br /&gt;
&lt;br /&gt;
=== Speicherspulen vs. Entstörspulen ===&lt;br /&gt;
&lt;br /&gt;
Nicht selten machen vor allem Anfänger den Fehler die nächstbeste Spule mit einigermaßen passender Induktivität einzusetzen, ohne darauf zu achten, dass die Spule eigentlich als Entstörspule entwickelt wurde. Dies gilt vor allem für die Funkentstördrosseln der Baureihe MESC/MISC/77A die z.&amp;amp;nbsp;B. bei Reichelt erhältlich sind. Die Schaltungen funktionieren zwar einigermaßen, allerdings ist der Wirkungsgrad deutlich geringer als er es mit einer guten Spule wäre.&lt;br /&gt;
Dies liegt vor allem am Aufbau der Spule sowie deren vorhandenem Kern. Funkentstördrosseln sind dafür ausgelegt von einem niederfrequenten Strom durchflossen zu werden und eine, im Vergleich zum Nutzstrom niedrigen Störstrom abzublocken. Dadurch entstehen kaum Verluste im Kern, da das Magnetfeld konstant ist bzw. sich durch den niederfrequenten Strom nur sehr langsam ändert. Der Kern ist also nicht dafür ausgelegt verlustarm zu sein, bzw. es ist sogar erwünscht wenn er bei hohen Frequenzen gewisse Verluste aufweist, um Resonanzen innerhalb der Spule zu verhindern. Weiterhin kommt das Problem hinzu, dass aufgrund der hohen Länge der Spule die Feldlinien außerhalb der Spule den magnetischen Kreis schließen und sich so ein deutliches Magnetfeld um die Spule herum aufbaut, diese arbeitet quasi wie eine Ferittstabantenne und erzeugt beträchtliche EMV Störungen!&lt;br /&gt;
Speziell für Schaltnetzteile ausgelegte Spulen besitzen daher nicht selten einen entsprechenden mechanischen Aufbau um die Feldlinien möglichst innerhalb bzw. sehr nahe an der Spule zu halten um diese Störungen zu minimieren.&lt;br /&gt;
&lt;br /&gt;
Besonders bei Spulen mit Eisenpulverringkernen sollte man genau nachschauen ob die Angaben für Entstöranwendungen oder für Schaltnetzteilanwendungen gelten: Hier wird oft die gleiche Spule je nach Verwendungszweck unterschiedlich spezifiziert. Dies liegt daran, dass man bei der Entstöranwendung eben kaum Verluste im Kern hat und somit aufgrund der geringeren Erwärmung der Draht von einem höheren Strom durchflossen werden kann, ohne dass er überhitzt.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele geeigneter Spulen für Schaltregler ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Snt_spulen.jpg|thumb|250x250px|Verschiedene Spulen]]&lt;br /&gt;
&lt;br /&gt;
Von links nach rechts:&lt;br /&gt;
&lt;br /&gt;
*Speicherdrosseln: sehr gut geeignet&lt;br /&gt;
*Ringkernspulen: ja nach Anwendung gut bis sehr gut geeignet&lt;br /&gt;
*Widerstandsbauform, Trommelkern: für (sehr) kleine Leistungen geeignet&lt;br /&gt;
*Entstörspulen: schlecht geeignet&lt;br /&gt;
*Stromkompensierte Drosseln: absolut ungeeignet&lt;br /&gt;
&lt;br /&gt;
Für kleinere Schaltregler in beliebiger Konfiguration (also StepUp, StepDown, invertierend) geeignete Spulen sind z.&amp;amp;nbsp;B. die L-PISxx Serien die z.&amp;amp;nbsp;B. bei Reichelt oder Conrad erhältlich sind, oder vergleichbare Spulen.&lt;br /&gt;
Aufgrund des Ferritkerns sind diese Spulen nahezu für alle üblichen Frequenzbereiche geeignet.&lt;br /&gt;
Für Stepdownregler unter 100kHz eignen sich auch Eisenpulverringkernspulen z.&amp;amp;nbsp;B. aus dem Material 26. Vor allem bei höheren Strömen sind diese oft deutlich günstiger als vergleichbare Spulen auf Ferritkern.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [[Transformatoren und Spulen]]&lt;br /&gt;
* [[MC34063]] &lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Induktivit%C3%A4t_%28Bauelement%29 Wikipedia: Induktivität]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Olimex_AT91SAM7X256-Board_SAM7-EX256&amp;diff=39721</id>
		<title>Olimex AT91SAM7X256-Board SAM7-EX256</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Olimex_AT91SAM7X256-Board_SAM7-EX256&amp;diff=39721"/>
		<updated>2009-10-07T05:00:27Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Rückgängig: Änderung 39720 von 69.226.219.33 (Diskussion) wurde rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://shop.mikrocontroller.net/csc_article_details.php?saArticle%5BID%5D=80 Olimex AT91SAM7X256-Board (SAM7-EX256)]&lt;br /&gt;
&lt;br /&gt;
[http://shop.mikrocontroller.net/csc_article_details.php?saArticle%5BID%5D=80 http://shop.mikrocontroller.net/images/sam7-ex256-small.jpg]&lt;br /&gt;
&lt;br /&gt;
== Softwarevoraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Anleitungen setzen das Vorhandensein einer [[ARM#Compiler|ARM-GCC-Toolchain]] voraus.&lt;br /&gt;
&lt;br /&gt;
== Minimalbeispiel ==&lt;br /&gt;
&lt;br /&gt;
Dieses einfache Beispielprojekt mit Makefile basiert auf dem GCC-Tutorial von Atmel. Enthalten ist kein OS, nur ein paar Funktionen für UART-Kommunikation.&lt;br /&gt;
&lt;br /&gt;
Download: http://www.mikrocontroller.net/attachment/25724/Olimex_SAM7_EX256_StartupMinimal_2007.08.17.zip&lt;br /&gt;
&lt;br /&gt;
== Installation von FreeRTOS ==&lt;br /&gt;
&lt;br /&gt;
Merkmale von FreeRTOS:&lt;br /&gt;
* präemptives Multitasking&lt;br /&gt;
* Unterstützung für viele Prozessoren und Controller&lt;br /&gt;
* Demos für viele verschiedene Boards enthalten&lt;br /&gt;
* Beispiele für die Anbindung verschiedener IP-Stacks enthalten (lwIP, uIP)&lt;br /&gt;
* Codequalität der Demos durchwachsen&lt;br /&gt;
&lt;br /&gt;
Funktionsumfang des Beispielprojekts:&lt;br /&gt;
* TCP/IP-Stack lwIP&lt;br /&gt;
* Webserver&lt;br /&gt;
* virtueller serieller Port über USB realisiert (CDC, Windows-Treiber enthalten)&lt;br /&gt;
&lt;br /&gt;
Als Ausgangspunkt dient das Beispiel &amp;quot;lwIP_Demo_Rowley_ARM7&amp;quot; aus [http://www.freertos.org FreeRTOS] 4.4.0. Die für das Olimex-Board angepasste (und ein bisschen aufgeräumte) Version kann man [http://www.mikrocontroller.net/attachment/25551/lwIP_Demo_olimex.zip hier] herunterladen. Die Datei muss in den Demo-Ordner von FreeRTOS entpackt werden. Die Änderungen gegenüber der Originalversion sind in der Datei changes.txt dokumentiert.&lt;br /&gt;
&lt;br /&gt;
Die IP-Adresse ist standardmäßig auf 192.168.0.111 gesetzt und lässt sich in der Datei BasicWEB.c ändern.&lt;br /&gt;
&lt;br /&gt;
Kompiliert wird das Projekt wie üblich durch Eingabe von &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Installation von Ethernut ==&lt;br /&gt;
&lt;br /&gt;
Ethernut bzw. Nut/OS ist ein Betriebssystem mit TCP/IP-Stack, das ursprünglich für AVR-Controller entwickelt wurde, später aber u.a. auf ARM portiert wurde.&lt;br /&gt;
&lt;br /&gt;
Merkmale von Nut/OS:&lt;br /&gt;
* sehr sauberer und gut kommentierter Code&lt;br /&gt;
* Buildsystem mit Konfigurations-GUI; Vorteil: einfacher Einstieg, Nachteil: Gesamtsystem manchmal etwas undurchsichtig&lt;br /&gt;
* nur kooperatives Multitasking&lt;br /&gt;
* zielt hauptsächlich auf AVR ab, ARM-Unterstützung noch nicht weit fortgeschritten&lt;br /&gt;
* im Vergleich zu lwIP spartanischer IP-Stack&lt;br /&gt;
&lt;br /&gt;
Funktionsumfang des Beispielprojekts:&lt;br /&gt;
* verschiedene Netzwerk-Beispielanwendungen (HTTP, FTP, DHCP)&lt;br /&gt;
* serieller Port&lt;br /&gt;
&lt;br /&gt;
Getestet wurde diese Anleitung mit der Ethernut-Version 4.2.1.&lt;br /&gt;
&lt;br /&gt;
Als Ausgangspunkt dient die Konfiguration at91sam7x-ek.conf. Für das Olimex-Board sind ein paar kleine Änderungen nötig.&lt;br /&gt;
&lt;br /&gt;
=== PHY-Konfiguration ändern ===&lt;br /&gt;
&lt;br /&gt;
Unter Architecture/ARM/AT91 EMAC Driver: &amp;lt;br /&amp;gt; [[Bild:olimex-sam7x-ethernut-phy-conf.png]]&lt;br /&gt;
&lt;br /&gt;
=== PHY-Initialisierung patchen ===&lt;br /&gt;
&lt;br /&gt;
In der Funktion EmacReset in der Datei at91_emac.c den Block mit dem Kommentar &amp;lt;code&amp;gt;/* For some unknown reason...&amp;lt;/code&amp;gt; durch folgenden Code ersetzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
     /* PHY ID */&lt;br /&gt;
     #define MII_DM9161_ID_H 0x0181&lt;br /&gt;
     #define MII_DM9161_ID_L 0xb8a0&lt;br /&gt;
&lt;br /&gt;
     #define MII_AM79C875_ID_H 0x0022&lt;br /&gt;
     #define MII_AM79C875_ID_L 0x5540&lt;br /&gt;
&lt;br /&gt;
     #define MII_MICREL_ID_H 0x0022&lt;br /&gt;
     #define MII_MICREL_ID_L 0x1610 &lt;br /&gt;
&lt;br /&gt;
     /* For some unknown reason it seems to be required to read the ID registers first. */&lt;br /&gt;
     // Check for DM PHY (as used on the ATMEL EK)&lt;br /&gt;
     if (phy_inw(NIC_PHY_ID1) != MII_DM9161_ID_H ||&lt;br /&gt;
        (phy_inw(NIC_PHY_ID2) &amp;amp; 0xFFF0) != MII_DM9161_ID_L) {&lt;br /&gt;
     // Check for MICREL PHY (as used on the Olimex SAM7-EX256)   	&lt;br /&gt;
         if (phy_inw(NIC_PHY_ID1) != MII_MICREL_ID_H ||&lt;br /&gt;
            (phy_inw(NIC_PHY_ID2) &amp;amp; 0xFFF0) != MII_MICREL_ID_L) {&lt;br /&gt;
            outr(EMAC_NCR, inr(EMAC_NCR) &amp;amp; ~EMAC_MPE);&lt;br /&gt;
            return -1;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fehlende Definition ergänzen ===&lt;br /&gt;
Falls eine Fehlermeldung auftritt dass EMAC_PIO_SODR nicht definiert ist, folgenden Code in der Datei at91_emac.c vor &amp;lt;code&amp;gt;#ifdef PHY_PWRDN_BIT\n /* Disable PHY power down. */&amp;lt;/code&amp;gt; einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#ifndef EMAC_PIO_SODR&lt;br /&gt;
#define EMAC_PIO_SODR PIOB_SODR&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ausprobieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn man das Beispielprogramm httpserv kompiliert (&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; eingeben) und in den Controller geladen hat sollte man über das UART (115.2 kBaud) die erfolgreiche Initialisierung bestätigt bekommen:&lt;br /&gt;
 Nut/OS 4.2.1 HTTP Daemon...Configure eth0...OK&lt;br /&gt;
 192.168.0.21 ready&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man die angezeigte IP-Adresse im Browser eingeben und sollte die Testseite zu sehen bekommen.&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/75721#new Diskussion zum Thema]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* http://www.sparkfun.com/tutorial/Nokia%206100%20LCD%20Display%20Driver.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM-Boards]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Wake-Up_Light&amp;diff=35947</id>
		<title>Wake-Up Light</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Wake-Up_Light&amp;diff=35947"/>
		<updated>2009-05-03T15:29:58Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Beschreibung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Inspiration kam vom original Wak-Up Light von Philips.&lt;br /&gt;
&lt;br /&gt;
[http://www.consumer.philips.com/consumer/de/de/consumer/cc/_categoryid_WAKEUP_LIGHT_CA_DE_CONSUMER/]&lt;br /&gt;
&lt;br /&gt;
Der Preis dafür ist jedoch nicht gerade klein. Ich startete also ein eigenes Low-Cost Projekt mit (meiner Meinung nach) ein paar Verbesserungen.&lt;br /&gt;
&lt;br /&gt;
= Einleitung =&lt;br /&gt;
Der Formumbeitrag für Fragen und Anregungen ist [[http://www.mikrocontroller.net/topic/136769#1249098 hier]]&lt;br /&gt;
&lt;br /&gt;
Der Sinn des ganzen ist es, dass man nicht mehr durch einen grauenhaften Ton von einer Sekunde auf die andere aufwacht, sondern dass man durch das Licht lansgsam wach wird. Das ganze Basiert auf dem Hormon [http://de.wikipedia.org/wiki/Melatonin Melatonin|] diese wird unter anderem in den Augen Produziert sobald es dunkel wird und bewirkt, dass man müde wird und einschläft. Wird die Umgebung nun heller hören die Augen auf dieses Hormon zu produzieren und man wird dadurch wach.&lt;br /&gt;
&lt;br /&gt;
15 Minuten vor der eingestellte Weckzeit fängt das Wake-Up Light an zu leuchten. In den ersten 10 Minuten wird es konstant alle 20 Sekunden eine Stufe heller. In den letzten 5 Minuten werden mit den 3 farbigen LEDs abwechslungsweise verschiedene Farben erzeugt. Und zum Schluss kommt dann doch noch ein akustische Weckruf.&lt;br /&gt;
&lt;br /&gt;
Beim Design hab ich mich von einem Leuchtturm inspirieren lassen und das ganze dementsprechend ähnlich aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Bilder ==&lt;br /&gt;
[[Bild:Leuchtturm.jpg|center|thumb|200px|Aufbau]]&lt;br /&gt;
&lt;br /&gt;
Zu sehen ist der Print mit den beiden AA Batterien und dem Lithium Akku aus einem Nostalgischen Handy&lt;br /&gt;
Die Batterielaufzeit habe ich auf etwa 1 Jahr berechnet. Der Akku für die LEDs sollte ebenfalls mehrere Monate Halten&lt;br /&gt;
[[Bild:Innenaufbau.jpg|center|thumb|200px|Innenansicht]]&lt;br /&gt;
&lt;br /&gt;
In der Mitte ist eine 10 mm weisse LED zu sehen. Aussen sind je 2 Blaue, Grüne und Gelbe LEDs. Eigentlich wollte ich RGB, habe aber die erfahrung gemacht, dass die roten LEDs zu intensiv waren und habe daher gelbe verwendet.&lt;br /&gt;
[[Bild:LEDs.jpg|center|thumb|200px|Ansicht von Oben auf die LES]]&lt;br /&gt;
&lt;br /&gt;
Das Display Zeigt die Standardanzeige mit Wochentag, Datum, Zeit und Alarmeinstellung&lt;br /&gt;
[[Bild:DisplayStandardanzeige.jpg|center|thumb|200px|Standardanzeige]]&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Menügesteuerte Bedienung mit nur 3 Tasten&lt;br /&gt;
* Batteriebetrieb&lt;br /&gt;
* Uhrzeit läuft bei Batteriewechsel weiter&lt;br /&gt;
* Der Alarm kann auf bestimmte Wochentage begrenzt werden&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== Prozessor ==&lt;br /&gt;
=== Schema ===&lt;br /&gt;
[[Bild:Prozessor.png|thumb|center|500px|Prozessor]]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Als Prozessor wird ein Atmega88 verwendet. Dieser hat gegenüber dem Atmega8 zwei wesentliche Vorteile: Neuerer Generation daher pro Pin mehr Funktionen z.B. PinChangeInterrupt und eine Debugschnittstelle (DebugWire) damit man debuggen könnte, falls man ein JTAGICE mkII hätte :-(&lt;br /&gt;
&lt;br /&gt;
Die 1k Widerstände am Programmierstecker sind, da die meisten Programmiergeräte mit 5V Pegel arbeiten, der Prozessor aber mit etwa 3V läuft.&lt;br /&gt;
&lt;br /&gt;
Für die Zeit wird ein externer RTC verwendet, das hat 2 Vorteile: Man hat eine genaue Zeit inkl. Datum und Wochentag und der Prozessor kann in den Tiefschlaf gehen, wenn er nichts mehr zu tun hat. Er schaltet also alle Clocks ab, würde man einen 32 kHz Quarz verwenden, muss der Clock aktiv bleiben und der Prozessor bräuchte viel mehr Strom. Durch den Programmierbaren Clock Ausgang des RTC wird der Prozessor an einem Interrupt Eingang mit einem 1 Hz Signal versorgt. (Siehe dazu die verschiedenen Sleep Modi des Atmega88)&lt;br /&gt;
&lt;br /&gt;
Mithilfe der beiden Spannungsteiler können die beiden Batteriespannungen gemessen werden.&lt;br /&gt;
&lt;br /&gt;
Die vier SW_xxx Eingänge sind für die Taster&lt;br /&gt;
&lt;br /&gt;
Der TxD Ausgang ist für Debugzwecke, wenn man wie ich keinen JTAGICE mkII hat um über DebugWire zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Am Buzzer Ausgang wird ein Signal Ausgegeben um einen Wechrufton zu erzeigen. Der Buzzer ist selbstoszillierend (Spannung --&amp;gt; Ton, keine Frequenz nötig).&lt;br /&gt;
&lt;br /&gt;
Für die Hintergrundbeleuchtung und die 3 LEDs sind jeweils PWM Ausgänge vorgesehen, wobei die Hintergrundbeleuchtung noch nicht über PWM angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
== Ansteuerung ==&lt;br /&gt;
=== Schema ===&lt;br /&gt;
[[Bild:Ansteuerung.png|thumb|center|500px|Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Als Display wird ein EA DOGM162 mit 2 x 16 Zeichen verwendet. Um nur wenige Prozessorpins zu belegen wird das LCD in SPI Modus angesteuert. Obwohl das LCD an den Hardware SPI-Pins angeschlossen ist wird eine Softwaremässige Übertragung verwendet um Strom zu sparen. Das LCD hat einen internen StepUp Wandler dessen Spannung per Software eingestellt werden kann, damit wird der Kontrast eingestellt.&lt;br /&gt;
&lt;br /&gt;
Alle LEDs werden mit PWM Konstantstrom angesteuert. Die Spannung zwischen Emitter und GND ist immer 0.7V. Zusammen mit dem Emitterwiderstand gibt dies einen konstanten Strom durch die LEDs unabhängig von der Spannung der Batterie.&lt;br /&gt;
&lt;br /&gt;
Alle Taster werden mit den internen PullUp Widerständen des AVRs gespiesen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schaltung für LED Konstantstrom&#039;&#039;&#039;&lt;br /&gt;
[[Bild:Konstantstrom.png|center|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
Die Software läuft grösstenteils Interruptbasiert, das heisst sie macht erst etwas, wenn &lt;br /&gt;
man eine Taste drückt und so einen Interrupt auslöst. Zusätzlich hat sie vom externen &lt;br /&gt;
RTC noch einen 1s TimeTick. Das heisst, dass jede Sekunde ein Interrupt auftritt und der &lt;br /&gt;
TaskHandler und der Taskscheduler ausgeführt werden. Die restliche Zeit ist der &lt;br /&gt;
Prozessor im Tiefschlaf und verbrauch lediglich ein paar uA.&lt;br /&gt;
&lt;br /&gt;
== TaskHandler ==&lt;br /&gt;
Dem Taskhandler kann man Funktionen zuweisen, bei denen man weiss, dass sie länger &lt;br /&gt;
dauern und nicht gerade jetzt auf der Stelle ausgeführt werden müssen. Ist vor allem in &lt;br /&gt;
den Interrupt Routinen vorteilhaft, da man diese wieder schnell verlässt und die &lt;br /&gt;
Zeitintensive Aufgaben später erledigt.&lt;br /&gt;
&lt;br /&gt;
== TaskScheduler ==&lt;br /&gt;
Dem TaskScheduler kann man Aufgaben zuweisen, die man nach einer bestimmten Zeit &lt;br /&gt;
ausführen möchte. Z.B. sollte das Display 5 Sekunden Nachleuchten. Man kann dem &lt;br /&gt;
Scheduler jetzt also die Funktion BacklightOff() übergeben und angeben dass diese in 5 &lt;br /&gt;
Sekunden ausgeführt werden soll. Drückt man in der Zwischenzeit eine Taste entfernt &lt;br /&gt;
man den Task einfach wieder und fügt in von neuem mit 5 Sekunden hinzu.&lt;br /&gt;
&lt;br /&gt;
= Bedienung =&lt;br /&gt;
Die Bedienung ist menügesteuert und geschieht mit den 3 Tasten Up, OK, ESC. Folgende Einstellungen können vorgenommen werden:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Alarm&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Ein/Aus&#039;&#039;&#039; &amp;lt;br&amp;gt; Alarm komplett ausschalten oder an ausgewählen Tagen einschalten&lt;br /&gt;
** &#039;&#039;&#039;Zeit&#039;&#039;&#039; &amp;lt;br&amp;gt; Alarmzeit einstellen&lt;br /&gt;
** &#039;&#039;&#039;Tage&#039;&#039;&#039; &amp;lt;br&amp;gt; Wochentage an denen der Alarm eingeschaltet sein soll auswählen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Einstellungen&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Datum einstellen&#039;&#039;&#039; &amp;lt;br&amp;gt; Aktuelles Datum einstellen&lt;br /&gt;
** &#039;&#039;&#039;Zeit einstellen&#039;&#039;&#039; &amp;lt;br&amp;gt; Aktuelle Uhrzeit einstellen&lt;br /&gt;
** &#039;&#039;&#039;Spannungen anzeigen&#039;&#039;&#039; &amp;lt;br&amp;gt; Spannungen der Batterie und des Akku anzeigen&lt;br /&gt;
&lt;br /&gt;
= Downloads =&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Archiv enthält das Eagle Schema und ein PDF davon&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Version / Datum&lt;br /&gt;
!Bescheibung&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|1.0 / 13.04.2009&lt;br /&gt;
|Version 1.0&lt;br /&gt;
|[[http://www.mikrocontroller.net/articles/Bild:WakeUpLightHW_1_0.zip WakeUpLightHW_1_0.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Datei enthalt die Einstellungen der FuseBit&lt;br /&gt;
[[http://www.mikrocontroller.net/articles/Bild:WakeUPLightFuses.pdf Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
Das Archiv enthält alle Source Dateien und eine fertig kompilierte HEX-Dateil. Die Software wurde mit AVR-GCC kompiliert.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Version / Datum&lt;br /&gt;
!Bescheibung&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|1.0 / 02.05.2009&lt;br /&gt;
|Version 1.0&lt;br /&gt;
|[[http://www.mikrocontroller.net/articles/Bild:WakeUpLightSW_1_0.zip WakeUpLightSW_1_0.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
[[LED-Fading]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Sleep Mode]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Ultra low power]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Wake-Up_Light&amp;diff=35946</id>
		<title>Wake-Up Light</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Wake-Up_Light&amp;diff=35946"/>
		<updated>2009-05-03T15:28:58Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Beschreibung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Inspiration kam vom original Wak-Up Light von Philips.&lt;br /&gt;
&lt;br /&gt;
[http://www.consumer.philips.com/consumer/de/de/consumer/cc/_categoryid_WAKEUP_LIGHT_CA_DE_CONSUMER/]&lt;br /&gt;
&lt;br /&gt;
Der Preis dafür ist jedoch nicht gerade klein. Ich startete also ein eigenes Low-Cost Projekt mit (meiner Meinung nach) ein paar Verbesserungen.&lt;br /&gt;
&lt;br /&gt;
= Einleitung =&lt;br /&gt;
Der Formumbeitrag für Fragen und Anregungen ist [[http://www.mikrocontroller.net/topic/136769#1249098 hier]]&lt;br /&gt;
&lt;br /&gt;
Der Sinn des ganzen ist es, dass man nicht mehr durch einen grauenhaften Ton von einer Sekunde auf die andere aufwacht, sondern dass man durch das Licht lansgsam wach wird. Das ganze Basiert auf dem Hormon [http://de.wikipedia.org/wiki/Melatonin Melatonin|] diese wird unter anderem in den Augen Produziert sobald es dunkel wird und bewirkt, dass man müde wird und einschläft. Wird die Umgebung nun heller hören die Augen auf dieses Hormon zu produzieren und man wird dadurch wach.&lt;br /&gt;
&lt;br /&gt;
15 Minuten vor der eingestellte Weckzeit fängt das Wake-Up Light an zu leuchten. In den ersten 10 Minuten wird es konstant alle 20 Sekunden eine Stufe heller. In den letzten 5 Minuten werden mit den 3 farbigen LEDs abwechslungsweise verschiedene Farben erzeugt. Und zum Schluss kommt dann doch noch ein akustische Weckruf.&lt;br /&gt;
&lt;br /&gt;
Beim Design hab ich mich von einem Leuchtturm inspirieren lassen und das ganze dementsprechend ähnlich aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Bilder ==&lt;br /&gt;
[[Bild:Leuchtturm.jpg|center|thumb|200px|Aufbau]]&lt;br /&gt;
&lt;br /&gt;
Zu sehen ist der Print mit den beiden AA Batterien und dem Lithium Akku aus einem Nostalgischen Handy&lt;br /&gt;
Die Batterielaufzeit habe ich auf etwa 1 Jahr berechnet. Der Akku für die LEDs sollte ebenfalls mehrere Monate Halten&lt;br /&gt;
[[Bild:Innenaufbau.jpg|center|thumb|200px|Innenansicht]]&lt;br /&gt;
&lt;br /&gt;
In der Mitte ist eine 10 mm weisse LED zu sehen. Aussen sind je 2 Blaue, Grüne und Gelbe LEDs. Eigentlich wollte ich RGB, habe aber die erfahrung gemacht, dass die roten LEDs zu intensiv waren und habe daher gelbe verwendet.&lt;br /&gt;
[[Bild:LEDs.jpg|center|thumb|200px|Ansicht von Oben auf die LES]]&lt;br /&gt;
&lt;br /&gt;
Das Display Zeigt die Standardanzeige mit Wochentag, Datum, Zeit und Alarmeinstellung&lt;br /&gt;
[[Bild:DisplayStandardanzeige.jpg|center|thumb|200px|Standardanzeige]]&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Menügesteuerte Bedienung mit nur 3 Tasten&lt;br /&gt;
* Batteriebetrieb&lt;br /&gt;
* Uhrzeit läuft bei Batteriewechsel weiter&lt;br /&gt;
* Der Alarm kann auf bestimmte Wochentage begrenzt werden&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== Prozessor ==&lt;br /&gt;
=== Schema ===&lt;br /&gt;
[[Bild:Prozessor.png|thumb|center|500px|Prozessor]]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Als Prozessor wird ein Atmega88 verwendet. Dieser hat gegenüber dem Atmega8 zwei wesentliche Vorteile: Neuerer Generation daher pro Pin mehr Funktionen z.B. PinChangeInterrupt und eine Debugschnittstelle (DebugWire) damit man debuggen könnte, falls man ein JTAGICE mkII hätte :-(&lt;br /&gt;
&lt;br /&gt;
Die 1k Widerstände am Programmierstecker sind, da die meisten Programmiergeräte mit 5V Pegel arbeiten, der Prozessor aber mit etwa 3V läuft.&lt;br /&gt;
&lt;br /&gt;
Für die Zeit wird ein externer RTC verwendet, das hat 2 Vorteile: Man hat eine genaue Zeit inkl. Datum und Wochentag und der Prozessor kann in den Tiefschlaf gehen, wenn er nichts mehr zu tun hat. Er schaltet also alle Clocks ab, würde man einen 32 kHz Quarz verwenden, muss der Clock aktiv bleiben und der Prozessor bräuchte viel mehr Strom. Durch den Programmierbaren Clock Ausgang des RTC wird der Prozessor an einem Interrupt Eingang mit einem 1 Hz Signal versorgt. (Siehe dazu die verschiedenen Sleep Modi des Atmega88)&lt;br /&gt;
&lt;br /&gt;
Mithilfe der beiden Spannungsteiler können die beiden Batteriespannungen gemessen werden.&lt;br /&gt;
&lt;br /&gt;
Die vier SW_xxx Eingänge sind für die Taster&lt;br /&gt;
&lt;br /&gt;
Der TxD Ausgang ist für Debugzwecke, wenn man wie ich keinen JTAGICE mkII hat um über DebugWire zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Am Buzzer Ausgang wird ein Signal Ausgegeben um einen Wechrufton zu erzeigen. Der Buzzer ist selbstoszillierend (Spannung --&amp;gt; Ton, keine Frequenz nötig).&lt;br /&gt;
&lt;br /&gt;
Für die Hintergrundbeleuchtung und die 3 LEDs sind jeweils PWM Ausgänge vorgesehen, wobei die Hintergrundbeleuchtung noch nicht über PWM angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
== Ansteuerung ==&lt;br /&gt;
=== Schema ===&lt;br /&gt;
[[Bild:Ansteuerung.png|thumb|center|500px|Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Als Display wird ein EA DOGM162 mit 2 x 16 Zeichen verwendet. Um nur wenige Prozessorpins zu belegen wird das LCD in SPI Modus angesteuert. Obwohl das LCD an den Hardware SPI-Pins angeschlossen ist wird eine Softwaremässige Übertragung verwendet um Strom zu sparen. Das LCD hat einen internen StepUp Wandler dessen Spannung per Software eingestellt werden kann, damit wird der Kontrast eingestellt.&lt;br /&gt;
&lt;br /&gt;
Alle LEDs werden mit PWM Konstantstrom angesteuert. Die Spannung zwischen Emitter und GND ist immer 0.7V. Zusammen mit dem Emitterwiderstnad gibt dies einen konstanten Strom durch die LEDs unabhängig von der Spannung der Batterie.&lt;br /&gt;
&lt;br /&gt;
Alle Taster werden mit den internen PullUp Widerständen des AVRs gespiesen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schaltung für LED Konstantstrom&#039;&#039;&#039;&lt;br /&gt;
[[Bild:Konstantstrom.png|center|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
Die Software läuft grösstenteils Interruptbasiert, das heisst sie macht erst etwas, wenn &lt;br /&gt;
man eine Taste drückt und so einen Interrupt auslöst. Zusätzlich hat sie vom externen &lt;br /&gt;
RTC noch einen 1s TimeTick. Das heisst, dass jede Sekunde ein Interrupt auftritt und der &lt;br /&gt;
TaskHandler und der Taskscheduler ausgeführt werden. Die restliche Zeit ist der &lt;br /&gt;
Prozessor im Tiefschlaf und verbrauch lediglich ein paar uA.&lt;br /&gt;
&lt;br /&gt;
== TaskHandler ==&lt;br /&gt;
Dem Taskhandler kann man Funktionen zuweisen, bei denen man weiss, dass sie länger &lt;br /&gt;
dauern und nicht gerade jetzt auf der Stelle ausgeführt werden müssen. Ist vor allem in &lt;br /&gt;
den Interrupt Routinen vorteilhaft, da man diese wieder schnell verlässt und die &lt;br /&gt;
Zeitintensive Aufgaben später erledigt.&lt;br /&gt;
&lt;br /&gt;
== TaskScheduler ==&lt;br /&gt;
Dem TaskScheduler kann man Aufgaben zuweisen, die man nach einer bestimmten Zeit &lt;br /&gt;
ausführen möchte. Z.B. sollte das Display 5 Sekunden Nachleuchten. Man kann dem &lt;br /&gt;
Scheduler jetzt also die Funktion BacklightOff() übergeben und angeben dass diese in 5 &lt;br /&gt;
Sekunden ausgeführt werden soll. Drückt man in der Zwischenzeit eine Taste entfernt &lt;br /&gt;
man den Task einfach wieder und fügt in von neuem mit 5 Sekunden hinzu.&lt;br /&gt;
&lt;br /&gt;
= Bedienung =&lt;br /&gt;
Die Bedienung ist menügesteuert und geschieht mit den 3 Tasten Up, OK, ESC. Folgende Einstellungen können vorgenommen werden:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Alarm&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Ein/Aus&#039;&#039;&#039; &amp;lt;br&amp;gt; Alarm komplett ausschalten oder an ausgewählen Tagen einschalten&lt;br /&gt;
** &#039;&#039;&#039;Zeit&#039;&#039;&#039; &amp;lt;br&amp;gt; Alarmzeit einstellen&lt;br /&gt;
** &#039;&#039;&#039;Tage&#039;&#039;&#039; &amp;lt;br&amp;gt; Wochentage an denen der Alarm eingeschaltet sein soll auswählen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Einstellungen&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Datum einstellen&#039;&#039;&#039; &amp;lt;br&amp;gt; Aktuelles Datum einstellen&lt;br /&gt;
** &#039;&#039;&#039;Zeit einstellen&#039;&#039;&#039; &amp;lt;br&amp;gt; Aktuelle Uhrzeit einstellen&lt;br /&gt;
** &#039;&#039;&#039;Spannungen anzeigen&#039;&#039;&#039; &amp;lt;br&amp;gt; Spannungen der Batterie und des Akku anzeigen&lt;br /&gt;
&lt;br /&gt;
= Downloads =&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Archiv enthält das Eagle Schema und ein PDF davon&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Version / Datum&lt;br /&gt;
!Bescheibung&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|1.0 / 13.04.2009&lt;br /&gt;
|Version 1.0&lt;br /&gt;
|[[http://www.mikrocontroller.net/articles/Bild:WakeUpLightHW_1_0.zip WakeUpLightHW_1_0.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Datei enthalt die Einstellungen der FuseBit&lt;br /&gt;
[[http://www.mikrocontroller.net/articles/Bild:WakeUPLightFuses.pdf Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
Das Archiv enthält alle Source Dateien und eine fertig kompilierte HEX-Dateil. Die Software wurde mit AVR-GCC kompiliert.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Version / Datum&lt;br /&gt;
!Bescheibung&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|1.0 / 02.05.2009&lt;br /&gt;
|Version 1.0&lt;br /&gt;
|[[http://www.mikrocontroller.net/articles/Bild:WakeUpLightSW_1_0.zip WakeUpLightSW_1_0.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
[[LED-Fading]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Sleep Mode]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Ultra low power]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Wake-Up_Light&amp;diff=35944</id>
		<title>Wake-Up Light</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Wake-Up_Light&amp;diff=35944"/>
		<updated>2009-05-03T15:26:54Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Inspiration kam vom original Wak-Up Light von Philips.&lt;br /&gt;
&lt;br /&gt;
[http://www.consumer.philips.com/consumer/de/de/consumer/cc/_categoryid_WAKEUP_LIGHT_CA_DE_CONSUMER/]&lt;br /&gt;
&lt;br /&gt;
Der Preis dafür ist jedoch nicht gerade klein. Ich startete also ein eigenes Low-Cost Projekt mit (meiner Meinung nach) ein paar Verbesserungen.&lt;br /&gt;
&lt;br /&gt;
= Einleitung =&lt;br /&gt;
Der Formumbeitrag für Fragen und Anregungen ist [[http://www.mikrocontroller.net/topic/136769#1249098 hier]]&lt;br /&gt;
&lt;br /&gt;
Der Sinn des ganzen ist es, dass man nicht mehr durch einen grauenhaften Ton von einer Sekunde auf die andere aufwacht, sondern dass man durch das Licht lansgsam wach wird. Das ganze Basiert auf dem Hormon [http://de.wikipedia.org/wiki/Melatonin Melatonin|] diese wird unter anderem in den Augen Produziert sobald es dunkel wird und bewirkt, dass man müde wird und einschläft. Wird die Umgebung nun heller hören die Augen auf dieses Hormon zu produzieren und man wird dadurch wach.&lt;br /&gt;
&lt;br /&gt;
15 Minuten vor der eingestellte Weckzeit fängt das Wake-Up Light an zu leuchten. In den ersten 10 Minuten wird es konstant alle 20 Sekunden eine Stufe heller. In den letzten 5 Minuten werden mit den 3 farbigen LEDs abwechslungsweise verschiedene Farben erzeugt. Und zum Schluss kommt dann doch noch ein akustische Weckruf.&lt;br /&gt;
&lt;br /&gt;
Beim Design hab ich mich von einem Leuchtturm inspirieren lassen und das ganze dementsprechend ähnlich aufgebaut.&lt;br /&gt;
&lt;br /&gt;
== Bilder ==&lt;br /&gt;
[[Bild:Leuchtturm.jpg|center|thumb|200px|Aufbau]]&lt;br /&gt;
&lt;br /&gt;
Zu sehen ist der Print mit den beiden AA Batterien und dem Lithium Akku aus einem Nostalgischen Handy&lt;br /&gt;
Die Batterielaufzeit habe ich auf etwa 1 Jahr berechnet. Der Akku für die LEDs sollte ebenfalls mehrere Monate Halten&lt;br /&gt;
[[Bild:Innenaufbau.jpg|center|thumb|200px|Innenansicht]]&lt;br /&gt;
&lt;br /&gt;
In der Mitte ist eine 10 mm weisse LED zu sehen. Aussen sind je 2 Blaue, Grüne und Gelbe LEDs. Eigentlich wollte ich RGB, habe aber die erfahrung gemacht, dass die roten LEDs zu intensiv waren und habe daher gelbe verwendet.&lt;br /&gt;
[[Bild:LEDs.jpg|center|thumb|200px|Ansicht von Oben auf die LES]]&lt;br /&gt;
&lt;br /&gt;
Das Display Zeigt die Standardanzeige mit Wochentag, Datum, Zeit und Alarmeinstellung&lt;br /&gt;
[[Bild:DisplayStandardanzeige.jpg|center|thumb|200px|Standardanzeige]]&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Menügesteuerte Bedienung mit nur 3 Tasten&lt;br /&gt;
* Batteriebetrieb&lt;br /&gt;
* Uhrzeit läuft bei Batteriewechsel weiter&lt;br /&gt;
* Der Alarm kann auf bestimmte Wochentage begrenzt werden&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== Prozessor ==&lt;br /&gt;
=== Schema ===&lt;br /&gt;
[[Bild:Prozessor.png|thumb|center|500px|Prozessor]]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Als Prozessor wird ein Atmega88 verwendet. Dieser hat gegenüber dem Atmega8 zwei wesentliche Vorteile: Neuerer Generation daher pro Pin mehr Funktionen z.B. PinChangeInterrupt und eine Debugschnittstelle (DebugWire) damit man debuggen könnte, falls man ein JTAGICE mkII hättet :-(&lt;br /&gt;
&lt;br /&gt;
Die 1k Widerstände am Programmierstecker sind, da die meisten Programmiergeräte mit 5V Pegel arbeiten, der Prozessor aber mit etwa 3V läuft.&lt;br /&gt;
&lt;br /&gt;
Für die Zeit wird ein externer RTC verwendet, das hat 2 Vorteile: Man hat eine genaue Zeit inkl. Datum und Wochentag und der Prozessor kann in den Tiefschlaf gehen, wenn er nichts mehr zu tun hat. Er schaltet also alle Clocks ab, würde man einen 32 kHz Quarz verwenden, muss der Clock aktiv bleiben und der Prozessor bräuchte viel mehr Strom. Durch den Programmierbaren Clock Ausgang des RTC wird der Prozessor an einem Interrupt Eingang mit einem 1 Hz Signal versorgt. (Siehe dazu die verschiedenen Sleep Modi des Atmega88)&lt;br /&gt;
&lt;br /&gt;
Mithilfe der Beiden Spannungsteiler können die beiden Batteriespannungen gemessen werden.&lt;br /&gt;
&lt;br /&gt;
Die vier SW_xxx Eingänge sind für die Taster&lt;br /&gt;
&lt;br /&gt;
Der TxD Ausgang ist für Debugzwecke, wenn man wie ich keinen JTAGICE mkII hat um über DebugWire zu debuggen.&lt;br /&gt;
&lt;br /&gt;
Am Buzzer Ausgang wird ein Signal Ausgegeben um einen Wechrufton zu erzeigen. Der Buzzer ist selbstoszillierend (Spannung --&amp;gt; Ton, keine Frequenz nötig).&lt;br /&gt;
&lt;br /&gt;
Für die Hintergrundbeleuchtung und die 3 LEDs sind jeweils PWM Ausgänge vorgesehen, wobei die Hintergrundbeleuchtung noch nicht über PWM angesteuert wird.&lt;br /&gt;
&lt;br /&gt;
== Ansteuerung ==&lt;br /&gt;
=== Schema ===&lt;br /&gt;
[[Bild:Ansteuerung.png|thumb|center|500px|Ansteuerung]]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Als Display wird ein EA DOGM162 mit 2 x 16 Zeichen verwendet. Um nur wenige Prozessorpins zu belegen wird das LCD in SPI Modus angesteuert. Obwohl das LCD an den Hardware SPI-Pins angeschlossen ist wird eine Softwaremässige Übertragung verwendet um Strom zu sparen. Das LCD hat einen internen StepUp Wandler dessen Spannung per Software eingestellt werden kann, damit wird der Kontrast eingestellt.&lt;br /&gt;
&lt;br /&gt;
Alle LEDs werden mit PWM Konstantstrom angesteuert. Die Spannung zwischen Emitter und GND ist immer 0.7V. Zusammen mit dem Emitterwiderstnad gibt dies einen konstanten Strom durch die LEDs unabhängig von der Spannung der Batterie.&lt;br /&gt;
&lt;br /&gt;
Alle Taster werden mit den internen PullUp Widerständen des AVRs gespiesen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schaltung für LED Konstantstrom&#039;&#039;&#039;&lt;br /&gt;
[[Bild:Konstantstrom.png|center|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Allgemein ==&lt;br /&gt;
Die Software läuft grösstenteils Interruptbasiert, das heisst sie macht erst etwas, wenn &lt;br /&gt;
man eine Taste drückt und so einen Interrupt auslöst. Zusätzlich hat sie vom externen &lt;br /&gt;
RTC noch einen 1s TimeTick. Das heisst, dass jede Sekunde ein Interrupt auftritt und der &lt;br /&gt;
TaskHandler und der Taskscheduler ausgeführt werden. Die restliche Zeit ist der &lt;br /&gt;
Prozessor im Tiefschlaf und verbrauch lediglich ein paar uA.&lt;br /&gt;
&lt;br /&gt;
== TaskHandler ==&lt;br /&gt;
Dem Taskhandler kann man Funktionen zuweisen, bei denen man weiss, dass sie länger &lt;br /&gt;
dauern und nicht gerade jetzt auf der Stelle ausgeführt werden müssen. Ist vor allem in &lt;br /&gt;
den Interrupt Routinen vorteilhaft, da man diese wieder schnell verlässt und die &lt;br /&gt;
Zeitintensive Aufgaben später erledigt.&lt;br /&gt;
&lt;br /&gt;
== TaskScheduler ==&lt;br /&gt;
Dem TaskScheduler kann man Aufgaben zuweisen, die man nach einer bestimmten Zeit &lt;br /&gt;
ausführen möchte. Z.B. sollte das Display 5 Sekunden Nachleuchten. Man kann dem &lt;br /&gt;
Scheduler jetzt also die Funktion BacklightOff() übergeben und angeben dass diese in 5 &lt;br /&gt;
Sekunden ausgeführt werden soll. Drückt man in der Zwischenzeit eine Taste entfernt &lt;br /&gt;
man den Task einfach wieder und fügt in von neuem mit 5 Sekunden hinzu.&lt;br /&gt;
&lt;br /&gt;
= Bedienung =&lt;br /&gt;
Die Bedienung ist menügesteuert und geschieht mit den 3 Tasten Up, OK, ESC. Folgende Einstellungen können vorgenommen werden:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Alarm&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Ein/Aus&#039;&#039;&#039; &amp;lt;br&amp;gt; Alarm komplett ausschalten oder an ausgewählen Tagen einschalten&lt;br /&gt;
** &#039;&#039;&#039;Zeit&#039;&#039;&#039; &amp;lt;br&amp;gt; Alarmzeit einstellen&lt;br /&gt;
** &#039;&#039;&#039;Tage&#039;&#039;&#039; &amp;lt;br&amp;gt; Wochentage an denen der Alarm eingeschaltet sein soll auswählen&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Einstellungen&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Datum einstellen&#039;&#039;&#039; &amp;lt;br&amp;gt; Aktuelles Datum einstellen&lt;br /&gt;
** &#039;&#039;&#039;Zeit einstellen&#039;&#039;&#039; &amp;lt;br&amp;gt; Aktuelle Uhrzeit einstellen&lt;br /&gt;
** &#039;&#039;&#039;Spannungen anzeigen&#039;&#039;&#039; &amp;lt;br&amp;gt; Spannungen der Batterie und des Akku anzeigen&lt;br /&gt;
&lt;br /&gt;
= Downloads =&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das Archiv enthält das Eagle Schema und ein PDF davon&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Version / Datum&lt;br /&gt;
!Bescheibung&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|1.0 / 13.04.2009&lt;br /&gt;
|Version 1.0&lt;br /&gt;
|[[http://www.mikrocontroller.net/articles/Bild:WakeUpLightHW_1_0.zip WakeUpLightHW_1_0.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Datei enthalt die Einstellungen der FuseBit&lt;br /&gt;
[[http://www.mikrocontroller.net/articles/Bild:WakeUPLightFuses.pdf Einstellungen]]&lt;br /&gt;
&lt;br /&gt;
Das Archiv enthält alle Source Dateien und eine fertig kompilierte HEX-Dateil. Die Software wurde mit AVR-GCC kompiliert.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Version / Datum&lt;br /&gt;
!Bescheibung&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|1.0 / 02.05.2009&lt;br /&gt;
|Version 1.0&lt;br /&gt;
|[[http://www.mikrocontroller.net/articles/Bild:WakeUpLightSW_1_0.zip WakeUpLightSW_1_0.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
[[LED-Fading]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Sleep Mode]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Ultra low power]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=34389</id>
		<title>Benutzer:Mixer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=34389"/>
		<updated>2009-02-13T17:09:39Z</updated>

		<summary type="html">&lt;p&gt;Mixer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Interessen=&lt;br /&gt;
&lt;br /&gt;
*AVR, bis jetzt nur ASM&lt;br /&gt;
*Elektronik allgemein&lt;br /&gt;
*Linux (Ubuntu)&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Entscheidung_Mikrocontroller&amp;diff=34365</id>
		<title>Entscheidung Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Entscheidung_Mikrocontroller&amp;diff=34365"/>
		<updated>2009-02-12T18:02:11Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Mikrocontroller]]&lt;br /&gt;
Die meisten Anfänger stellen sich die Frage, welchen [[Mikrocontroller]] sie verwenden sollen. Es gibt dutzende Hersteller, und jeder davon hat unzählige Varianten im Angebot. Stellt man die Frage in einem Diskussionsforum, dann bekommt man viele verschiedene (sich teilweise widersprechende) Antworten. Bei der Entscheidung sollten u.a. die unten stehenden Kriterien beachtet werden. Dieser Artikel ist primär für Hobbyisten gedacht, da im professionellen Einsatz oftmals völlig andere Kriterien beachtet werden müssen. Weitere vergleichende Informationen über verschiedene Controllerfamilien gibt der Artikel: [[AVR_PIC_51-Vergleich]]&lt;br /&gt;
&lt;br /&gt;
== Verfügbarkeit ==&lt;br /&gt;
* Während man manche Mikrocontroller an jeder Straßenecke bekommt, sind andere nur in großen Stückzahlen und mit Gewerbenachweis erhältlich. Dazu einfach mal in die Kataloge der einschlägigen Privatkundenhändler schauen. Dabei auch darauf achten, dass der gewünschte Controller auch in der richtigen Bauform erhältlich ist (DIP, TQFP, MLF,usw.), s.u.&lt;br /&gt;
* Ab und zu kündigen Hersteller ein neues Modell an (und veröffentlichen das Datenblatt dazu), können aber erst ein Jahr später nennenswerte Stückzahlen liefern. Also den Controller nicht einfach anhand der Übersichten beim Hersteller aussuchen, sondern überprüfen, was die Händler auch wirklich liefern können.&lt;br /&gt;
* Lebenszyklus: Kein Modell wird ewig hergestellt, deswegen sollte man überprüfen, ob der Hersteller vielleicht schon angekündigt hat, dass er ein bestimmtes Modell nicht mehr herstellen will. Die Hersteller schreiben dann z.B. &amp;quot;Mature Product (Not Recommended for New Designs)&amp;quot;. Für Neuentwicklungen oder den Einstieg sollte man folgende Modelle nicht verwenden:&lt;br /&gt;
** AVR AT90-Reihe, &lt;br /&gt;
** AVR ATMega 103(L), 161(L), 163(L), 323(L).&lt;br /&gt;
* Für alle abgekündigten AVR-Controller gibt es jedoch pin- und funktionskompatible Nachfolger. Daher kommt es nur in den seltensten Fällen zu Problemen. Probleme können nur entstehen wenn ein Programm nur in kompilierter Version zur Verfügung steht.&lt;br /&gt;
* Dagegen sind Mikrocontroller der [[8051|MCS51-Familie]] von Intel eher für langfristige Investitionen geeignet. Der 8051 wurde 1979 (!) als erstes Mitglied dieser Familie vorgestellt. Heute gibt es bereits hunderte von 8051-Derivaten von dutzenden von Halbleiterherstellern, zum Teil auch mit weiterentwickelten Prozessorkernen. Wird ein Derivat tatsächlich mal abgekündigt, findet man bei dieser Riesenauswahl meist leicht adäquaten Ersatz.&lt;br /&gt;
&lt;br /&gt;
== Preis ==&lt;br /&gt;
Einerseits kann es lästig sein, wenn man durch die Verwendung eines kleineren Modells 2 Euro gespart hat und dann mit dessen Unzulänglichkeiten kämpft, andererseits ist ein versehentlich zerstörter Chip für 30 Euro ziemlich ärgerlich. Auch ist es oft ganz praktisch, wenn man einige Controller auf Vorrat hat.&lt;br /&gt;
&lt;br /&gt;
Zum Preis eines einzelnen Mikrocontrollers kommen noch die Kosten für die Entwicklungswerkzeuge, wie [[Compiler]], Programmübertragung und Debugging hinzu (s.u. Programmiersprache und Programmübertragung).&lt;br /&gt;
&lt;br /&gt;
== Bauformen == &lt;br /&gt;
Neben den klassischen (bedrahteten) Bauformen setzt sich heutzutage [[SMD]] immer mehr durch. Manche Mikrocontroller sind nur noch in SMD-Bauformen erhältlich. Für SMD benutzt man üblicherweise geätzte Platinen oder Adapter/Sockel (die aber wieder extra kosten). Will man mit Lochrasterplatinen oder [[Breadboard]]s arbeiten, dann braucht man die klassischen Bauformen, z.B. PDIP. Zu beachten ist dabei, dass es PDIP oft nur bis DIP40 (also mit 40 Pins) gibt, d.h. einen Mikrocontroller mit 50 I/O-Pins kann es dann nur als SMD geben.&lt;br /&gt;
&lt;br /&gt;
Viele Mikrocontroller sind in verschiedenen Bauformen verfügbar. Nur in SMD verfügbar sind:&lt;br /&gt;
* MSP430 (Die kleinen sind mittlerweile auch als DIP erhältlich)&lt;br /&gt;
* AVR ATMega 64, 128, 169&lt;br /&gt;
&lt;br /&gt;
In der klassischen (wenn auch in der Anzahl der verfügbaren IO-Pins limitiert) PDIP Bauform gibt es unter anderem:&lt;br /&gt;
* AVR ATMega 8, 16, 32&lt;br /&gt;
* viele 8051-Derivate, z.B. Atmel 89S8252&lt;br /&gt;
&lt;br /&gt;
== Spannung ==&lt;br /&gt;
Während früher die meisten Mikrocontroller und die gesamte Peripherie mit 5V liefen, so gibt es heute auch alle möglichen anderen Varianten. Zu beachten ist:&lt;br /&gt;
* Controller und Peripherie müssen zusammenpassen. Man kann nicht einfach (ohne weitere Vorkehrungen) ein 3,3V-RAM an einen 5V-Controller anschließen und umgekehrt.&lt;br /&gt;
* Manche Controller besitzen, obwohl sie intern mit einer anderen Spannung arbeiten, 5V-kompatible IO-Pins (Beispiel: [[LPC2000 Philips ARM7TDMI-Familie|LPC2100]]).&lt;br /&gt;
* Manche Controller brauchen zwei verschiedene Spannungen. Dies ist aber relativ selten, z.B. bei den [[LPC2000 Philips ARM7TDMI-Familie|LPC2100]].&lt;br /&gt;
&lt;br /&gt;
* Billig-Netzteile liefern im Leerlauf manchmal deutlich mehr Spannung als angegeben, ein [[Spannungsregler]] (z.B. 78xx) ist also Pflicht!&lt;br /&gt;
* Bei Batterien und Akkus sinkt die Spannung ab, wenn sie leerer werden. Braucht der Controller z.B. mindestens 2,7V, dann wird man mit zwei 1,5V-Batterien nicht lange Freude haben (außer man benutzt spezielle Schaltregler).&lt;br /&gt;
&lt;br /&gt;
== Stromverbrauch ==&lt;br /&gt;
Im Vergleich zu PC-Prozessoren (Pentium, Athlon usw.) brauchen Mikrocontroller relativ wenig Strom. Will man sie allerdings mit Batterien betreiben, dann wird der Stromverbrauch plötzlich doch wichtig. Die meisten Mikrocontroller besitzen hierfür Stromsparmodi, mit denen man den Controller teilweise abschalten kann. Für einen extrem geringen Stromverbrauch sind z.B. die [[MSP430]]-Controller optimiert.&lt;br /&gt;
&lt;br /&gt;
Der Stromverbrauch hängt auch stark vom Takt und der Versorgungsspannung ab. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0&lt;br /&gt;
! Frequenz !! ATMega8 (2.7V) !! ATMega8 (5.0V) !! PIC16LF84A(2.0V) !! PIC16F84A (5.5V)&lt;br /&gt;
|-&lt;br /&gt;
! 32KHz &lt;br /&gt;
|62µA||80µA||45µA||-&lt;br /&gt;
|-&lt;br /&gt;
! 100KHz &lt;br /&gt;
|0,3mA||0,5mA||-||-&lt;br /&gt;
|-&lt;br /&gt;
!1MHz, 2MHz*&lt;br /&gt;
|1,5mA ||2,3mA||4mA||-&lt;br /&gt;
|-&lt;br /&gt;
!8MHz, 4MHz*&lt;br /&gt;
|5mA   ||7/15mA**||-||4.5mA&lt;br /&gt;
|-&lt;br /&gt;
!16MHz, 20MHz*&lt;br /&gt;
| -    ||20mA||-||20mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*] Abweichende Taktangabe für PIC16*F84A, da hier keine entsprechenden Werte für die Frequenzen des ATmega8 im Datenblatt (PIC16F84A Data Sheet, Microchip 2001, 35007b.pdf) vorliegen.&lt;br /&gt;
&lt;br /&gt;
[**] Angaben sind in der Folge Idle/Active (Quelle: Atmel, ATmega8/L, doc2486.pdf).&lt;br /&gt;
&lt;br /&gt;
== Takt/Geschwindigkeit ==&lt;br /&gt;
Einerseits wünscht man sich oft einen möglichst schnellen Controller, insbesondere als Anfänger, wenn man effiziente Lösungen noch nicht so kennt, andererseits schlägt sich ein hoher Takt auch im Stromverbrauch und im Preis nieder. Man sollte sich dabei nicht von den hohen Taktraten der PC-Prozessoren irritieren lassen. Für viele Anwendungen reicht 1-MHz-Takt völlig aus.&lt;br /&gt;
&lt;br /&gt;
Bei einem Geschwindigkeitsvergleich sollte man beachten, dass man nicht einfach den Takt vergleichen kann: &lt;br /&gt;
* Während manche Controller 12 Takte für einen Befehl brauchen (z.B. die Original-[[8051]]), kommen andere mit einem Takt pro Befehl aus (z.B. [[AVR]]).&lt;br /&gt;
* Manche Controller unterstützen gewisse Operationen hardwareseitig, die auf anderen Controllern in Software nachgebildet werden muss. Beispiele sind z.B. Multiplikation und Division. Wer in einer Hochsprache programmiert merkt davon nicht viel, da es dort die Befehle sowieso zur Verfügung stehen, aber sie brauchen auf einem Controller ohne Hardwareunterstützung eben deutlich länger. &lt;br /&gt;
* Die Datenbus- bzw. Registerbreite spielt eine wichtige Rolle, weil man z.B. für eine 16-Bit-Addition auf einer 8-Bit-CPU zwei Befehle und auf einer 16-Bit-CPU nur einen Befehl braucht.&lt;br /&gt;
&lt;br /&gt;
== Speicher ==&lt;br /&gt;
Während früher oft nur die [[Register]] im Mikrocontroller waren, und der gesamte restliche Speicher extern angebunden werden musste, so sind heute die Speicher oft komplett im Mikrocontroller integriert. Das bedeutet aber teilweise auch, dass man sie nicht erweitern kann. Wichtig ist dabei u.a. die Größe des Programmspeichers (meist ein [[Flash-ROM]]) und das [[RAM#SRAM|SRAM]]. Fehlt letzteres, dann kann es mit der Compilerunterstützung schwierig werden.&lt;br /&gt;
&lt;br /&gt;
Zu unterscheiden sind hier außerdem Controller in [[Von Neumann-Architektur|Von-Neumann-Architektur]] und [[Harvard-Architektur]]. Bei letzterer liegen Programmspeicher (ROM) und Datenspeicher (RAM) in getrennten Speicherbereichen; dies hat den Nachteil, dass für den Zugriff auf den Programmspeicher spezielle Befehle notwendig sind (was die Verwendung von im ROM abgelegten Daten in C-Compilern ziemlich umständlich macht), und dass man keine Programmteile direkt aus dem Datenspeicher ausführen kann.&lt;br /&gt;
&lt;br /&gt;
== Onboard-Peripherie ==&lt;br /&gt;
Mikrocontroller haben meist eine ganze Menge Funktionen integriert, z.B. [[AD-Wandler]], [[I²C]]-Bus, [[SPI]], [[PWM]], [[RS-232]] usw. usf. Der Vorteil liegt darin, dass der Controller damit mehrere Dinge gleichzeitig machen kann. Dadurch steigt zum einen die Gesamtleistung des Controllers, zum anderen sind viele Dinge zeitkritisch, und die Programmierung ist deutlich einfacher, wenn man zehn zeitkritische Dinge gleichzeitig erledigen muss.&lt;br /&gt;
&lt;br /&gt;
== Programmiersprachen ==&lt;br /&gt;
Den direktesten Zugriff auf die &amp;quot;Innereien&amp;quot; eines Prozessors hat man mit [[Assembler]]. Dies ist jedoch gleichzeitig - zumindest auf den ersten Blick - die &amp;quot;abschreckendste&amp;quot; Sprache, denn sie erfordert einen hohen Lernaufwand. Aufgrund stark unterschiedlicher Befehlssätze verschiedener Controllerfamilien ist das Gelernte nie 1-zu-1 übertragbar und meist nur direkt auf einen einzigen Prozessor oder allenfalls auf eine Familie &amp;quot;verwandter&amp;quot; Produkte anwendbar. Dennoch kann man sich mit einiger Erfahrung recht schnell in einen anderen Befehlssatz einarbeiten. In bestimmten Bereichen oder Teilen eines Projekts wird die Verwendung von Assembler dennoch unabdingbar sein. (Diese Teile mögen projektabhängig zwischen 100% oder auch nur deutlich unter 1% umfassen.)&lt;br /&gt;
&lt;br /&gt;
Die Auswahl der richtigen Programmiersprache hängt auch stark vom geplanten Einsatzzweck ab. Ein Elektrotechnik-Student, der sich für sein späteres Berufsleben vorbereiten möchte, sollte sich mit C und Assembler befassen. Wer dagegen gar nicht vorhat sich allzu tief einzuarbeiten und sowieso schon Basic oder Pascal kann, der sollte zu diesen Sprachen greifen.&lt;br /&gt;
&lt;br /&gt;
Für einige Controllerfamilien (z.B. AVR, ARM, MSP430) gibt es eine Portierung des kostenlosen [[GCC|GNU-C-Compilers]], wodurch C auch im Hobby-Bereich stark vertreten ist und es auch viele Programmierbeispiele dafür gibt.&lt;br /&gt;
&lt;br /&gt;
== Programmübertragung ==&lt;br /&gt;
Irgendwie muss das Programm zum Mikrocontroller kommen. Früher war dazu in den meisten Fällen ein teures und umständlich zu handhabendes Programmiergerät notwendig, heute sind die meisten Mikrocontroller über eine spezielle ISP-Schnittstelle oder über das [[UART]] &amp;quot;In-System&amp;quot;-programmierbar. Controller mit integriertem [[Bootloader]] kann man mit der entsprechenden Software direkt über den seriellen Port eines PCs programmieren. Für Controller mit ISP- oder [[JTAG]]-Schnittstelle ([[AVR]], [[MSP430]]) benötigt man einen speziellen Programmieradapter, den man (meistens in verschiedenen Ausführungen) kaufen oder selber bauen kann.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
Bei der Fehlerbeseitigung trennen sich Profi von Amateur und es kann richtig teuer werden. Genau hier haben die Hersteller von Mikrocontrollern und/oder Compilern eine Möglichkeit gefunden den Gelegenheitsprogrammierer abzuweisen und nur den zahlenden Profi vorzulassen.&lt;br /&gt;
&lt;br /&gt;
Die preisgünstigste aber auch unkomfortabelste Art des Debuggings ist der Einbau von Testkode in das Programm. Dieser Testkode informiert den Programmierer über erreichte Programmpunkte und dabei aufgetretene Datenwerte. Die Ausgabe erfolgt per optisch/akustischer Anzeige oder serieller Schnittstelle. Der Nachteil dieser Methode liegt in ihrem Zeitaufwand. Für jedes Problem muss ein kurzes Stück Testkode erdacht und in das Programm eingefügt werden. Danach wird das Programm kompiliert/assembliert und in den Flashspeicher des Mikrocontrollers gebrannt. Zu guter Letzt muss das Programm von Begin an durchlaufen und mit etwas Glück liefert der Testkode Informationen über das Problem.&lt;br /&gt;
&lt;br /&gt;
Deutlich effektiver ist die Fehlersuche mittels einer in die PC-Entwicklungsumgebung integrierten Debugger Software. Üblicherweise besteht diese Software aus mehreren Fenstern zur Anzeige folgender Informationen:&lt;br /&gt;
&lt;br /&gt;
* Programm- und Datenspeicher des Mikrocontrollers.&lt;br /&gt;
* Arbeits- und Konfigurationsregister des Mikrocontrollers.&lt;br /&gt;
* Programm Quellkode in Hochsprache (z.B. C) und/oder Assembler.&lt;br /&gt;
* Werte von Programm Variablen.&lt;br /&gt;
&lt;br /&gt;
Ausgehend vom Quellkode/Assembler-Fenster kann man den Programmlauf an beliebigen Stellen stoppen, das Programm zeilenweise abarbeiten, Variablen/Speicher/Register anzeigen und auch verändern. Diese Vorgänge werden bei modernen Debuggern mit wenigen Funktionstasten und Kontextmenü gesteuert.&lt;br /&gt;
&lt;br /&gt;
Der Programmlauf kann in einem Software-Simulator oder direkt auf dem Mikrocontroller erfolgen. Leider können Simulatoren weder die Signale der Controller Umgebung noch Interrupts realistisch nachahmen. Hier hilft nur In-System Debugging direkt auf dem Zielsystem.&lt;br /&gt;
&lt;br /&gt;
Für das In-System Debugging wird der Ziel-Mikrocontroller mit seiner In-Circuit Debugging Hardware benutzt. Diese integrierte Hardware kommuniziert über teils genormte Schnittstellen mit der Debugger Software auf dem PC. Als Verbindungsglied dient ein Kabel mit mehr oder weniger komplexer Elektronik. Diese Elektronik, das fehlende Wissen um ihre Funktion und die teils eingebaute Donglefunktion verhindern preisgünstigen Nachbau und machen ihren Hersteller sicher vor unautorisierter Benutzung der Entwicklungsumgebung.&lt;br /&gt;
&lt;br /&gt;
Bei der Vielzahl von Controller- und Compiler-Herstellen ist es kaum möglich einen Überblick über die Debugger Hardware/Software zu geben. Hier nur einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Hersteller&lt;br /&gt;
!System&lt;br /&gt;
!Preis&lt;br /&gt;
|-&lt;br /&gt;
| Clone&lt;br /&gt;
| JTAG ICE (wenige ATmega Typen)&lt;br /&gt;
| ~ 35€&lt;br /&gt;
|-&lt;br /&gt;
| Atmel&lt;br /&gt;
| AVR Dragon (Debugging &amp;lt;= 32kB)&lt;br /&gt;
| ~ 55€&lt;br /&gt;
|-&lt;br /&gt;
| Atmel&lt;br /&gt;
| JTAG ICE MKII&lt;br /&gt;
| ~ 280€&lt;br /&gt;
|-&lt;br /&gt;
| Atmel&lt;br /&gt;
| AVR ONE!&lt;br /&gt;
| ~ 550€&lt;br /&gt;
|-&lt;br /&gt;
| Microchip&lt;br /&gt;
| MPLAB ICD 3&lt;br /&gt;
| ab 190€&lt;br /&gt;
|-&lt;br /&gt;
| Zilog&lt;br /&gt;
| USB Smart Kabel&lt;br /&gt;
| ~ 30$&lt;br /&gt;
|-&lt;br /&gt;
| Zilog&lt;br /&gt;
| Ethernet Smart Kabel&lt;br /&gt;
| ~ 70$&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der JTAG ICE Clone kann nur ältere ATmega Controller debuggen:&lt;br /&gt;
&lt;br /&gt;
* ATmega16, ATmega16L&lt;br /&gt;
* ATmega162, ATmega162L, ATmega162V&lt;br /&gt;
* ATmega165, ATmega165V&lt;br /&gt;
* ATmega169, ATmega169L, ATmega169V&lt;br /&gt;
* ATmega32, ATmega32L&lt;br /&gt;
* ATmega323, ATmega323L&lt;br /&gt;
* ATmega64, ATmega64L&lt;br /&gt;
* ATmega128, ATmega128L, AT90CAN128&lt;br /&gt;
&lt;br /&gt;
Atmel [[AVR]] Dragon kann alle ATtiny, ATmega programmieren ist aber auf 32 kB debugbaren Programmcode begrenzt.&lt;br /&gt;
&lt;br /&gt;
[[Zilog]] Produkte sind, ganz zu Unrecht, in Europa kaum bekannt oder erhältlich.&lt;br /&gt;
&lt;br /&gt;
== Störfestigkeit ==&lt;br /&gt;
Eigentlich ein wichtiges Thema, andererseits findet man dazu nur sehr wenig Informationen. Bekannt ist beispielsweise, dass bei der [[AVR]]-Familie die ATmegas deutlich störfester sind als die alten AT90S. &lt;br /&gt;
&lt;br /&gt;
== Unterstützung/Community ==&lt;br /&gt;
Gerade als Anfänger ist man oft auf die Hilfe anderer angewiesen. Da empfiehlt es sich, der Masse hinterherzulaufen und keine exotischen Typen zu verwenden. Im Bastlerbereich populäre Mikrocontroller-Familien sind die AVRs von Atmel und die PICs von Microchip. Für diese Architekturen gibt es z.B. im Forum dieser Internet-Seite gute und meist auch schnelle Hilfestellung bei Problemen.&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZNEO&amp;diff=31751</id>
		<title>ZNEO</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZNEO&amp;diff=31751"/>
		<updated>2008-10-09T18:57:48Z</updated>

		<summary type="html">&lt;p&gt;Mixer: zu Kategorie Mikrocontroller hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Der Zilog ZNEO (Z16Fx) ist ein 16/32-Bit Mikrocontroller. Der interne Flash Speicher ist 16-Bit organisiert. Jeweils 32 Bit breit sind die 14+2 Arbeitsregister.&lt;br /&gt;
&lt;br /&gt;
Durch 32 Bit Verarbeitungsbreite und Hardware MUL/DIV übersteigt die Leistung des ZNEO das sonst übliche 8-Bit Controller Niveau deutlich.&lt;br /&gt;
== Alleinstellungsmerkmal ==&lt;br /&gt;
Das unbeschränkte Zilog Entwicklungspaket mit integriertem Editor, C-Compiler, Assembler, In-System-Debugger sowie Programmier- und Debugging-Kabel ist für 30$ zu haben.&lt;br /&gt;
&lt;br /&gt;
Auf den ersten Blick findet man das auch bei anderen Controller Familien. Beim zweiten Hinschauen fehlt aber entweder die Möglichkeit zum Debugging oder die Codegröße ist begrenzt.&lt;br /&gt;
&lt;br /&gt;
Von Laien völlig unterschätzt, das Debugging. Damit verbringt man die meiste Zeit und deshalb ist es das Wichtigste am Programmieren.&lt;br /&gt;
Einen Controller ohne In-System Debugging zu programmieren ist so frustrierend und uneffizient wie das Arbeiten in Maschinensprache; Binärzahl für Binärzahl.&lt;br /&gt;
&lt;br /&gt;
== Bauformen ==&lt;br /&gt;
Der ZNEO ist als 64-pin LQFP, 68-pin PLCC, 80-Pin QFP und 100-pin LQFP verfügbar. Die 80- und 100-poligen Versionen beinhalten, bis auf eine Ausnahme, ein paralleles Adress-/Daten-Interface zu externen Komponenten.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/8/8f/ZilogZneoSmall.png&lt;br /&gt;
&lt;br /&gt;
Für Prototyping und Hobby ist die sockelbare 68-pin PLCC Version (Z16F2810VH) mit 128kB Flash, 4kB RAM  besonders interessant. Diese ist das Äquivalent der geometrisch kleineren 64-pin LQFP Version Z16F2810AG.&lt;br /&gt;
&lt;br /&gt;
Hier eine optimierte Eagle Library mit den 64- und 68-Pin Bauformen: [http://www.mikrocontroller.net/wikifiles/6/63/ZilogZneoSmall.zip ZilogZneoSmall.zip]&lt;br /&gt;
&lt;br /&gt;
== Eckdaten ==&lt;br /&gt;
Der Betriebsspannungsbereich ist 2,7-3,6V. Erwähnenswert ist dabei, dass alle rein digitalen IO Pins externe Spannung bis 5,5V vertragen.&lt;br /&gt;
Die intern erzeugte ADC Referenzspannung von 2V steht ab 3V Betriebsspannung zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird der Controller vom internen Oszillator mit 5.5MHz oder 32kHz, internen Watchdog Timer oder externen Oszillator/Quarz/Resonator/RC-Glied. Die maximale Taktfrequenz ist 20MHz.&lt;br /&gt;
&lt;br /&gt;
Standart Baugruppen sind drei 16-Bit Timer mit PWM, ein dedizierter 6x1/3x2-Kanal PWM Timer, zwei LIN-UART, Infrarot Encoder/Decoder, ESPI, I2C, Watchdog, 12-Kanal 10-Bit ADC, ein Komparator, ein OPV, 4-Kanal DMA, VBO und PO-Reset.&lt;br /&gt;
&lt;br /&gt;
Der Adressraum des ZNEO ist linear und wird mit 24 Bit adressiert. Der C-Compiler reserviert (einstellbar) die untersten 32kB für „const“ Flash-Daten. Diese werden, Befehlsbreite sparend, mit 16 Bit Adresse angesprochen. Oberhalb des nachfolgenden Codebereichs werden Flash-Daten mit 24 Bit adressiert (far).&lt;br /&gt;
&lt;br /&gt;
Die ZNEO Versionen ohne paralleles Interface haben alle 128kB Flash. Bei den übrigen findet man 128, 64 oder 32kB. Dem zur Seite stehen meist 4kB RAM.&lt;br /&gt;
Der Flash Speicher ist in 2kB Bänken organisiert die getrennt gelöscht werden können. Damit ist die Emulation des fehlenden EEPROM möglich.&lt;br /&gt;
Extern, via parallelem Interface, angebundener Flash Speicher kann wie interner Flash Speicher per Programmierkabel geladen werden.&lt;br /&gt;
== Entwicklungshardware ==&lt;br /&gt;
Als komplettes Paket empfiehlt sich das Zilog Contest Kit ZNEOCTK0100KIT, verfügbar bei Mouser.com, für 49,99$. Es besteht aus USB Smart Kabel, Universal-Netzteil und ZNEO Contest Board mit Z16F2811FI (128kByte Flash), I2C EEPROM (PCA8550), SPI Thermometer (DS1722) und Punktmatrix LED Display.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls 128kByte intern Flash bietet das Zilog Entwicklungs-Kit Z16F2800100ZCOG für 99,95$. Es basiert auf dem 100-Pin Z16F2811AL20SG, externem Flash 1Mx16, externem SRAM 256Kx16, 3 LEDs, RS232, irDA, USB Smart Kabel und Universal-Netzteil. Diese Karte kann allein stehend oder als Prozessor Modul für das modulare Entwicklungssystem ZGENPRP0100MDS genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Entwicklungsboard kann man aber auch leicht selbst bauen. Notwendig sind eine Lochraster Karte, der Z16F2810VH im PLCC-68 Gehäuse, die passende Fassung für Lochraster, eine 3x2 Stiftleiste für den Anschluss des USB Smart Kabel und einige Kleinteile. Verdrahtet wird das Ganze mit 0,2-0,3mm Fädeldraht. Zur Stromversorgung reichen 4 Rundzellen&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/c/ca/Z16F2810VH_Basic.png&lt;br /&gt;
&lt;br /&gt;
Zum Programmieren und Debuggen benutzt man das preisgünstigste USB Smart Kabel ZUSBSC00100ZACG für 29,95$ oder das ähnliche Ethernet Smart Kabel ZENETSC0100ZACG für 69,99$.&lt;br /&gt;
Die bei Kauf meist veraltete Firmware des Smart Kabel sollte auf den neuesten Stand gebracht werden. Aktuelle Firmware Versionen befindet sich, mit einer genauen Update Vorschrift, im Ordner des Zilog Development Systems ZDSII\bin\firmware.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/8/85/ZilogSmartKabel.png&lt;br /&gt;
&lt;br /&gt;
== Entwicklungssoftware ==&lt;br /&gt;
Das Zilog Developer Studio II (ZDS II) ist ein integriertes Entwicklungs- und Debug-Tool für Assembler und C. Zum Zeitpunkt dieser Niederschrift in der Version 4.11.1. Es ist kostenlos und ohne Beschränkungen.&lt;br /&gt;
&lt;br /&gt;
Leider ist es ein lieblos entwickeltes Programm welches zum Absturz neigt. Besondern das Disassembler Fenster und die deaktivierbaren Variablen-Popups sind anfällig.&lt;br /&gt;
Trotzt dieser Kritikpunkte ist es gut zu bedienen und nach kurzer Zeit kann man produktiv damit arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Help-System ist durch die vielen Controllerfamilien etwas unübersichtlich aber vollständig und hilfreich.&lt;br /&gt;
&lt;br /&gt;
Die Hardware spezifische C-Header Datei enthält leider keine symbolischen Konstanten für die Bits der Konfigurations-Register des Controllers. Abhilfe schaffen nachfolgende C Dateien im ZIP: [http://www.mikrocontroller.net/wikifiles/b/bc/ZneoHeader_2008-10-09.zip ZneoHeader_2008-10-09.zip]&lt;br /&gt;
&lt;br /&gt;
Das Flashen des Controllers erfolgt direkt aus ZDS II. 10kB brauchen 8 Sekunden. 100kB sind in 40 Sekunden geladen.&lt;br /&gt;
&lt;br /&gt;
Im debugging Modus des Zielsystems kann man das Programm in getrennten Fenstern auf Hochsprach- und/oder Assembler-Ebene Schritt für Schritt abarbeiten und untersuchen. Der Einzelschritt-Betrieb reagiert relativ träge. Dafür bleibt der Debugger aber im Thread und springt nicht unkontrolliert zu Interrupts. 4 Breakpoints sind gleichzeitig möglich.&lt;br /&gt;
&lt;br /&gt;
Bei Programm-Unterbrechung werden der Callstack, Speicherinhalt, die Arbeits- und Konfigurations-Register, alle lokalen Variablen der aktuellen Funktion und die gewünschten globalen Variablen angezeigt. Natürlich kann man alle diese Werte auch verändern; globale Variable sogar während des Programmlaufs.&lt;br /&gt;
&lt;br /&gt;
Für die Produktion existiert ein separates und gutes Flash Programm SFP.&lt;br /&gt;
== Bezugsmöglichkeiten ==&lt;br /&gt;
* [http://www.digikey.com/ Digi-Key]&lt;br /&gt;
* [http://www.mouser.com/ Mouser Electronics]&lt;br /&gt;
== Dokumentation, Tools ==&lt;br /&gt;
* [http://www.zilog.com/ Zilog Incorporation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZNEO&amp;diff=31750</id>
		<title>ZNEO</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZNEO&amp;diff=31750"/>
		<updated>2008-10-09T18:45:57Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Alleinstellungsmerkmal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Der Zilog ZNEO (Z16Fx) ist ein 16/32-Bit Mikrocontroller. Der interne Flash Speicher ist 16-Bit organisiert. Jeweils 32 Bit breit sind die 14+2 Arbeitsregister.&lt;br /&gt;
&lt;br /&gt;
Durch 32 Bit Verarbeitungsbreite und Hardware MUL/DIV übersteigt die Leistung des ZNEO das sonst übliche 8-Bit Controller Niveau deutlich.&lt;br /&gt;
== Alleinstellungsmerkmal ==&lt;br /&gt;
Das unbeschränkte Zilog Entwicklungspaket mit integriertem Editor, C-Compiler, Assembler, In-System-Debugger sowie Programmier- und Debugging-Kabel ist für 30$ zu haben.&lt;br /&gt;
&lt;br /&gt;
Auf den ersten Blick findet man das auch bei anderen Controller Familien. Beim zweiten Hinschauen fehlt aber entweder die Möglichkeit zum Debugging oder die Codegröße ist begrenzt.&lt;br /&gt;
&lt;br /&gt;
Von Laien völlig unterschätzt, das Debugging. Damit verbringt man die meiste Zeit und deshalb ist es das Wichtigste am Programmieren.&lt;br /&gt;
Einen Controller ohne In-System Debugging zu programmieren ist so frustrierend und uneffizient wie das Arbeiten in Maschinensprache; Binärzahl für Binärzahl.&lt;br /&gt;
&lt;br /&gt;
== Bauformen ==&lt;br /&gt;
Der ZNEO ist als 64-pin LQFP, 68-pin PLCC, 80-Pin QFP und 100-pin LQFP verfügbar. Die 80- und 100-poligen Versionen beinhalten, bis auf eine Ausnahme, ein paralleles Adress-/Daten-Interface zu externen Komponenten.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/8/8f/ZilogZneoSmall.png&lt;br /&gt;
&lt;br /&gt;
Für Prototyping und Hobby ist die sockelbare 68-pin PLCC Version (Z16F2810VH) mit 128kB Flash, 4kB RAM  besonders interessant. Diese ist das Äquivalent der geometrisch kleineren 64-pin LQFP Version Z16F2810AG.&lt;br /&gt;
&lt;br /&gt;
Hier eine optimierte Eagle Library mit den 64- und 68-Pin Bauformen: [http://www.mikrocontroller.net/wikifiles/6/63/ZilogZneoSmall.zip ZilogZneoSmall.zip]&lt;br /&gt;
&lt;br /&gt;
== Eckdaten ==&lt;br /&gt;
Der Betriebsspannungsbereich ist 2,7-3,6V. Erwähnenswert ist dabei, dass alle rein digitalen IO Pins externe Spannung bis 5,5V vertragen.&lt;br /&gt;
Die intern erzeugte ADC Referenzspannung von 2V steht ab 3V Betriebsspannung zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Getaktet wird der Controller vom internen Oszillator mit 5.5MHz oder 32kHz, internen Watchdog Timer oder externen Oszillator/Quarz/Resonator/RC-Glied. Die maximale Taktfrequenz ist 20MHz.&lt;br /&gt;
&lt;br /&gt;
Standart Baugruppen sind drei 16-Bit Timer mit PWM, ein dedizierter 6x1/3x2-Kanal PWM Timer, zwei LIN-UART, Infrarot Encoder/Decoder, ESPI, I2C, Watchdog, 12-Kanal 10-Bit ADC, ein Komparator, ein OPV, 4-Kanal DMA, VBO und PO-Reset.&lt;br /&gt;
&lt;br /&gt;
Der Adressraum des ZNEO ist linear und wird mit 24 Bit adressiert. Der C-Compiler reserviert (einstellbar) die untersten 32kB für „const“ Flash-Daten. Diese werden, Befehlsbreite sparend, mit 16 Bit Adresse angesprochen. Oberhalb des nachfolgenden Codebereichs werden Flash-Daten mit 24 Bit adressiert (far).&lt;br /&gt;
&lt;br /&gt;
Die ZNEO Versionen ohne paralleles Interface haben alle 128kB Flash. Bei den übrigen findet man 128, 64 oder 32kB. Dem zur Seite stehen meist 4kB RAM.&lt;br /&gt;
Der Flash Speicher ist in 2kB Bänken organisiert die getrennt gelöscht werden können. Damit ist die Emulation des fehlenden EEPROM möglich.&lt;br /&gt;
Extern, via parallelem Interface, angebundener Flash Speicher kann wie interner Flash Speicher per Programmierkabel geladen werden.&lt;br /&gt;
== Entwicklungshardware ==&lt;br /&gt;
Als komplettes Paket empfiehlt sich das Zilog Contest Kit ZNEOCTK0100KIT, verfügbar bei Mouser.com, für 49,99$. Es besteht aus USB Smart Kabel, Universal-Netzteil und ZNEO Contest Board mit Z16F2811FI (128kByte Flash), I2C EEPROM (PCA8550), SPI Thermometer (DS1722) und Punktmatrix LED Display.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls 128kByte intern Flash bietet das Zilog Entwicklungs-Kit Z16F2800100ZCOG für 99,95$. Es basiert auf dem 100-Pin Z16F2811AL20SG, externem Flash 1Mx16, externem SRAM 256Kx16, 3 LEDs, RS232, irDA, USB Smart Kabel und Universal-Netzteil. Diese Karte kann allein stehend oder als Prozessor Modul für das modulare Entwicklungssystem ZGENPRP0100MDS genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Entwicklungsboard kann man aber auch leicht selbst bauen. Notwendig sind eine Lochraster Karte, der Z16F2810VH im PLCC-68 Gehäuse, die passende Fassung für Lochraster, eine 3x2 Stiftleiste für den Anschluss des USB Smart Kabel und einige Kleinteile. Verdrahtet wird das Ganze mit 0,2-0,3mm Fädeldraht. Zur Stromversorgung reichen 4 Rundzellen&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/c/ca/Z16F2810VH_Basic.png&lt;br /&gt;
&lt;br /&gt;
Zum Programmieren und Debuggen benutzt man das preisgünstigste USB Smart Kabel ZUSBSC00100ZACG für 29,95$ oder das ähnliche Ethernet Smart Kabel ZENETSC0100ZACG für 69,99$.&lt;br /&gt;
Die bei Kauf meist veraltete Firmware des Smart Kabel sollte auf den neuesten Stand gebracht werden. Aktuelle Firmware Versionen befindet sich, mit einer genauen Update Vorschrift, im Ordner des Zilog Development Systems ZDSII\bin\firmware.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/wikifiles/8/85/ZilogSmartKabel.png&lt;br /&gt;
&lt;br /&gt;
== Entwicklungssoftware ==&lt;br /&gt;
Das Zilog Developer Studio II (ZDS II) ist ein integriertes Entwicklungs- und Debug-Tool für Assembler und C. Zum Zeitpunkt dieser Niederschrift in der Version 4.11.1. Es ist kostenlos und ohne Beschränkungen.&lt;br /&gt;
&lt;br /&gt;
Leider ist es ein lieblos entwickeltes Programm welches zum Absturz neigt. Besondern das Disassembler Fenster und die deaktivierbaren Variablen-Popups sind anfällig.&lt;br /&gt;
Trotzt dieser Kritikpunkte ist es gut zu bedienen und nach kurzer Zeit kann man produktiv damit arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Help-System ist durch die vielen Controllerfamilien etwas unübersichtlich aber vollständig und hilfreich.&lt;br /&gt;
&lt;br /&gt;
Die Hardware spezifische C-Header Datei enthält leider keine symbolischen Konstanten für die Bits der Konfigurations-Register des Controllers. Abhilfe schaffen nachfolgende C Dateien im ZIP: [http://www.mikrocontroller.net/wikifiles/b/bc/ZneoHeader_2008-10-09.zip ZneoHeader_2008-10-09.zip]&lt;br /&gt;
&lt;br /&gt;
Das Flashen des Controllers erfolgt direkt aus ZDS II. 10kB brauchen 8 Sekunden. 100kB sind in 40 Sekunden geladen.&lt;br /&gt;
&lt;br /&gt;
Im debugging Modus des Zielsystems kann man das Programm in getrennten Fenstern auf Hochsprach- und/oder Assembler-Ebene Schritt für Schritt abarbeiten und untersuchen. Der Einzelschritt-Betrieb reagiert relativ träge. Dafür bleibt der Debugger aber im Thread und springt nicht unkontrolliert zu Interrupts. 4 Breakpoints sind gleichzeitig möglich.&lt;br /&gt;
&lt;br /&gt;
Bei Programm-Unterbrechung werden der Callstack, Speicherinhalt, die Arbeits- und Konfigurations-Register, alle lokalen Variablen der aktuellen Funktion und die gewünschten globalen Variablen angezeigt. Natürlich kann man alle diese Werte auch verändern; globale Variable sogar während des Programmlaufs.&lt;br /&gt;
&lt;br /&gt;
Für die Produktion existiert ein separates und gutes Flash Programm SFP.&lt;br /&gt;
== Bezugsmöglichkeiten ==&lt;br /&gt;
* [http://www.digikey.com/ Digi-Key]&lt;br /&gt;
* [http://www.mouser.com/ Mouser Electronics]&lt;br /&gt;
== Dokumentation, Tools ==&lt;br /&gt;
* [http://www.zilog.com/ Zilog Incorporation]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=31012</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=31012"/>
		<updated>2008-09-11T16:31:52Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Raggedstone 1 - Spartan-3 Development PCI-Karte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich Flip-Flops (FF) und LUTs (LUT = Lookup-Table), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen, die mehr Eingänge erfordern, als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die &#039;&#039;&#039;Flip-Flops&#039;&#039;&#039; dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch SRAM-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen Flash-ROM-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten (SRAM-basierten) FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi (seriell, parallel, Master/Slave) an. Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neukonfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zur Betriebsbereitschaft.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal mehr Logik (FF, LUTs) als ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf EEPROM-, Flash- (einige Familien von Lattice) oder AntiFuse- (Actel) Technologie. Die sogenannten AntiFuse FPGAs sind einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards. Üblich sind verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL) und im Hochpreisbereich serielle Standards bis zu 4 Gbps. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung (H-Pegel).&lt;br /&gt;
&lt;br /&gt;
Ebenso können FPGA-interne Pull-Up und Pull-Down-Widerstände zugeschaltet werden, Terminierung wird ebenfalls unterstützt. Zudem befinden sich hinter vielen IO-Pads sog. [[boundary scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
Das I/O Verhalten wird mit den IO-Constraints in einem setting-File (Xilinx *.ucf, Altera *.acf) festgelegt.&lt;br /&gt;
&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Darzu zählen neben der JTAg-Schnittstelle z.B. die Pins zum Einlesen der Konfigurationsdaten. &lt;br /&gt;
&lt;br /&gt;
Ferner sind einige wenige Pins (2 - 8) zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltung müssen diese reserviertern Pins benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1000 I/Os, die kleinsten bieten ca. 80 User-I/O. Oft werden nur BGA und QFP Gehäuse (bis ca. 240(?) Pins) angeboten.&lt;br /&gt;
&lt;br /&gt;
=== Komplexere Blöcke (Multiplizierer, RAM, PLL/DLL) ===&lt;br /&gt;
Neben den einfachen Flip-Flops beinhalten FPGAs darüber hinaus komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente (LEs), die es gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Für rechenintensive Designs, z.B. in der Signalverarbeitung, enthalten viele FPGAs Multiplizierer direkt auf dem Chip, die in einem einzigen Taktzyklus Multiplikationen durchführen können.&lt;br /&gt;
&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren RAM-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport RAM-Blöcke von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung spezieller Takte sind PLL-Komponenten (phase locked loop) auf dem FPGA integriert. Einige Hersteller setzen mit dem selben Ziel DLL-Blöcke (delay locked loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere erzeugt werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt geteilt werden oder ein Signal gleicher Frequenz, aber um eine halbe, viertel usw. Periode verschoben erzeugt werden. Typische Anwendungen sind die Ansteuerung von DDR-RAMs oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
&lt;br /&gt;
Programmierbare Prozessoren sind auch häufig bei FPGA Designs unverzichtbar. Diese sind zwar im Allgemeinen langsamer und weniger effizient als eine vollständige Implementation aus Logik-Primitiven -- aber auch deutlich &lt;br /&gt;
einfacher zu beherrschen. Insbesondere bei sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird man gerne auf eine&lt;br /&gt;
klassische CPU zurückgreifen. &lt;br /&gt;
&lt;br /&gt;
Manche FPGAs integrieren einem oder mehrere Prozessorkerne (z.B. [[AVR]] bei Atmels FPSLIC, PowerPC bei Xilinx&#039; Virtex-4 oder ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com actel]) als &#039;&#039;HardCores&#039;&#039; auf einem IC.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite gibt es auch &#039;&#039;SoftCores&#039;&#039;, Prozessorkerne die als Quelltext oder als vor-synthetisierte Netzliste vorliegen. In Abhänigkeit von den zur Verfügung stehenden Resourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig instantiiert werden. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039; -- &lt;br /&gt;
Teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil optimiert auf die FPGAs einzelner Hersteller. Auch auf vergleichsweise &lt;br /&gt;
kleine aktuelle FPGAs kann man problemlos eine 32bit-RISC-CPU integrieren.&lt;br /&gt;
Unter [[FPGA Soft Core]] findet man eine Liste einiger weit verbreiteter &#039;&#039;SoftCores&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen RAM-Blöcke oder externe Speicher-ICs (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
Die maximale „Geschwindigkeit“ eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen, möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-500 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich reale reale Systemtaktfrequenzen von meist 10-200 MHz. Maßgeblich ist, in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.B. zeitkritische Pfade entschärfen, sodass die Frequenz des Chips angehoben werden kann und der effektive Datendurchsatz trotz teilweise mehr CLKs zwischen Ein- und Ausgängen (Latenz) erhöht wird. Dieser lässt sich darüber hinaus durch die Nutzung paralleler Architekturen verbessern.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann-, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt1 von 20 MHz lassen sich z.B. 18-Bit AD-Wandler auslesen, die so z.B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen etwa 10-30% weniger Taktgeschwindigkeit bei gleichem Design zu erwarten, bzw. muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, weniger hard-ressourcen). &lt;br /&gt;
&lt;br /&gt;
Identische Chips werden oft in 2 oder mehr Geschwindigkeitsklassen angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-10% höhere Taktung zwischen zwei Speedgrades erwarten.&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
Die größten Hersteller von FPGAs sind Altera und Xilinx. Weitere Hersteller sind Lattice, Actel und Atmel.&lt;br /&gt;
&lt;br /&gt;
* [http://www.altera.com Altera]&lt;br /&gt;
* [http://www.xilinx.com Xilinx]&lt;br /&gt;
* [http://www.lattice.com Lattice]&lt;br /&gt;
* [http://www.actel.com Actel]&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau komplizierter, applikationsnaher Strukturen wird meist durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer logischen, funktionellen Beschreibung der Architektur in einer Hardwarebeschreibungssprache wie z.B. VHDL &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung in VHDL gelingt ihrerseits z.B. mit VHDL-generierenden Werkzeugen, mittels derer zuvor Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert wurden.&lt;br /&gt;
&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits und die Entkoppplung von applikationsorientierter Beschreibung sowie Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi als Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplett nutzbare Schaltungen wie serielle Bausteine, RAM-Controller und vieles mehr als Open Source zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsboards und Starterkits ==&lt;br /&gt;
=== Boards für Xilinx-FPGAs ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;fpgaevalboards&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichn.&lt;br /&gt;
! Preis (&amp;amp;euro;)&lt;br /&gt;
! FPGA&lt;br /&gt;
! RAM (MByte)&lt;br /&gt;
! Flash (MByte)&lt;br /&gt;
! USB&lt;br /&gt;
! Ethernet&lt;br /&gt;
! RS-232&lt;br /&gt;
! µC&lt;br /&gt;
! Eingabe&lt;br /&gt;
! sonst.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.knjn.com/board_Xylo.html Xylo-L]&lt;br /&gt;
| 130&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| 10base-T&lt;br /&gt;
| -&lt;br /&gt;
| LPC213x&lt;br /&gt;
| -&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xilinx.com/s3estarter Spartan3e Starter Kit]&lt;br /&gt;
| 180&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| 64 MB DDR-SDRAM&lt;br /&gt;
| 16&lt;br /&gt;
| (JTAG)&lt;br /&gt;
| 10/100&lt;br /&gt;
| 2x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 1 Drehgeber, 4 Schalter&lt;br /&gt;
| Coolrunner CPLD, LCD, 3-Bit VGA, PS/2&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=S3BOARD Digilent Spartan-3]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA, PS/2, 7seg&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys]]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 16&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| 7seg, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uxibo.de Uxibo]&lt;br /&gt;
| 88&lt;br /&gt;
| XC2S200E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA I/O, Videomux, dual PS/2, 7seg, Buzzer, IOs auf Pinleisten, dual-channel FTDI2232C, 48 MHz + prog. Oszillator, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fpgaz.com/wiki/doku.php?id=fpgaz:usbp:hw FPGAz USBP]&lt;br /&gt;
| $135&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Cypress FX2&lt;br /&gt;
| 2 Taster&lt;br /&gt;
| 8 LEDs, I2C-EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys.com/fpga/spartan/efm01_de.html EFM 01] Embedded FPGA Modul &lt;br /&gt;
| 145,-&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| -&lt;br /&gt;
| 28 x 44mm, 50 I/O auf 2.54mm Stiftleiste, WIN und LINUX Treiber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Raggedstone 1 - Spartan-3 Development PCI-Karte ====&lt;br /&gt;
* Spartan-3 FPGA FG456-Package&lt;br /&gt;
* 32 bit, 33 MHz, 3.3/5V PCI interface&lt;br /&gt;
* 4Mbit Flash Memory&lt;br /&gt;
* 16KBit serielles EEprom&lt;br /&gt;
* 4 x 7 Segment Anzeigen LED, abnehmbar&lt;br /&gt;
* LM75 Temperatursensor&lt;br /&gt;
* viele DIL-Header für eigene Erweiterungen, verschiedene werden auch durch Hersteller angeboten&lt;br /&gt;
* 2 Drucktaster&lt;br /&gt;
* Mit dem PCI-Interface kann bei entsprechender Programmierung des FPGA auf den PCI-Bus eines Hostrechners zugegriffen werden, Beispieldesign unter http://projects.varxec.net/raggedstone1&lt;br /&gt;
* Webseite: http://www.enterpoint.co.uk/moelbryn/raggedstone1.html&lt;br /&gt;
* Preis mit XC3S400 ca. €145,- (inkl MwSt.)&lt;br /&gt;
* Preis mit XC3S1500 ca. €255,-  (inkl. MwSt.)&lt;br /&gt;
&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Xilinx-Version direkt mit ISE Webpack nutzbar&lt;br /&gt;
* Xilinx XC3S1000-4FG456C, wahlweise aber auch mit Altera EP1C12F324C8 (s.u.)&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Listenpreis $99,- Endpreis: ~150 Euro (inkl. MwSt. und Versand)&lt;br /&gt;
&lt;br /&gt;
==== BurchED ====&lt;br /&gt;
http://www.burched.com/index.html&lt;br /&gt;
australischer Anbieter von Xilinx-Evaluationsboards&lt;br /&gt;
zur Zeit Webseite im Umbau&lt;br /&gt;
&lt;br /&gt;
==== Trenz-Electronic ====&lt;br /&gt;
http://www.trenz-electronic.de/products.html&lt;br /&gt;
* Kleines FPGA Board mit ucLinux und Virtex-II PowerPC, optional: ucLinux und Microblaze Softprozessor im Spartan-3 FPGA&lt;br /&gt;
* Spartan-3 FPGA Mikromodul mit 200K bis 1000K Systemgattern&lt;br /&gt;
* Pal/Gal kompatible FPGA und CPLD Module&lt;br /&gt;
&lt;br /&gt;
==== Simple-Solutions ====&lt;br /&gt;
http://www.simple-solutions.de/de/products/index.php&lt;br /&gt;
Mehrere Spartan3-FPGAs - Boards&lt;br /&gt;
&lt;br /&gt;
==== CESYS ====&lt;br /&gt;
http://www.cesys.com&lt;br /&gt;
&lt;br /&gt;
Cesys ist Entwickler und Hersteller von FPGA-boards mit Sitz in Deutschland.&lt;br /&gt;
&lt;br /&gt;
* Verschiedene FPGA boards mit USB, PCI und PCIe Schnittstellen im Lieferprogramm&lt;br /&gt;
* Je nach Ausführung mit Spartan-2/3/3E, Virtex2/2PRO/4&lt;br /&gt;
* verschiedene Speicherkonfigurationen (SO-DIMM, SRAM, SDRAM, DDR2)&lt;br /&gt;
&lt;br /&gt;
=== Boards für Altera-FPGAs ===&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* * Wahlweise mit Altera EP1C12F324C8 oder Xilinx XC3S1000-4FG456C&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Endpreis: ~150 Euro (inkl. MwSt. und Versand)&lt;br /&gt;
&lt;br /&gt;
==== Terasic TREX C1 Multimedia Development Kit ====&lt;br /&gt;
* Altera EP1C6Q240C8 &amp;amp; EP1S Serial Configuration Device&lt;br /&gt;
* Built-in USB Blaster programming circuitry (JTAG and AS mode)&lt;br /&gt;
* 1 MiB Flash Memory &amp;amp; 8 MiB SDRAM (1M x 4 x 16)&lt;br /&gt;
* CF Card Socket, 16-bit CD-quality Audio DAC&lt;br /&gt;
* TV Encoder, VGA, RS-232, PS/2, and more&lt;br /&gt;
* Many reference designs and C++ applications&lt;br /&gt;
* [http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;amp;CategoryNo=39&amp;amp;No=14 www.terasic.com.tw]&lt;br /&gt;
* fertiger Core eines CPC6128 (8-Bit Homecomputer von 1984) für dieses Board, inlusive Sourcecode (eigener Z80 in AHDL, mit 24MHz eingesetzt): [http://www.symbos.de/trex.htm http://www.symbos.de/trex.htm]&lt;br /&gt;
* Listenpreis $149,-&lt;br /&gt;
&lt;br /&gt;
==== Altera Cyclone II 2C20 ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C7N FPGA mit 20000 LEs&lt;br /&gt;
* USB-BlasterTM download cable (integriert)&lt;br /&gt;
* EPCS4 serial configuration Flash&lt;br /&gt;
* 8-Mbyte SDRAM, 512-Kb SRAM, 4-Mbyte flash &lt;br /&gt;
* externer SMA - Clock-Eingang&lt;br /&gt;
* 24-bit Audio coder/decoder (CODEC) &lt;br /&gt;
* 10 Schalter, 4 Druckknöpfe inkl Reset &lt;br /&gt;
* 4St. 7-Segmentanzeigen, 10 rote LEDs + 8 grüne LEDs&lt;br /&gt;
* VGA, RS-232, and PS/2 Stecker&lt;br /&gt;
* Zwei 40-pin expansion ports + SD/MMC socket&lt;br /&gt;
* USB-Kabel, externes Steckernetztteil, CD-Rom&lt;br /&gt;
* Reference designs&lt;br /&gt;
* Qartus II Web Edition + NIOS II Web Edition&lt;br /&gt;
* http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html&lt;br /&gt;
* Listenpreis $150,-&lt;br /&gt;
&lt;br /&gt;
==== Hpe Mini AC II - Altera Cyclone board von Gleichmann Research ====&lt;br /&gt;
* Altera Cyclone II EP2C35 FPGA (speed grade 6)&lt;br /&gt;
* Mit reprogrammierbarem Flash zur automatischen FPGA-Konfiguration&lt;br /&gt;
* 25 pin SUB-D connector (parallel) für direktes FPGA-Programmieren&lt;br /&gt;
* RS232 (9 pin SUB-D) &lt;br /&gt;
* VGA (15 pin SUB-D) mit 64 möglichen Farben&lt;br /&gt;
* Ethernet 10/100 Mbit/s, full/half duplex&lt;br /&gt;
* 1 USB 2.0 compatible full-speed target connector&lt;br /&gt;
* 3 USB 2.0 compatible full-speed host connectors&lt;br /&gt;
* Santa Cruz connector mit 40 nutzbaren I/Os&lt;br /&gt;
* Audio interface (line-in and line-out) mit CODEC&lt;br /&gt;
* SODIMM144 Sockel für (SDRAM) 256MB&lt;br /&gt;
* SDRAM-Speichersockel mit nur 32-Bit angebunden, die Hälfte des Speichers bleibt nicht nutzbar&lt;br /&gt;
* 25 MHz oscillator&lt;br /&gt;
* Prototyping area, Lötfläche&lt;br /&gt;
* 8 LEDs, grün, blau, 3x4 key matrix, 4-bit DIP switch&lt;br /&gt;
* LCD connector, 2-character 7-segment display&lt;br /&gt;
* Single step Knopf und Reset Knopf&lt;br /&gt;
* Parallelportkabel für PC&lt;br /&gt;
* Beispieldesign, Testprogramme, Datenblätter&lt;br /&gt;
* LEON3-CPU Design inkl. Source Code, Quartus IDE, SnapGear Linux&lt;br /&gt;
* Je nach Ausführung des Flashs €399,- bis €499,-&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2 - Development and Education Board ====&lt;br /&gt;
* Altera Cyclone II 2C35 FPGA mit 35000 LEs&lt;br /&gt;
* Altera Serial Configuration devices (EPCS16) für Cyclone II 2C35&lt;br /&gt;
* USB Blaster board zur Programmierung und User API&lt;br /&gt;
* 8 MB SDRAM, 4 MB Flash Memory, 512KB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, Ethernet, 10-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* Viele Besipiel mit Source Code wie TV, SD Music Player)&lt;br /&gt;
* [http://wwwab.fh-wedel.de/bause/handouts/vhdl/VhdlEinfuehrung.pdf Kleines aber nettes Tutorial zum Altera DE2 Dev. Board]&lt;br /&gt;
* Listenpreis US $495,-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cyclone III embedded Development Kit====&lt;br /&gt;
* Altera Cyclone III EP3C25 FPGA&lt;br /&gt;
* 640x480 LCD Display mit touch screen function&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* Audio Interface ADC CODEC&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstelle&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* NIOS II EVAL Lizenz&lt;br /&gt;
* IP LIB Altera&lt;br /&gt;
* Listenpreis US $495,-  ueber ALtera Webseite&lt;br /&gt;
* Bei EBV €349,- inkl. MwSt.&lt;br /&gt;
&lt;br /&gt;
==== Cyclone II EP2C35 Entwicklungsboard ====&lt;br /&gt;
* Altera Cyclone II EP2C35-F672C8 FPGA mit 33.216 LEs&lt;br /&gt;
* Insgesamt 172 I/Os exklusiv verfügbar&lt;br /&gt;
* Bis zu 256 MByte SDRAM (SODIMM Speichermodul, 64-Bit Busanbindung)&lt;br /&gt;
* 16 MByte Flash (16-Bit Busanbindung)&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstellenkontroller&lt;br /&gt;
* USB 2.0 high speed (480 Mbit) Schnittstellenkontroller&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* Abmessungen: 96mm x 68mm&lt;br /&gt;
* Kompatibel mit der frei verfügbaren Altera Entwicklungssoftware&lt;br /&gt;
* http://www.fpga-dev.de/index.php?site=ep2c35_beschreibung&lt;br /&gt;
* wird in regelmässigen Abständen für 169,- Euro über ebay vertrieben (einfach nach &amp;quot;altera cyclone&amp;quot; suchen)&lt;br /&gt;
&lt;br /&gt;
==== NanoBoard-NB1 von Altium ====&lt;br /&gt;
* kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Unterstützt eine breite Palette von Ziel-FPGAs durch Aufsteckplatinen &lt;br /&gt;
* Altera Cyclone (EP1C12-Q240C7) Aufsteckplatine enthalten &lt;br /&gt;
* Xilinx Spartan IIE (XC2S300E-PQ208) im Lieferumfang enthalten &lt;br /&gt;
* Enthält Stromversorgung mit verschiedenen Steckern für unterschiedliche Konfigurationen &lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* NanoBoard-NB1 Reference-Handbuch zur Hardware &lt;br /&gt;
* Peripherie: LCD, LEDs, Dip-Schalter, Tastenblock, Summer, ADC/DAC, 256K x 8 RAM, 8 MiB Serial Flash RAM, on-board Serial Flash RAM für FPGA-Konfig.&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, CAN, VGA, I2C, IO Stecker für allg. Zwecke &lt;br /&gt;
* Upgradefähige NanoBoard Controller Firmware &lt;br /&gt;
* Stabiler NanoBard-Sockel&lt;br /&gt;
* Listenpreis €995,-&lt;br /&gt;
=== Debugging-Hilfen ===&lt;br /&gt;
==== BusProbe, der Debugging Core von abaxor engineering  ====&lt;br /&gt;
Gerade beim Debugging größerer FPGA-Designs ist es oft notwendig auf interne Signale und Busse zuzugreifen, ohne sie an Pins des FPGAs legen zu können. &lt;br /&gt;
Mit der BusProbe kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Pluging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
[http://www.abaxor.de/produkte.html abaxor.de-Webseite]&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator von sump.org====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder intern RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigen einstellen und an andere mitarbeiten. U.a. verschiede CPUs für FPGAs.&lt;br /&gt;
* http://members.optushome.com.au/jekent/FPGA.htm&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=31011</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=31011"/>
		<updated>2008-09-11T16:31:08Z</updated>

		<summary type="html">&lt;p&gt;Mixer: /* Cyclone III embedded Development Kit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich Flip-Flops (FF) und LUTs (LUT = Lookup-Table), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen, die mehr Eingänge erfordern, als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die &#039;&#039;&#039;Flip-Flops&#039;&#039;&#039; dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch SRAM-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen Flash-ROM-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten (SRAM-basierten) FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi (seriell, parallel, Master/Slave) an. Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neukonfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zur Betriebsbereitschaft.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal mehr Logik (FF, LUTs) als ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf EEPROM-, Flash- (einige Familien von Lattice) oder AntiFuse- (Actel) Technologie. Die sogenannten AntiFuse FPGAs sind einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards. Üblich sind verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL) und im Hochpreisbereich serielle Standards bis zu 4 Gbps. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung (H-Pegel).&lt;br /&gt;
&lt;br /&gt;
Ebenso können FPGA-interne Pull-Up und Pull-Down-Widerstände zugeschaltet werden, Terminierung wird ebenfalls unterstützt. Zudem befinden sich hinter vielen IO-Pads sog. [[boundary scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
Das I/O Verhalten wird mit den IO-Constraints in einem setting-File (Xilinx *.ucf, Altera *.acf) festgelegt.&lt;br /&gt;
&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Darzu zählen neben der JTAg-Schnittstelle z.B. die Pins zum Einlesen der Konfigurationsdaten. &lt;br /&gt;
&lt;br /&gt;
Ferner sind einige wenige Pins (2 - 8) zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltung müssen diese reserviertern Pins benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1000 I/Os, die kleinsten bieten ca. 80 User-I/O. Oft werden nur BGA und QFP Gehäuse (bis ca. 240(?) Pins) angeboten.&lt;br /&gt;
&lt;br /&gt;
=== Komplexere Blöcke (Multiplizierer, RAM, PLL/DLL) ===&lt;br /&gt;
Neben den einfachen Flip-Flops beinhalten FPGAs darüber hinaus komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente (LEs), die es gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Für rechenintensive Designs, z.B. in der Signalverarbeitung, enthalten viele FPGAs Multiplizierer direkt auf dem Chip, die in einem einzigen Taktzyklus Multiplikationen durchführen können.&lt;br /&gt;
&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren RAM-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport RAM-Blöcke von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
&lt;br /&gt;
Zur Generierung spezieller Takte sind PLL-Komponenten (phase locked loop) auf dem FPGA integriert. Einige Hersteller setzen mit dem selben Ziel DLL-Blöcke (delay locked loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere erzeugt werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt geteilt werden oder ein Signal gleicher Frequenz, aber um eine halbe, viertel usw. Periode verschoben erzeugt werden. Typische Anwendungen sind die Ansteuerung von DDR-RAMs oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
&lt;br /&gt;
Programmierbare Prozessoren sind auch häufig bei FPGA Designs unverzichtbar. Diese sind zwar im Allgemeinen langsamer und weniger effizient als eine vollständige Implementation aus Logik-Primitiven -- aber auch deutlich &lt;br /&gt;
einfacher zu beherrschen. Insbesondere bei sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird man gerne auf eine&lt;br /&gt;
klassische CPU zurückgreifen. &lt;br /&gt;
&lt;br /&gt;
Manche FPGAs integrieren einem oder mehrere Prozessorkerne (z.B. [[AVR]] bei Atmels FPSLIC, PowerPC bei Xilinx&#039; Virtex-4 oder ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com actel]) als &#039;&#039;HardCores&#039;&#039; auf einem IC.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite gibt es auch &#039;&#039;SoftCores&#039;&#039;, Prozessorkerne die als Quelltext oder als vor-synthetisierte Netzliste vorliegen. In Abhänigkeit von den zur Verfügung stehenden Resourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig instantiiert werden. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039; -- &lt;br /&gt;
Teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil optimiert auf die FPGAs einzelner Hersteller. Auch auf vergleichsweise &lt;br /&gt;
kleine aktuelle FPGAs kann man problemlos eine 32bit-RISC-CPU integrieren.&lt;br /&gt;
Unter [[FPGA Soft Core]] findet man eine Liste einiger weit verbreiteter &#039;&#039;SoftCores&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen RAM-Blöcke oder externe Speicher-ICs (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
Die maximale „Geschwindigkeit“ eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen, möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-500 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich reale reale Systemtaktfrequenzen von meist 10-200 MHz. Maßgeblich ist, in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.B. zeitkritische Pfade entschärfen, sodass die Frequenz des Chips angehoben werden kann und der effektive Datendurchsatz trotz teilweise mehr CLKs zwischen Ein- und Ausgängen (Latenz) erhöht wird. Dieser lässt sich darüber hinaus durch die Nutzung paralleler Architekturen verbessern.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann-, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt1 von 20 MHz lassen sich z.B. 18-Bit AD-Wandler auslesen, die so z.B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen etwa 10-30% weniger Taktgeschwindigkeit bei gleichem Design zu erwarten, bzw. muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, weniger hard-ressourcen). &lt;br /&gt;
&lt;br /&gt;
Identische Chips werden oft in 2 oder mehr Geschwindigkeitsklassen angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-10% höhere Taktung zwischen zwei Speedgrades erwarten.&lt;br /&gt;
&lt;br /&gt;
== Hersteller ==&lt;br /&gt;
Die größten Hersteller von FPGAs sind Altera und Xilinx. Weitere Hersteller sind Lattice, Actel und Atmel.&lt;br /&gt;
&lt;br /&gt;
* [http://www.altera.com Altera]&lt;br /&gt;
* [http://www.xilinx.com Xilinx]&lt;br /&gt;
* [http://www.lattice.com Lattice]&lt;br /&gt;
* [http://www.actel.com Actel]&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau komplizierter, applikationsnaher Strukturen wird meist durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer logischen, funktionellen Beschreibung der Architektur in einer Hardwarebeschreibungssprache wie z.B. VHDL &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung in VHDL gelingt ihrerseits z.B. mit VHDL-generierenden Werkzeugen, mittels derer zuvor Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert wurden.&lt;br /&gt;
&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits und die Entkoppplung von applikationsorientierter Beschreibung sowie Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi als Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplett nutzbare Schaltungen wie serielle Bausteine, RAM-Controller und vieles mehr als Open Source zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsboards und Starterkits ==&lt;br /&gt;
=== Boards für Xilinx-FPGAs ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;fpgaevalboards&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichn.&lt;br /&gt;
! Preis (&amp;amp;euro;)&lt;br /&gt;
! FPGA&lt;br /&gt;
! RAM (MByte)&lt;br /&gt;
! Flash (MByte)&lt;br /&gt;
! USB&lt;br /&gt;
! Ethernet&lt;br /&gt;
! RS-232&lt;br /&gt;
! µC&lt;br /&gt;
! Eingabe&lt;br /&gt;
! sonst.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.knjn.com/board_Xylo.html Xylo-L]&lt;br /&gt;
| 130&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| 10base-T&lt;br /&gt;
| -&lt;br /&gt;
| LPC213x&lt;br /&gt;
| -&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xilinx.com/s3estarter Spartan3e Starter Kit]&lt;br /&gt;
| 180&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| 64 MB DDR-SDRAM&lt;br /&gt;
| 16&lt;br /&gt;
| (JTAG)&lt;br /&gt;
| 10/100&lt;br /&gt;
| 2x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 1 Drehgeber, 4 Schalter&lt;br /&gt;
| Coolrunner CPLD, LCD, 3-Bit VGA, PS/2&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=S3BOARD Digilent Spartan-3]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA, PS/2, 7seg&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys]]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 16&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| 7seg, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uxibo.de Uxibo]&lt;br /&gt;
| 88&lt;br /&gt;
| XC2S200E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA I/O, Videomux, dual PS/2, 7seg, Buzzer, IOs auf Pinleisten, dual-channel FTDI2232C, 48 MHz + prog. Oszillator, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fpgaz.com/wiki/doku.php?id=fpgaz:usbp:hw FPGAz USBP]&lt;br /&gt;
| $135&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Cypress FX2&lt;br /&gt;
| 2 Taster&lt;br /&gt;
| 8 LEDs, I2C-EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys.com/fpga/spartan/efm01_de.html EFM 01] Embedded FPGA Modul &lt;br /&gt;
| 145,-&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| -&lt;br /&gt;
| 28 x 44mm, 50 I/O auf 2.54mm Stiftleiste, WIN und LINUX Treiber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Raggedstone 1 - Spartan-3 Development PCI-Karte ====&lt;br /&gt;
* Spartan-3 FPGA FG456-Package&lt;br /&gt;
* 32 bit, 33 MHz, 3.3/5V PCI interface&lt;br /&gt;
* 4Mbit Flash Memory&lt;br /&gt;
* 16KBit serielles EEprom&lt;br /&gt;
* 4 x 7 Segment Anzeigen LED, abnehmbar&lt;br /&gt;
* LM75 Temperatursensor&lt;br /&gt;
* viele DIL-Header für eigene Erweiterungen, verschiedene werden auch durch Hersteller angeboten&lt;br /&gt;
* 2 Drucktaster&lt;br /&gt;
* Mit dem PCI-Interface kann bei entsprechender Programmierung des FPGA auf den PCI-Bus eines Hostrechners zugegriffen werden, Beispieldesign unter http://projects.varxec.net/raggedstone1&lt;br /&gt;
* Webseite: http://www.enterpoint.co.uk/moelbryn/raggedstone1.html&lt;br /&gt;
* Preis mit XC3S400 ca. €145,- (inkl MWST)&lt;br /&gt;
* Preis mit XC3S1500 ca. €255,-  (inkl. MWST)&lt;br /&gt;
&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Xilinx-Version direkt mit ISE Webpack nutzbar&lt;br /&gt;
* Xilinx XC3S1000-4FG456C, wahlweise aber auch mit Altera EP1C12F324C8 (s.u.)&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Listenpreis $99,- Endpreis: ~150 Euro (inkl. MwSt. und Versand)&lt;br /&gt;
&lt;br /&gt;
==== BurchED ====&lt;br /&gt;
http://www.burched.com/index.html&lt;br /&gt;
australischer Anbieter von Xilinx-Evaluationsboards&lt;br /&gt;
zur Zeit Webseite im Umbau&lt;br /&gt;
&lt;br /&gt;
==== Trenz-Electronic ====&lt;br /&gt;
http://www.trenz-electronic.de/products.html&lt;br /&gt;
* Kleines FPGA Board mit ucLinux und Virtex-II PowerPC, optional: ucLinux und Microblaze Softprozessor im Spartan-3 FPGA&lt;br /&gt;
* Spartan-3 FPGA Mikromodul mit 200K bis 1000K Systemgattern&lt;br /&gt;
* Pal/Gal kompatible FPGA und CPLD Module&lt;br /&gt;
&lt;br /&gt;
==== Simple-Solutions ====&lt;br /&gt;
http://www.simple-solutions.de/de/products/index.php&lt;br /&gt;
Mehrere Spartan3-FPGAs - Boards&lt;br /&gt;
&lt;br /&gt;
==== CESYS ====&lt;br /&gt;
http://www.cesys.com&lt;br /&gt;
&lt;br /&gt;
Cesys ist Entwickler und Hersteller von FPGA-boards mit Sitz in Deutschland.&lt;br /&gt;
&lt;br /&gt;
* Verschiedene FPGA boards mit USB, PCI und PCIe Schnittstellen im Lieferprogramm&lt;br /&gt;
* Je nach Ausführung mit Spartan-2/3/3E, Virtex2/2PRO/4&lt;br /&gt;
* verschiedene Speicherkonfigurationen (SO-DIMM, SRAM, SDRAM, DDR2)&lt;br /&gt;
&lt;br /&gt;
=== Boards für Altera-FPGAs ===&lt;br /&gt;
==== LiveDesign Evaluation Board von Altium ====&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* * Wahlweise mit Altera EP1C12F324C8 oder Xilinx XC3S1000-4FG456C&lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung (Druckerport) sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für allgemeine Zwecke &lt;br /&gt;
* Endpreis: ~150 Euro (inkl. MwSt. und Versand)&lt;br /&gt;
&lt;br /&gt;
==== Terasic TREX C1 Multimedia Development Kit ====&lt;br /&gt;
* Altera EP1C6Q240C8 &amp;amp; EP1S Serial Configuration Device&lt;br /&gt;
* Built-in USB Blaster programming circuitry (JTAG and AS mode)&lt;br /&gt;
* 1 MiB Flash Memory &amp;amp; 8 MiB SDRAM (1M x 4 x 16)&lt;br /&gt;
* CF Card Socket, 16-bit CD-quality Audio DAC&lt;br /&gt;
* TV Encoder, VGA, RS-232, PS/2, and more&lt;br /&gt;
* Many reference designs and C++ applications&lt;br /&gt;
* [http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;amp;CategoryNo=39&amp;amp;No=14 www.terasic.com.tw]&lt;br /&gt;
* fertiger Core eines CPC6128 (8-Bit Homecomputer von 1984) für dieses Board, inlusive Sourcecode (eigener Z80 in AHDL, mit 24MHz eingesetzt): [http://www.symbos.de/trex.htm http://www.symbos.de/trex.htm]&lt;br /&gt;
* Listenpreis $149,-&lt;br /&gt;
&lt;br /&gt;
==== Altera Cyclone II 2C20 ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C7N FPGA mit 20000 LEs&lt;br /&gt;
* USB-BlasterTM download cable (integriert)&lt;br /&gt;
* EPCS4 serial configuration Flash&lt;br /&gt;
* 8-Mbyte SDRAM, 512-Kb SRAM, 4-Mbyte flash &lt;br /&gt;
* externer SMA - Clock-Eingang&lt;br /&gt;
* 24-bit Audio coder/decoder (CODEC) &lt;br /&gt;
* 10 Schalter, 4 Druckknöpfe inkl Reset &lt;br /&gt;
* 4St. 7-Segmentanzeigen, 10 rote LEDs + 8 grüne LEDs&lt;br /&gt;
* VGA, RS-232, and PS/2 Stecker&lt;br /&gt;
* Zwei 40-pin expansion ports + SD/MMC socket&lt;br /&gt;
* USB-Kabel, externes Steckernetztteil, CD-Rom&lt;br /&gt;
* Reference designs&lt;br /&gt;
* Qartus II Web Edition + NIOS II Web Edition&lt;br /&gt;
* http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html&lt;br /&gt;
* Listenpreis $150,-&lt;br /&gt;
&lt;br /&gt;
==== Hpe Mini AC II - Altera Cyclone board von Gleichmann Research ====&lt;br /&gt;
* Altera Cyclone II EP2C35 FPGA (speed grade 6)&lt;br /&gt;
* Mit reprogrammierbarem Flash zur automatischen FPGA-Konfiguration&lt;br /&gt;
* 25 pin SUB-D connector (parallel) für direktes FPGA-Programmieren&lt;br /&gt;
* RS232 (9 pin SUB-D) &lt;br /&gt;
* VGA (15 pin SUB-D) mit 64 möglichen Farben&lt;br /&gt;
* Ethernet 10/100 Mbit/s, full/half duplex&lt;br /&gt;
* 1 USB 2.0 compatible full-speed target connector&lt;br /&gt;
* 3 USB 2.0 compatible full-speed host connectors&lt;br /&gt;
* Santa Cruz connector mit 40 nutzbaren I/Os&lt;br /&gt;
* Audio interface (line-in and line-out) mit CODEC&lt;br /&gt;
* SODIMM144 Sockel für (SDRAM) 256MB&lt;br /&gt;
* SDRAM-Speichersockel mit nur 32-Bit angebunden, die Hälfte des Speichers bleibt nicht nutzbar&lt;br /&gt;
* 25 MHz oscillator&lt;br /&gt;
* Prototyping area, Lötfläche&lt;br /&gt;
* 8 LEDs, grün, blau, 3x4 key matrix, 4-bit DIP switch&lt;br /&gt;
* LCD connector, 2-character 7-segment display&lt;br /&gt;
* Single step Knopf und Reset Knopf&lt;br /&gt;
* Parallelportkabel für PC&lt;br /&gt;
* Beispieldesign, Testprogramme, Datenblätter&lt;br /&gt;
* LEON3-CPU Design inkl. Source Code, Quartus IDE, SnapGear Linux&lt;br /&gt;
* Je nach Ausführung des Flashs €399,- bis €499,-&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2 - Development and Education Board ====&lt;br /&gt;
* Altera Cyclone II 2C35 FPGA mit 35000 LEs&lt;br /&gt;
* Altera Serial Configuration devices (EPCS16) für Cyclone II 2C35&lt;br /&gt;
* USB Blaster board zur Programmierung und User API&lt;br /&gt;
* 8 MB SDRAM, 4 MB Flash Memory, 512KB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, Ethernet, 10-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* Viele Besipiel mit Source Code wie TV, SD Music Player)&lt;br /&gt;
* [http://wwwab.fh-wedel.de/bause/handouts/vhdl/VhdlEinfuehrung.pdf Kleines aber nettes Tutorial zum Altera DE2 Dev. Board]&lt;br /&gt;
* Listenpreis US $495,-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cyclone III embedded Development Kit====&lt;br /&gt;
* Altera Cyclone III EP3C25 FPGA&lt;br /&gt;
* 640x480 LCD Display mit touch screen function&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* Audio Interface ADC CODEC&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstelle&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* NIOS II EVAL Lizenz&lt;br /&gt;
* IP LIB Altera&lt;br /&gt;
* Listenpreis US $495,-  ueber ALtera Webseite&lt;br /&gt;
* Bei EBV €349,- inkl. MwSt.&lt;br /&gt;
&lt;br /&gt;
==== Cyclone II EP2C35 Entwicklungsboard ====&lt;br /&gt;
* Altera Cyclone II EP2C35-F672C8 FPGA mit 33.216 LEs&lt;br /&gt;
* Insgesamt 172 I/Os exklusiv verfügbar&lt;br /&gt;
* Bis zu 256 MByte SDRAM (SODIMM Speichermodul, 64-Bit Busanbindung)&lt;br /&gt;
* 16 MByte Flash (16-Bit Busanbindung)&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstellenkontroller&lt;br /&gt;
* USB 2.0 high speed (480 Mbit) Schnittstellenkontroller&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* Abmessungen: 96mm x 68mm&lt;br /&gt;
* Kompatibel mit der frei verfügbaren Altera Entwicklungssoftware&lt;br /&gt;
* http://www.fpga-dev.de/index.php?site=ep2c35_beschreibung&lt;br /&gt;
* wird in regelmässigen Abständen für 169,- Euro über ebay vertrieben (einfach nach &amp;quot;altera cyclone&amp;quot; suchen)&lt;br /&gt;
&lt;br /&gt;
==== NanoBoard-NB1 von Altium ====&lt;br /&gt;
* kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Unterstützt eine breite Palette von Ziel-FPGAs durch Aufsteckplatinen &lt;br /&gt;
* Altera Cyclone (EP1C12-Q240C7) Aufsteckplatine enthalten &lt;br /&gt;
* Xilinx Spartan IIE (XC2S300E-PQ208) im Lieferumfang enthalten &lt;br /&gt;
* Enthält Stromversorgung mit verschiedenen Steckern für unterschiedliche Konfigurationen &lt;br /&gt;
* Mit Flachbandkabel für PC-Verbindung sowie weiteren Kabeln und Verbindern &lt;br /&gt;
* NanoBoard-NB1 Reference-Handbuch zur Hardware &lt;br /&gt;
* Peripherie: LCD, LEDs, Dip-Schalter, Tastenblock, Summer, ADC/DAC, 256K x 8 RAM, 8 MiB Serial Flash RAM, on-board Serial Flash RAM für FPGA-Konfig.&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, CAN, VGA, I2C, IO Stecker für allg. Zwecke &lt;br /&gt;
* Upgradefähige NanoBoard Controller Firmware &lt;br /&gt;
* Stabiler NanoBard-Sockel&lt;br /&gt;
* Listenpreis €995,-&lt;br /&gt;
=== Debugging-Hilfen ===&lt;br /&gt;
==== BusProbe, der Debugging Core von abaxor engineering  ====&lt;br /&gt;
Gerade beim Debugging größerer FPGA-Designs ist es oft notwendig auf interne Signale und Busse zuzugreifen, ohne sie an Pins des FPGAs legen zu können. &lt;br /&gt;
Mit der BusProbe kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Pluging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
[http://www.abaxor.de/produkte.html abaxor.de-Webseite]&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator von sump.org====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder intern RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigen einstellen und an andere mitarbeiten. U.a. verschiede CPUs für FPGAs.&lt;br /&gt;
* http://members.optushome.com.au/jekent/FPGA.htm&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Optokoppler&amp;diff=29810</id>
		<title>Optokoppler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Optokoppler&amp;diff=29810"/>
		<updated>2008-08-08T09:12:31Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Beschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
Optokoppler dienen zur Kopplung elektronischer Schaltungen mit Hilfe von Lichtenergie. In einem Optokoppler befindet sich ein Lichtsender ([[LED]]) und ein Lichtempfänger (z.B. Fototransistor), welche durch einen sehr kurzen Lichtleiter verbunden sind. Die elektrische (galvanische) Trennung zwischen Eingang / Ausgang ermöglicht Kopplung von Schaltungen sehr unterschiedlichen Spannungsniveaus. Das ist notwendig bei gefährlich hohen Spannungen, störverseuchten Umgebungen oder zur Verhinderung von Masseschleifen. Neben Optokopplern mit Fototransistoren als Lichtempfänger gibt es Typen mit Fotodioden oder Triacs. Typen mit Photodioden sind dabei wesentlich schneller als Transistor- und Triactypen. Ausserdem gibt es noch komplett integrierte Typen, welche ohne weitere Beschaltung wie ein normaler digitaler IC verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
Die meisten Optokoppler sind nur für digiale Signale nutzbar. Zur elektrischen Trennung von analogen Signalen eignen sich spezielle lineare Optokoppler. Diese haben meist zwei Photoempfänger, meist Photodioden. Eine Photodiode dient als [[Galvanische Trennung | galvanisch getrennter Ausgang]], die Zweite als Vergleichsausgang zur Kompensation von Drift- und Alterungseffekten. Durch diese lässt sich eine Regelung aufbauen die den LED-Strom proportional zur Helligkeit einstellt. Dadurch ist die Übertragungsfunktion des Optokopplers als linear anzusehen. Daher wird im Zusammenhang mit analogen Optokopplern häufig auch von linearen Optokopplern gesprochen.&lt;br /&gt;
&lt;br /&gt;
== Standardtypen == &lt;br /&gt;
&lt;br /&gt;
Dies soll keine erschöpfende Auflistung aller möglichen Typen sein, sondern hobbyübliche Standardtypen zusammenfassen.&lt;br /&gt;
&lt;br /&gt;
=== Typen mit Transistorausgang ===&lt;br /&gt;
&lt;br /&gt;
* CNY17/x: 1-fach Koppler im DIL6-Gehäuse &lt;br /&gt;
* PC817-Serie: 1-,2-,3- und 4-fachTyp verfügbar, CTR: 50%, 80 kHz&lt;br /&gt;
* 6N135, 6N136: 1-fach Typ, DIL8, Highspeed 1 MBit/s&lt;br /&gt;
* 6N137: 1-fach Typ, DIL8, Highspeed 10 Mbit/s&lt;br /&gt;
* HCPL 2630: 2-fach Typ, DIL8, Highspeed 10 Mbit/s&lt;br /&gt;
&lt;br /&gt;
=== Typen mit Triacausgang === &lt;br /&gt;
&lt;br /&gt;
* IL4218 TRIAC DRIVER OPTOCOUPLER&lt;br /&gt;
* MOC3020 6-Pin DIP Random-Phase Optoisolators Triac Driver Output&lt;br /&gt;
&lt;br /&gt;
=== Lineare Optokoppler ===&lt;br /&gt;
&lt;br /&gt;
* Agilent HCNR-200/201&lt;br /&gt;
* Vishay IL300&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
* [[I2C-Schaltmodul]] mit Optokoppler MOC3040 zur galvanischen Trennung von [[I2C]]-[[Bus]] und 230 Volt Netzspannung.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Servo&amp;diff=29700</id>
		<title>Servo</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Servo&amp;diff=29700"/>
		<updated>2008-08-05T12:09:44Z</updated>

		<summary type="html">&lt;p&gt;Mixer: Ein kleiner Rechtschreibfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der &#039;&#039;&#039;Servo&#039;&#039;&#039; ist unter die Aktuatoren einzuordnen und besteht aus&lt;br /&gt;
* Elektromotor mit Getriebe (Getriebemotor)&lt;br /&gt;
* Positions-Rückmelde Einrichtung (das Poti)&lt;br /&gt;
* elektronischen Steuerung und Regelung&lt;br /&gt;
Die Gehäuse und die Befestigungsmöglichkeiten sind quasi genormt, sodass man oft einen Servo probeweise durch einen anderen ersetzen kann. Derartige Servos sind im Modellbau seit langem im Gebrauch und daher ausgereift und in den Abmessungen kompakt. Sie sind auch günstig zu bekommen, etwa ab 5,- &amp;amp;#8364; bis über 100,- &amp;amp;#8364;. Die billigen sind oft langsamer und weniger präzise was den gewünschten anzufahrenden Winkel angeht. Auch kann bei minderwertigen Servos in manchen Positionen oder unter Last ein gewisses Zittern beobachtet werden. Einige Servos sind auch nicht besonders EMV - fest.&lt;br /&gt;
&lt;br /&gt;
Im Modellbau werden damit Ruder von Flugzeugen oder Booten gesteuert. Die Servos haben meist einen aufgesetzten (austauschbaren) Hebelharm der einen Winkel von etwa 270 Grad durchlaufen kann. Sie können bestimmte Positionen in recht kurzer Zeit erreichen (&amp;lt;1 Sek bzw etwas darüber) und dank des integrierten Getriebes und der elektronischen Positionsüberwachung wird diese Position auch gehalten. Bei Stromlosigkeit allerdings können Servos bereits mit wenig Kraft gedreht werden, je nachdem welcher Widerstand durch das Getriebe aufgebracht werden kann. &lt;br /&gt;
&lt;br /&gt;
Übliche Servos brauchen eine Versorgungsspannung von 5-6 V, sowie ein Ansteuersignal in etwa gleicher Höhe. Ein TTL Pegel oder µC-Output ist benutzbar. Die anzufahrende oder zu haltende Position wird durch die Impulsbreite des (normalerweise vom Fernsteuerempfänger bereitgestellten) Kanalimpulses bestimmt. Die Impulsbreite beträgt üblicherweise 1ms bis 2ms, wobei 1,5ms der Mittelstellung entspricht. Der Kanalimpuls wird etwa alle 20ms wiederholt. Die genauen Werte von Impulsabstand und Impulsbreite können von Hersteller zu Hersteller etwas variieren (0,8ms..2,2ms).&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;digitalen&#039;&#039;&#039; Servos haben eine höhere Stellgenauigkeit, ziehen auch meist mehr Strom, kosten aber mehr. (ab etwa 40,- &amp;amp;#8364;).&lt;br /&gt;
&lt;br /&gt;
Sonderform: &amp;quot;Segelwinde&amp;quot;, &#039;&#039;&#039;Windenservo&#039;&#039;&#039;. Diese Formen sind auf Kraftentwicklung hin ausgelegt. Der Abtriebskopf, der anstatt eines Hebels mit einer Scheibe bestückt wird, kann mehrere vollständige 360° Umdrehungen ausführen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=26556</id>
		<title>Benutzer:Mixer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=26556"/>
		<updated>2008-02-27T16:42:55Z</updated>

		<summary type="html">&lt;p&gt;Mixer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=zur Person=&lt;br /&gt;
&lt;br /&gt;
Komme aus Bayerisch-Schwaben nahe Augsburg&lt;br /&gt;
&lt;br /&gt;
*Baujahr 1987&lt;br /&gt;
*Bayerischer Realschulabschluss 2004&lt;br /&gt;
*Facharbeiterprüfung Elektroniker für Betriebstechnik 2008&lt;br /&gt;
*zur Zeit in der Montage eines Energieversorgers tätig&lt;br /&gt;
*ab 09/2008 Berufsoberschule&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interessen=&lt;br /&gt;
==Elektronik==&lt;br /&gt;
*AVR, bis jetzt nur ASM&lt;br /&gt;
*Elektronik allgemein&lt;br /&gt;
*Linux (Ubuntu)&lt;br /&gt;
&lt;br /&gt;
==andere Interessen==&lt;br /&gt;
*Schießen, Gewehr und Pistole (aber nur mit Luft)&lt;br /&gt;
*aktiver Sport&lt;br /&gt;
*Fußball&lt;br /&gt;
*Formel 1&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=26522</id>
		<title>Benutzer:Mixer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mixer&amp;diff=26522"/>
		<updated>2008-02-25T18:05:31Z</updated>

		<summary type="html">&lt;p&gt;Mixer: erster Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo aus Bayern!&lt;/div&gt;</summary>
		<author><name>Mixer</name></author>
	</entry>
</feed>