<?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=84.156.75.65</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=84.156.75.65"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/84.156.75.65"/>
	<updated>2026-04-10T23:20:20Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Feuchtesensor&amp;diff=27376</id>
		<title>Feuchtesensor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Feuchtesensor&amp;diff=27376"/>
		<updated>2008-04-11T14:40:36Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Feuchtigkeitssensoren bzw. Feuchtesensoren arbeiten meist nach dem Prinzip eines feuchtigkeitsabhängigen Kondensators.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Typen==&lt;br /&gt;
&lt;br /&gt;
===Philips H1 2322 691 90001===&lt;br /&gt;
vom Reichelt (Datenblatt dort downloaden):&amp;lt;br&amp;gt;&lt;br /&gt;
jetzt von vishay hergestellt: http://www.vishay.com/docs/29001/23226919.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
Applikation von Valvo dazu:&lt;br /&gt;
http://docs.poulter.de/Elektronik/Sensoren/Luftfeuchtesensor%20VALVO.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
FEUCHTESENSOR Sensor für Feuchtigkeit  € 10.00&amp;lt;br&amp;gt;&lt;br /&gt;
Feuchtesensor zur Messung und Regelung der relativen Luftfeuchte&amp;lt;br&amp;gt;&lt;br /&gt;
Kapazität: 122pF +/-15%&lt;br /&gt;
Empf.(Frel=43%): 0,4pF/%Frel&amp;lt;br&amp;gt;&lt;br /&gt;
Meßfrequenz: 1kHz...1MHz&lt;br /&gt;
Meßbereich: 10%...90%&amp;lt;br&amp;gt;&lt;br /&gt;
Top: 0°C...+85°C&lt;br /&gt;
Vmax: 15V&amp;lt;br&amp;gt;&lt;br /&gt;
Weitere Informationen zu diesem Artikel finden Sie in den Datenblättern &lt;br /&gt;
&lt;br /&gt;
Auswerten z.B. mit einem Oszillator muss man selbst!&lt;br /&gt;
&lt;br /&gt;
===KM33 von Innovative Computer===&lt;br /&gt;
ab € 43,00&amp;lt;br&amp;gt;&lt;br /&gt;
Schuricht 115-245057&amp;lt;br&amp;gt;&lt;br /&gt;
vermutlich auch nur ein variabler Kondensator&lt;br /&gt;
&lt;br /&gt;
===HIH-3610, HIH3610===&lt;br /&gt;
von Honeywell (sehr linear, aber über € 23,00)&amp;lt;br&amp;gt;&lt;br /&gt;
analoger Ausgang 0..4V&amp;lt;br&amp;gt;&lt;br /&gt;
Versionen:&lt;br /&gt;
* -001 RM 2,54 unkalibriert&lt;br /&gt;
* -002 RM 1,27 unkalibriert&lt;br /&gt;
* -003 RM 2,54 kalibriert&lt;br /&gt;
* -004 RM 1,27 kalibriert&lt;br /&gt;
Nachtrag: sind abgekündigt, Nachfolger:&amp;lt;br&amp;gt;&lt;br /&gt;
HIH-4000-001, HIH4000-001 und HIH-4000-003, HIH4000-003&amp;lt;br&amp;gt;&lt;br /&gt;
http://catalog.sensing.honeywell.com/ss.asp?FAM=humiditymoisture &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===H25K5A===&lt;br /&gt;
von Sencera (&amp;lt;4€ bei CSD)&amp;lt;br&amp;gt;&lt;br /&gt;
Variabler Widerstand bei Wechselspannung.&amp;lt;br&amp;gt;&lt;br /&gt;
Bereich 0..+60°C, 20..90%RH. Achtung: auch Lagerung nur bis 90%RH&amp;lt;br&amp;gt;&lt;br /&gt;
Temperaturkompensierte Messung über Spannungsteiler mit handelsüblichem NTC.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HS1101===&lt;br /&gt;
von Humirel (~14€ bei CSD)&amp;lt;br&amp;gt;&lt;br /&gt;
Variable Kapazität, 164..200pF.&amp;lt;br&amp;gt;&lt;br /&gt;
Temperaturbereich -40..+100°C.&amp;lt;br&amp;gt;&lt;br /&gt;
Temperaturkompensierter Oszillator mit CMOS-Timer 555 im Datasheet.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===INSED===&lt;br /&gt;
* HIH3602A Feuchtigkeit und Temperatur (ab € 79,00) bei RS-Components&lt;br /&gt;
* HIH3602C Feuchtigkeit und Temperatur (ab € 82,00) bei RS-Components&lt;br /&gt;
&lt;br /&gt;
Bezugsquellen:&amp;lt;br&amp;gt;&lt;br /&gt;
INSED GmbH + Co KG Sensoren für die Industrie  Kronenstr 10  70794 Filderstadt  0711-9972758 Fax 9972762&amp;lt;br&amp;gt;&lt;br /&gt;
IBA GmbH Ingenieurbüro für Sensorik&lt;br /&gt;
Am Sandborn 14  63500 Seligenstadt  06182 95980&amp;lt;br&amp;gt;&lt;br /&gt;
Schuricht  RS-Components  Farnell&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===www.vaisala.be===&lt;br /&gt;
* 17204HM-humichip- mit Temp-Sensor KTY85-110 (special selection), analog 0..1V&amp;lt;br&amp;gt;&lt;br /&gt;
* 17205HM ohne Temp-Sensor analog 0..1V&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datenblatt fand ich nicht auf deren Homepage, aber im Forum:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-15717.html#48616 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vermutlich verkaufen sie lieber fertige Module:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.vaisala.com/businessareas/instruments/products/humidity&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.vaisala.com/businessareas/instruments/products/humidity/modules/oemmodules&lt;br /&gt;
&lt;br /&gt;
===Sensirion===&lt;br /&gt;
Von [http://www.sensirion.com Sensirion] gibt es eine ganze Latte digitaler (I2C-ähnlich, digital 2-wire output): SHT10  SHT11  SHT15  SF1  SHT71  SHT75  EvaKit EK-H2  EK-H3&lt;br /&gt;
* Bezugsquellen: http://www.micromaus.de, http://www.driesen-kern.de/ und CSD (SHT11, 20€)&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/48590#372123 C-Bibliothek] von Timo Dittmar im Forum&lt;br /&gt;
* Applikationnotes (PDF) [http://www.sensirion.com/images/getFile?id=91 #91] und [http://www.sensirion.com/images/getFile?id=95 #95] mit C-Beispielen&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Digitaltechnik&amp;diff=27375</id>
		<title>Digitaltechnik</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Digitaltechnik&amp;diff=27375"/>
		<updated>2008-04-11T14:39:52Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Bit==&lt;br /&gt;
&lt;br /&gt;
Abkürzung für &#039;&#039;&#039;Bi&#039;&#039;&#039;nary digi&#039;&#039;&#039;t&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Bit ist die kleinste digitale Einheit und kann die Werte 0 und 1 annehmen.&lt;br /&gt;
&lt;br /&gt;
Siehe auch&lt;br /&gt;
* [[Bitmanipulation]]&lt;br /&gt;
&lt;br /&gt;
==Nibble==&lt;br /&gt;
&lt;br /&gt;
Nibble ist eine weniger gebräuchliche Bezeichnung für ein halbes Byte (4 Bit). In diesem Zusammenhang spricht man häufig von HIGH- und LOW-Nibble. Ein Nibble entspricht auch jeweils einem Zeichen der hexadezimalen Darstellung. &lt;br /&gt;
&lt;br /&gt;
==Byte==&lt;br /&gt;
&lt;br /&gt;
Abkürzung für &#039;&#039;&#039;B&#039;&#039;&#039;inar&#039;&#039;&#039;y&#039;&#039;&#039; &#039;&#039;&#039;Te&#039;&#039;&#039;rm.&lt;br /&gt;
&lt;br /&gt;
Ein Byte besteht aus 8 Bits und kann damit 2^8 = 256 verschiedene Werte annehmen.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/images/bits.gif&lt;br /&gt;
&lt;br /&gt;
In der üblichen Schreibweise (INTEL) werden die einzelnen Bits von rechts nach links abgezählt. &amp;quot;MSB&amp;quot; nennt man das höchstwertige Bit (ganz links, Bit 7), &amp;quot;LSB&amp;quot; das niederwertigste (ganz rechts, Bit 0).&lt;br /&gt;
&lt;br /&gt;
Auf dem PowerPC ist es umgekehrt, dort ist Bit #0 das MSB (links) und Bit 7/15/31/63 ganz rechts das LSB.&lt;br /&gt;
&lt;br /&gt;
==Word==&lt;br /&gt;
&lt;br /&gt;
Ein Word besteht aus zwei oder mehr (2^N) aufeinanderfolgenden Bytes. Im Falle von zwei Bytes kann es somit 256*256 = 65536 Werte annehmen.&lt;br /&gt;
&lt;br /&gt;
Prozessoren mit mehr als 16 Bits &amp;quot;natürlicher&amp;quot; Breite bezeichnen oft ihre natürliche Breite als Word (also ein 32-bit-Prozessor 4 aufeinanderfolgende Bytes, ein 64-bit-Prozessor 8 aufeinanderfolgende Bytes).  Allerdings wird dies nicht mehr durchweg einheitlich gehandhabt.  Auf einer [[X86]]-Architektur ist es oft unter MS Windows aufgrund seiner Abstammung von einem 16-Bit-Betriebssystem üblich, zwei Bytes als Word zu bezeichnen.  Wird der gleiche Prozessor unter [[Unix]] betrieben, bezeichnet ein Word dagegen 4 aufeinanderfolgende Bytes, da das Betriebssystem als 32-Bit System auf diesen Prozessor portiert worden ist (zu Zeiten, da die X86-Architektur bereits eine natürliche Wortbreite von 32 Bit hatte, also i386 und höher).&lt;br /&gt;
&lt;br /&gt;
=== Endianness ===&lt;br /&gt;
&lt;br /&gt;
In Verbindung mit einem 16, 32 oder 64 Bit [[Prozessor]] ist das Problem interessant, in welcher Reihenfolge die Bytes im Speicher angeordnet sind, also das höherwertige Byte an vorderer oder hinterer Stelle. Die unterschiedliche Art der Darstellung z.B. zwischen den x86- und PowerPC Prozessoren nennt man &amp;quot;Little Endian&amp;quot; und &amp;quot;Big Endian&amp;quot;. Diese kuriose Bezeichnung lehnt an das Problem an, von welchem Ende man ein Ei aufschlagen sollte.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Little Endian Hex Dump:&lt;br /&gt;
&lt;br /&gt;
 00000000  20 8F 04 08 23 00 00 00  12 00 00 00 1E 00 00 00  | ...#...........|&lt;br /&gt;
 00000010  94 8D 04 08 00 00 00 00  12 00 08 00 &#039;&#039;&#039;E6 01&#039;&#039;&#039; 00 00  |................|&lt;br /&gt;
&lt;br /&gt;
Der markierte Bereich auf Adresse 0x1C zeigt das 16-bit Word mit dem Wert&lt;br /&gt;
&lt;br /&gt;
0xE6 + (256 * 0x01) = 0x01E6 = 486&lt;br /&gt;
&lt;br /&gt;
Die jeweils größeren Adressen enthalten dabei die höherwertigen Bytes des Word.&lt;br /&gt;
&lt;br /&gt;
Auf einer Big-Endian Maschine würde der Hexdump so aussehen:&lt;br /&gt;
&lt;br /&gt;
 00000000  8F 20 08 04 00 23 00 00  00 12 00 00 00 1E 00 00  |. ...#..........|&lt;br /&gt;
 00000010  8D 94 08 04 00 00 00 00  00 12 00 08 &#039;&#039;&#039;01 E6&#039;&#039;&#039; 00 00  |................|&lt;br /&gt;
&lt;br /&gt;
Die höheren Adressen enthalten hier die niederwertigen Bytes.  Das erscheint auf den ersten Blick unlogisch, hat aber andererseits den Vorteil, daß man die Zahl (0x01E6) &amp;quot;auf den ersten Blick&amp;quot; im Hexdump erkennen kann.&lt;br /&gt;
&lt;br /&gt;
Mikroprozessoren wurden von Intel zunächst in Little-Endian Byteorder eingeführt, worauf Motorola mit Big-Endian Byteorder reagierte.  Viele [[RISC]]-Prozessoren kann man theoretisch per Hardwarebit in ihrer Byteorder umschalten, wobei dies praktisch so früh erfolgen muß, daß die gesamte Maschine (einschließlich [[BIOS]] etc.) darauf eingerichtet sein muß.&lt;br /&gt;
&lt;br /&gt;
Big-Endian ist auch die sogenannte &#039;&#039;Network Byte Order&#039;&#039;, d.h. insbesondere im IP-Bereich werden alle Daten &amp;quot;auf dem Draht&amp;quot; in dieser Anordnung übertragen.  Entsprechend müssen Little-endian Maschinen in ihren Netzwerkprotokollen sehr viel zwischen beiden Anordnungen übersetzen, so daß es z.B. beim Intel Pentium einen eigenen Prozessorbefehl für diese Operation gibt.&lt;br /&gt;
&lt;br /&gt;
* Typische Vertreter für Little-Endian sind:&lt;br /&gt;
** [[X86]]&lt;br /&gt;
** Zilog [[Z80]], da er vom Intel 8080 abstammt&lt;br /&gt;
** DEC Alpha&lt;br /&gt;
** [[AVR]] mit [[AVR-GCC]]&lt;br /&gt;
&lt;br /&gt;
* Typische Vertreter für Big-Endian sind:&lt;br /&gt;
** Motorola [[MC68000]]&lt;br /&gt;
** [[PowerPC]]&lt;br /&gt;
** [[SPARC]]&lt;br /&gt;
** Zilog [[Z8]] und Z8000&lt;br /&gt;
&lt;br /&gt;
Mit der Endianess in Verbindung steht die Frage der Bitnummerierung. Wenn man bei Big-Endian die Bits von rechts nach links nummeriert, bekommt man spätestens bei Bitfeldern Probleme. 68020 nummeriert deshalb Einzelbits von rechts nach links, die später hinzugekommenden Bitfelder von links nach rechts. Weshalb solche Prozessoren die Bits manchmal konsequent von links nach rechts nummerieren (z.B. PowerPC), was jene irritiert, die in der Bitnummer auch die Wertigkeit des Bits sehen.&lt;br /&gt;
&lt;br /&gt;
=== Alignment auf größeren Prozessoren  ===&lt;br /&gt;
&lt;br /&gt;
Damit wird die Ausrichtung (engl. Alignment) von Daten mit mehr als ein Byte Länge beschrieben. Manche Prozessoren benötigen bei Zugriffen auf ein Word eine Adresse, die mit der Wortgröße ausgerichtet ist, besonders [[RISC]]-[[Prozessor]]en.  Soll beispielsweise auf ein 32-Bit Word zugegriffen werden, so muß die Adresse dann ebenfalls durch 4 teilbar sein (32 Bit = 4 Byte).  Dies wird erforderlich, da der gesamte Prozessor- und Speicherbus in dieser Wortgröße organisiert ist, so daß ein &#039;&#039;unaligned access&#039;&#039; (Zugriff auf nicht teilbare Adresse) mehr als einen Buszyklus verursachen würde.  Ein solcher Zugriff generiert auf diesen Prozessoren dann einen [[Trap]].  Andere Prozessoren (z.B. [[X86]]) können diesen &#039;&#039;unaligned access&#039;&#039; zwar ausführen, indem sie die Ergebnisse von zwei Speicherzyklen zum gewünschten Word kombinieren, jedoch ist dieser Mehrfachzugriff uneffektiv, so daß [[Compiler]] sich trotzdem gern an die Ausrichtung auf ganze Wortgrenzen halten, beispielsweise beim Ausrichten von [[struct]] Elementen durch Einfügen von Füllbytes (padding bytes), oder durch Einfügen von [[NOP]]s vor Beginn einer neuen Funktion.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=DebugWIRE&amp;diff=27374</id>
		<title>DebugWIRE</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=DebugWIRE&amp;diff=27374"/>
		<updated>2008-04-11T14:39:07Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;debugWIRE&#039;&#039;&#039; ist die Bezeichnung einer Debug-Schnittstelle, die&lt;br /&gt;
Atmel für die kleineren Mitglieder seiner [[AVR]]-Controllerfamilie&lt;br /&gt;
entwickelt hat, die nicht über [[JTAG]] verfügen.  Es wurde vor allem&lt;br /&gt;
konzipiert für Controller mit wenigen Pins, bei denen der für JTAG&lt;br /&gt;
notwendige Aufwand von 4 separaten Leitungen die möglichen&lt;br /&gt;
Applikationen zu stark einschränken würde.  Daher ist es bei allen&lt;br /&gt;
moderneren ATtiny-Controllern anzutreffen, aber auch bei einigen&lt;br /&gt;
kleinen ATmega-Typen (ATmega48/88/168/328 bzw. deren&lt;br /&gt;
Picopower-Versionen).&lt;br /&gt;
&lt;br /&gt;
==Physik==&lt;br /&gt;
&lt;br /&gt;
debugWIRE ist als sogenannter Eindrahtbus konzipiert, ähnlich wie der&lt;br /&gt;
Dallas (jetzt Maxim) [[Bus#1-Wire][1-wire-Bus]].  Es erfolgt eine bidirektionale&lt;br /&gt;
Datenübertragung über nur einen einzigen Draht (und Masse als&lt;br /&gt;
Rückleitung).  Um die Applikation in den ihr zur Verfügung stehenden&lt;br /&gt;
Pins möglichst wenig einzuschränken, wurde die /RESET-Leitung für&lt;br /&gt;
debugWIRE doppelt belegt.&lt;br /&gt;
&lt;br /&gt;
Die Realisierung als Eindrahtbus stellt einen Kompromiss dar, der bei&lt;br /&gt;
der Gestaltung des Zielsystems berücksichtigt werden muss.  Um den&lt;br /&gt;
bidirektionalen Datentransfer ohne Schaden an Ausgangstreibern bei&lt;br /&gt;
möglichen Bus-Kollisionen zu realisieren, arbeiten lediglich zwei&lt;br /&gt;
Open-Drain-Ausgänge (einer im Emulator und einer im AVR) auf den Bus&lt;br /&gt;
und können ihn nach &#039;&#039;low&#039;&#039; ziehen.  In Richtung &#039;&#039;high&#039;&#039; wird er&lt;br /&gt;
durch einen integrierten Widerstand gegen V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt; (pull-up) gezogen, was&lt;br /&gt;
naturgemäß in einer Spannungs-Zeit-Kurve in Form einer&lt;br /&gt;
Exponentialfunktion resultiert.  Die RC-Zeitkonstante des gesamten&lt;br /&gt;
Eindrahtbusses (bei der der genaue Wert für C abhängig ist vom Aufbau&lt;br /&gt;
des Zielsystems) limitiert die mögliche Datenübertragungsrate.&lt;br /&gt;
&lt;br /&gt;
Beim Aufbau muss aus diesem Grunde darauf geachtet werden, dass die&lt;br /&gt;
/RESET-Leitung keine zusätzliche kapazitive Last erhält und dass ein&lt;br /&gt;
eventuell vorhandener externer Pullup-Widerstand nach V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt; nicht&lt;br /&gt;
kleiner als 10 kΩ dimensioniert ist.  (Auf eine Anfrage bei einem&lt;br /&gt;
Problem hat die Atmel-Hotline jedoch auch teilweise bereits ein&lt;br /&gt;
Minimum von 4,7 kΩ empfohlen.)  Zwar ist dieser Widerstand laut&lt;br /&gt;
Dokumentation nicht erforderlich, aber er kann u. U. die&lt;br /&gt;
Übertragungsqualität des Busses verbessern helfen.&lt;br /&gt;
&lt;br /&gt;
Da eine derartige Beschaltung der /RESET-Leitung den Richtlinien zum&lt;br /&gt;
EMV-festen Schaltungsentwurf entsprechend&lt;br /&gt;
[http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf Appnote AVR040]&lt;br /&gt;
widerspricht, sollte man bei einer Platinenentwicklung die&lt;br /&gt;
EMV-Schutzbeschaltung vorsehen aber für das Debuggen mittels debugWIRE&lt;br /&gt;
nicht bestücken.&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
&lt;br /&gt;
Das eigentliche debugWIRE-Protokoll wird von Atmel als Firmengeheimnis&lt;br /&gt;
betrachtet und ist nicht veröffentlicht.  Der einzige Weg, dieses zu&lt;br /&gt;
nutzen ist durch den Einsatz eines entsprechenden Emulators.  Derzeit&lt;br /&gt;
stehen dafür das&lt;br /&gt;
[http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3353 JTAG ICE mkII]&lt;br /&gt;
und der&lt;br /&gt;
[http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3891 AVR Dragon]&lt;br /&gt;
zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die im [[AVR]] untergebrachte debugWIRE-Maschine ist weniger mächtig&lt;br /&gt;
als bei [[JTAG]].  Im Wesentlichen kann sie nur solche Tätigkeiten&lt;br /&gt;
erledigen, die auch die CPU des Controllers im normalen Betrieb&lt;br /&gt;
erledigen kann (einschließlich der Abarbeitung von SPM-Befehlen zum&lt;br /&gt;
Ändern des Flash-ROMs).  Damit lassen sich entsprechend keine Fuses&lt;br /&gt;
und Lockbits lesen oder setzen.  Anders als [[JTAG]] besitzt debugWIRE&lt;br /&gt;
keine Breakpoint-Möglichkeiten in der CPU-Hardware, damit können&lt;br /&gt;
Breakpoints nur über das Einfügen von BREAK-Befehlen in den&lt;br /&gt;
Flash-ROM-Inhalt realisiert werden (Software-Breakpoint).  Dies&lt;br /&gt;
erfolgt transparent durch die Firmware des JTAG ICE, die nach dem&lt;br /&gt;
Erreichen des Breakpoints den ursprünglichen Inhalt der entsprechenden&lt;br /&gt;
Seite im Flash-ROM wieder herstellt.  Daten-Breakpoints sind nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
Das entsprechende häufige Umprogrammieren des Flash-ROM-Inhaltes trägt&lt;br /&gt;
zur Abnutzung desselben bei.  Dies sollte berücksichtigt werden, wenn&lt;br /&gt;
man in Erwägung zieht, Geräte nach dem Debuggen noch ihrer&lt;br /&gt;
tatsächlichen Nutzung zuzuführen.&lt;br /&gt;
&lt;br /&gt;
Insgesamt abstrahiert das JTAG ICE mkII (bzw. der AVR Dragon) die&lt;br /&gt;
Details des Protokolls auf eine Schnittstelle, die im Wesentlichen&lt;br /&gt;
komplett der bei einer Emulation über [[JTAG]] entspricht.&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des debugWIRE-Modus erfolgt durch das Setzen (also&lt;br /&gt;
Programmieren auf den Bitwert 0) der DWEN-Fuse, die normalerweise im&lt;br /&gt;
&#039;&#039;high fuse byte&#039;&#039; zu finden ist.  Ab diesem Moment steht der&lt;br /&gt;
/RESET-Pin nicht mehr für seine normale Reset-Funktion zur Verfügung,&lt;br /&gt;
daher lässt sich dann auch das [[ISP]]-Protokoll nicht mehr nutzen.&lt;br /&gt;
&lt;br /&gt;
Das Abschalten des debugWIRE-Modus erfolgt in zwei Stufen.  In einer&lt;br /&gt;
ersten Stufe wird mit einem speziellen Befehl an das JTAG ICE mkII ein&lt;br /&gt;
CPU-Reset ausgeführt, der die debugWIRE-Einheit vorübergehend&lt;br /&gt;
deaktiviert und damit die normale /RESET-Funktion wiederherstellt.&lt;br /&gt;
Damit lässt sich nachfolgend normales [[ISP]]-Protokoll anwenden, um&lt;br /&gt;
die DWEN-Fuse wieder zurückzusetzen (debugWIRE selbst kann keine Fuses&lt;br /&gt;
ändern).  Dieser vorübergehende Zustand dauert an bis zum nächsten&lt;br /&gt;
Aus- und Einschalten des [[AVR]], in diesem Moment wird dann die&lt;br /&gt;
DWEN-Fuse neu bewertet.  Technisch ist es ebenso möglich, die&lt;br /&gt;
DWEN-Fuse einfach aktiviert zu lassen und den [[ISP]]-Modus nur&lt;br /&gt;
temporär für andere Aufgaben zu nutzen.  Nach dem erneuten Einschalten&lt;br /&gt;
ist der [[AVR]] dann wieder im debugWIRE-Modus.&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
&lt;br /&gt;
[[AVR-Studio]] kann mit den entsprechenden Emulatoren umgehen und&lt;br /&gt;
bietet die debugWIRE-Schnittstelle automatisch als Debugmöglichkeit&lt;br /&gt;
für alle AVRs an, bei denen sie vorhanden ist.  (Genauer: bei denen&lt;br /&gt;
sie im sogenannten &#039;&#039;part description file&#039;&#039; aufgeführt worden ist.)&lt;br /&gt;
&lt;br /&gt;
[[AVRDUDE]] kann debugWIRE über die Manipulation der Fuses zuschalten&lt;br /&gt;
und kann im debugWIRE-Modus den Inhalt von Flash-ROM oder EEPROM lesen&lt;br /&gt;
oder schreiben.  Das Rückschalten aus dem debugWIRE-Modus erfolgt&lt;br /&gt;
zweistufig so, wie es von der Hardware vorgegeben ist.  Dazu aktiviert&lt;br /&gt;
man ein entsprechendes Kommando für eine ISP-Programmierung mittels&lt;br /&gt;
JTAG ICE mkII (&#039;&#039;-c jtag2isp&#039;&#039;) oder mittels AVR Dragon (&#039;&#039;-c dragon_isp&#039;&#039;).&lt;br /&gt;
Wenn dieses Kommando fehlschlägt, versucht [[AVRDUDE]]&lt;br /&gt;
anschließend das temporäre Abschalten des debugWIRE-Modus und trennt&lt;br /&gt;
sich vom Emulator.  Ein erneutes Absetzen des gleichen Kommandos&lt;br /&gt;
sollte dann im [[ISP]]-Modus ganz normal funktionieren.&lt;br /&gt;
&lt;br /&gt;
[http://avarice.sourceforge.net/ AVaRICE] kann mit der Option -w über&lt;br /&gt;
debugWIRE sowohl das JTAG ICE mkII als auch den AVR Dragon bedienen.&lt;br /&gt;
Es dient dabei als Bindeglied zum [[GDB]], der die eigentlichen&lt;br /&gt;
Debugger-Aufgaben erledigt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=433_MHz_Funk%C3%BCbertragung&amp;diff=27373</id>
		<title>433 MHz Funkübertragung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=433_MHz_Funk%C3%BCbertragung&amp;diff=27373"/>
		<updated>2008-04-11T14:37:03Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Funkmodule ==&lt;br /&gt;
&lt;br /&gt;
Maximale Sendeleistung üblicher Funkmodule: 10 mW. Bekannter Hersteller: Aurel (http://www.aurel.it), Bezugsquellen: Conrad und funkmodul.com. Sehr beliebt ist auch das [[RFM12]] von Pollin.&lt;br /&gt;
&lt;br /&gt;
=== AM ===&lt;br /&gt;
&lt;br /&gt;
Arbeiten mit On-Off-Keying, d.h. das HF-Signal wird zur Übertragung von 1/0 einfach an/abgeschaltet. Dies ist die einfachste (billigste) Lösung.&lt;br /&gt;
&lt;br /&gt;
Statt AM wird dafür auch die Abkürzung ASK benutzt. Sie steht für &amp;quot;amplitude shift keying&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren wird gern in Funksteckdosen angewandt. Der Sender ist dabei ein Oszillator mit einem SAW-Resonator. Die Anschwingzeit liegt bei ca. 30µs.&lt;br /&gt;
Um diese Zeit wird ein &amp;quot;1&amp;quot;-Impuls verkürzt. Die Sendefrequenz hat eine Toleranz von ca. +/- 100 kHz. Ein Vorteil für den Batteriebetrieb besteht darin, dass der Sender nur beim Senden der Impulse Energie benötigt. In den Pausen ist der Sender abgeschaltet und spart Strom.&lt;br /&gt;
Der Empfänger ist als Pendelaudion aufgebaut. Dazu sind nur wenige Bauteile erforderlich. Die entstehende Störstrahlung erzwingt einen Mindestabstand von ca. 1 m zwischen zwei Empfängern.&lt;br /&gt;
Das Pendelaudion arbeitet als relativ breitbandiger Empfänger und verträgt sich deshalb gut mit dem SAW-Resonator, der relativ große Toleranzen der Sendefrequenz mit sich bringt.&lt;br /&gt;
Die Kombination beider Techniken bietet dann eine Reichweite von bis zu 30m innerhalb von Gebäuden, bzw. bis zu 300m außerhalb.&lt;br /&gt;
&lt;br /&gt;
=== FM (FSK) ===&lt;br /&gt;
&lt;br /&gt;
Teurer, und besser.&lt;br /&gt;
&lt;br /&gt;
Besser bedeutet hier eine höhere Datenrate und eine größere Reichweite bei gleicher Sendeleistung. Der Bauteilaufwand und die Kosten sind jedoch größer als bei den einfachen AM-Baugruppen. Der Energiebedarf ist ebenfalls höher.&lt;br /&gt;
&lt;br /&gt;
Der Grund liegt in der geringeren Bandbreite, auf die die Sendeenergie konzentriert wird. Der Sender arbeitet jedoch im Dauerbetrieb und benötigt deshalb zur Datenübertragung mehr Energie. Der Empfänger ist prinzipiell schmalbandiger und deshalb störunempfindlicher. Letztlich sorgt das für eine höhere Reichweite.&lt;br /&gt;
&lt;br /&gt;
== Antennen und Antennenanpassung ==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Antenne ist ein Draht der Länge &amp;lt;math&amp;gt;\lambda/4&amp;lt;/math&amp;gt; (bei 433 MHz entspricht das 17 cm).&lt;br /&gt;
&lt;br /&gt;
Allgemeine Hinweise zur Anpassung, Vergleichstabellen verschiedener Antennenformen bei 433 MHz, ...:&lt;br /&gt;
* http://www.mikrocontroller.net/topic/41515&lt;br /&gt;
* http://www.mikrocontroller.net/topic/90702&lt;br /&gt;
&lt;br /&gt;
== Codierung ==&lt;br /&gt;
&lt;br /&gt;
Bei kurzen Reichweiten und geringen Datenraten kann man oft ohne Fehlerkorrektur auskommen. Um Fehler bei der Übertragung in gewissen Grenzen reparieren zu können verwendet man Kanalcodierung. Dabei wird in das Sendesignal Redundanz eingefügt, die am Empfänger zur Korrektur von Bitfehlern genutzt werden kann. Also: Nutzdatenrate wird kleiner, Zuverlässigkeit wird größer. Einfache und beliebte Codierungsverfahren sind z.B. BCH-Codes. Um darüber hinaus Fehler zuverlässig &#039;&#039;&#039;erkennen&#039;&#039;&#039; zu können, verwendet man eine Prüfsumme (z.B. [[CRC]]). Eine einfache Variante ist, die Übertragung einfach mehrmals zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
Durch lange Codes (&amp;gt;100 Bit für ein Datenbit) lassen sich auch mit billigen Funkmodulen große Reichweiten auf Kosten der Übertragungsrate erreichen, siehe Artikel [[Codierte Übertragung]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM_GCC_toolchain_for_Linux_and_Mac_OS_X&amp;diff=27372</id>
		<title>ARM GCC toolchain for Linux and Mac OS X</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM_GCC_toolchain_for_Linux_and_Mac_OS_X&amp;diff=27372"/>
		<updated>2008-04-11T14:35:11Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Update (2007-04-20): added Mac OS X Intel version&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This package is intended for and was tested with small ARM microcontrollers like LPC21xx, AT91SAM7, ST7, ADuC7000, but should work for any system supported by arm-elf. Take a look at the configuration of the components below to find out whether it suits your application.&lt;br /&gt;
&lt;br /&gt;
== Content (Build 2) ==&lt;br /&gt;
&lt;br /&gt;
This build is similar to Martin Thomas&#039; WinARM package. The main difference to GNUARM is that in WinARM and this build Newlib is compiled with the option -DREENTRANT_SYSCALLS_PROVIDED, as recommended in Bill Gatliff&#039;s article &amp;quot;Porting and Using Newlib in Embedded Systems&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Binutils 2.16.1 configured with &amp;lt;code&amp;gt;--target=arm-elf --enable-interwork --enable-multilib&amp;lt;/code&amp;gt;&lt;br /&gt;
* GCC 4.1.0 with patched t-arm-elf, configured with &amp;lt;code&amp;gt;--target=arm-elf --enable-interwork --enable-multilib --enable-languages=&amp;quot;c,c++&amp;quot; --with-newlib&amp;lt;/code&amp;gt;&lt;br /&gt;
* Newlib 1.14.0 configured with &amp;lt;code&amp;gt;--target=arm-elf --enable-interwork --enable-multilib&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-DREENTRANT_SYSCALLS_PROVIDED&amp;lt;/code&amp;gt;&lt;br /&gt;
* GDB 6.4 configured with &amp;lt;code&amp;gt;--target=arm-elf --enable-interwork --enable-multilib&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything is built with &amp;lt;code&amp;gt;--prefix=/usr/local/arm&amp;lt;/code&amp;gt;. The Linux version is compiled with Debian Sarge, the Mac OS X PPC version with 10.3 (Panther), the Mac OS Intel Version with 10.4 (Tiger). All binaries are stripped. The build process on Linux and Mac OS X is identical.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/download/arm-toolchain-macosx-2.tar.bz2 Build 2 - Mac OS X PPC (23 MB)]&lt;br /&gt;
* [http://www.mikrocontroller.net/download/arm-toolchain-macosx-intel-2.tar.bz2 Build 2 - Mac OS X Intel (32 MB)] ([http://en.mikrocontroller.net/topic/104901 compiled by Darrik Spaude])&lt;br /&gt;
* [http://www.mikrocontroller.net/download/arm-toolchain-linux-2.tar.bz2 Build 2 - Linux (23 MB)]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 # download&lt;br /&gt;
 curl -O -C - http://www.mikrocontroller.net/download/arm-toolchain-macosx-2.tar.bz2&lt;br /&gt;
 # extract&lt;br /&gt;
 tar xjvf arm-toolchain-macosx-2.tar.bz2&lt;br /&gt;
 # install&lt;br /&gt;
 sudo mv arm /usr/local/&lt;br /&gt;
 # add /usr/local/arm/bin to your path permanently&lt;br /&gt;
 echo &#039;export PATH=/usr/local/arm/bin:$PATH&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
== Support forum ==&lt;br /&gt;
&lt;br /&gt;
If you have any questions regarding this toolchain build or want to discuss ARM-GCC programming in general, please visit [http://en.mikrocontroller.net/ the forum].&lt;br /&gt;
&lt;br /&gt;
== Related websites ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ WinARM, ARM projects]&lt;br /&gt;
* [http://www.gnuarm.com GNUARM]: Linux, Windows and outdated Mac OS X builds of GCC+Newlib+GDB&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM_Selektor&amp;diff=27371</id>
		<title>ARM Selektor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM_Selektor&amp;diff=27371"/>
		<updated>2008-04-11T14:30:56Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: formatfix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Da ich gerne mit &#039;&#039;&#039;ARMs&#039;&#039;&#039; arbeite, ich aber meist nur die Typen einsetzte, mit denen ich schon Erfahrungen gesammelt habe, denke ich, ist es auch für unser Mitmenschen/Entwickler interessant diverse Chips, diverser Hersteller anhand ihrer Daten zu vergleichen und so eventuell mal über den Tellerrand hinaus zu schauen. Etwas vergleichbares habe ich trotz ausgiebiger googlelei nicht gefunden. Bitte ergänzt die Tabelle mit Typen die Ihr kennt.&lt;br /&gt;
&lt;br /&gt;
== Typenvielfalt ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;ARM Typen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Core &lt;br /&gt;
! MHz &lt;br /&gt;
! RAM(kB)&lt;br /&gt;
! Flash(kB) &lt;br /&gt;
! Bauform &lt;br /&gt;
! 3,3V Supply &lt;br /&gt;
! 1,8V Supply &lt;br /&gt;
! ext. Bus &lt;br /&gt;
! I/O`s&lt;br /&gt;
! ADC &lt;br /&gt;
! DAC &lt;br /&gt;
! RS232 &lt;br /&gt;
! SPI &lt;br /&gt;
! I²C &lt;br /&gt;
! I²S&lt;br /&gt;
! MMC&lt;br /&gt;
! CAN &lt;br /&gt;
! USB &lt;br /&gt;
! ETH&lt;br /&gt;
! Timer &lt;br /&gt;
! PWM &lt;br /&gt;
! RTC &lt;br /&gt;
! ser. Bootloader &lt;br /&gt;
! Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| LPC2101&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 70&lt;br /&gt;
| 2&lt;br /&gt;
| 8&lt;br /&gt;
| LQFP48&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| 32&lt;br /&gt;
| 8x10bit&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2(32Bit) + 2(16bit)&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2103&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 70&lt;br /&gt;
| 8&lt;br /&gt;
| 32&lt;br /&gt;
| LQFP48&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| 32&lt;br /&gt;
| 8x10bit&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2(32Bit) + 2(16bit)&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2119&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 60&lt;br /&gt;
| 16&lt;br /&gt;
| 128&lt;br /&gt;
| LQFP64&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| 45&lt;br /&gt;
| 4x10bit&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2148&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 60&lt;br /&gt;
| 40&lt;br /&gt;
| 512&lt;br /&gt;
| LQFP64&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| nein&lt;br /&gt;
| 45&lt;br /&gt;
| 14x10bit&lt;br /&gt;
| 1x10bit&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2368&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 72&lt;br /&gt;
| 32+16+8+2&lt;br /&gt;
| 512&lt;br /&gt;
| LQFP100&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| nein&lt;br /&gt;
|&lt;br /&gt;
| 6x10bit&lt;br /&gt;
| 1x10bit&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2378&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 72&lt;br /&gt;
| 32+16+8+2&lt;br /&gt;
| 512&lt;br /&gt;
| LQFP144&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| ja&lt;br /&gt;
|&lt;br /&gt;
| 6x10bit&lt;br /&gt;
| 1x10bit&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.nxp.com/acrobat_download/literature/9397/75016140.pdf NXP-Übersichtstabelle 6 Seiten, ARM7 auf Seite 2-3]&lt;br /&gt;
* [http://www.atmel.com/dyn/products/param_table.asp?family_id=605&amp;amp;OrderBy=part_no&amp;amp;Direction=ASC Atmel Übersicht AT91SAM-Reihe]&lt;br /&gt;
* [http://www.st.com/mcu/pfinder-ARM7.html ST-ARM7 Familie STR7xx]&lt;br /&gt;
* [http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?&amp;amp;showAllResults=true&amp;amp;totalCount=23&amp;amp;showAllResultStatus=true&amp;amp;familyId=1299&amp;amp;uiTemplateId=PT-GSA&amp;amp;techFamId=null&amp;amp;sectionId=95&amp;amp;tabId=1930&amp;amp;appId=null&amp;amp;viewDeviceCallingPage=null&amp;amp;totalCount=23&amp;amp;showAdditionalParameters=no&amp;amp;lc=2000062&amp;amp;lc=2000121&amp;amp;lc=2000607&amp;amp;lc=2000886&amp;amp;lc=2001201&amp;amp;lc=2001227&amp;amp;lc=2001219&amp;amp;lc=2001220&amp;amp;lc=2001202&amp;amp;lc=2001203&amp;amp;lc=2000565&amp;amp;lc=2000825&amp;amp;lc=2000299&amp;amp;compare=yes&amp;amp;download=yes&amp;amp;sort=yes&amp;amp;customize=yes&amp;amp;paramResults=yes&amp;amp;paramCriteria=yes&amp;amp;familyTree=yes&amp;amp;military=no&amp;amp;baSystem=yes&amp;amp;paramTable=no&amp;amp;sortOption=PA_PART_NUMBER&amp;amp;sortMode=DESC&amp;amp;searchPaths=1001299&amp;amp;pageId=1299&amp;amp;templateId=0&amp;amp;navigationId=0&amp;amp;family=mcu&amp;amp;paramTable=no&amp;amp;military=no&amp;amp;ul=TMS470R1VF689&amp;amp;ul=TMS470R1VF67A&amp;amp;ul=TMS470R1VF55BA&amp;amp;ul=TMS470R1VF4B8&amp;amp;ul=TMS470R1VF48C&amp;amp;ul=TMS470R1VF478&amp;amp;ul=TMS470R1VF45BA&amp;amp;ul=TMS470R1VF45AA&amp;amp;ul=TMS470R1VF448&amp;amp;ul=TMS470R1VF356&amp;amp;&amp;amp;uiTemplateId=PT-GSA&amp;amp;techFamId=null&amp;amp;sectionId=95&amp;amp;tabId=1930&amp;amp;appId=null&amp;amp;viewDeviceCallingPage=null#rt Texas Instruments TMS470 automotive ARM7 Übersicht]&lt;br /&gt;
* [http://www.micronas.com/products/by_function/cdc_3207g/related_products/index.html Micronas ARM7-Controller]&lt;br /&gt;
* [http://www.luminarymicro.com/products/product_selector_guide.html Luminary Micro ARM Cortex-M3 Selector Guide]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM_Selektor&amp;diff=27370</id>
		<title>ARM Selektor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM_Selektor&amp;diff=27370"/>
		<updated>2008-04-11T14:30:08Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Da ich gerne mit &#039;&#039;&#039;ARMs&#039;&#039;&#039; arbeite, ich aber meist nur die Typen einsetzte, mit denen ich schon Erfahrungen gesammelt habe, denke ich, ist es auch für unser Mitmenschen/Entwickler interessant diverse Chips, diverser Hersteller anhand ihrer Daten zu vergleichen und so eventuell mal über den Tellerrand hinaus zu schauen. Etwas vergleichbares habe ich trotz ausgiebiger googlelei nicht gefunden. Bitte ergänzt die Tabelle mit Typen die Ihr kennt.&lt;br /&gt;
&lt;br /&gt;
== Typenvielfalt ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;ARM Typen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Core &lt;br /&gt;
! MHz &lt;br /&gt;
! RAM(kB)&lt;br /&gt;
! Flash(kB) &lt;br /&gt;
! Bauform &lt;br /&gt;
! 3,3V Supply &lt;br /&gt;
! 1,8V Supply &lt;br /&gt;
! ext. Bus &lt;br /&gt;
! I/O`s&lt;br /&gt;
! ADC &lt;br /&gt;
! DAC &lt;br /&gt;
! RS232 &lt;br /&gt;
! SPI &lt;br /&gt;
! I²C &lt;br /&gt;
! I²S&lt;br /&gt;
! MMC&lt;br /&gt;
! CAN &lt;br /&gt;
! USB &lt;br /&gt;
! ETH&lt;br /&gt;
! Timer &lt;br /&gt;
! PWM &lt;br /&gt;
! RTC &lt;br /&gt;
! ser. Bootloader &lt;br /&gt;
! Hersteller&lt;br /&gt;
|-&lt;br /&gt;
| LPC2101&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 70&lt;br /&gt;
| 2&lt;br /&gt;
| 8&lt;br /&gt;
| LQFP48&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| 32&lt;br /&gt;
| 8x10bit&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2(32Bit) + 2(16bit)&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2103&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 70&lt;br /&gt;
| 8&lt;br /&gt;
| 32&lt;br /&gt;
| LQFP48&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| 32&lt;br /&gt;
| 8x10bit&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2(32Bit) + 2(16bit)&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2119&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 60&lt;br /&gt;
| 16&lt;br /&gt;
| 128&lt;br /&gt;
| LQFP64&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| 45&lt;br /&gt;
| 4x10bit&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2148&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 60&lt;br /&gt;
| 40&lt;br /&gt;
| 512&lt;br /&gt;
| LQFP64&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| nein&lt;br /&gt;
| 45&lt;br /&gt;
| 14x10bit&lt;br /&gt;
| 1x10bit&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2368&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 72&lt;br /&gt;
| 32+16+8+2&lt;br /&gt;
| 512&lt;br /&gt;
| LQFP100&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| nein&lt;br /&gt;
|&lt;br /&gt;
| 6x10bit&lt;br /&gt;
| 1x10bit&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
| LPC2378&lt;br /&gt;
| ARM7TDMI-S&lt;br /&gt;
| 72&lt;br /&gt;
| 32+16+8+2&lt;br /&gt;
| 512&lt;br /&gt;
| LQFP144&lt;br /&gt;
| ja&lt;br /&gt;
| nein&lt;br /&gt;
| ja&lt;br /&gt;
|&lt;br /&gt;
| 6x10bit&lt;br /&gt;
| 1x10bit&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 4&lt;br /&gt;
| 6&lt;br /&gt;
| ja&lt;br /&gt;
| ja&lt;br /&gt;
| NXP&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
[http://www.nxp.com/acrobat_download/literature/9397/75016140.pdf NXP-Übersichtstabelle 6 Seiten, ARM7 auf Seite 2-3]&lt;br /&gt;
&lt;br /&gt;
[http://www.atmel.com/dyn/products/param_table.asp?family_id=605&amp;amp;OrderBy=part_no&amp;amp;Direction=ASC Atmel Übersicht AT91SAM-Reihe]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/mcu/pfinder-ARM7.html ST-ARM7 Familie STR7xx]&lt;br /&gt;
&lt;br /&gt;
[http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?&amp;amp;showAllResults=true&amp;amp;totalCount=23&amp;amp;showAllResultStatus=true&amp;amp;familyId=1299&amp;amp;uiTemplateId=PT-GSA&amp;amp;techFamId=null&amp;amp;sectionId=95&amp;amp;tabId=1930&amp;amp;appId=null&amp;amp;viewDeviceCallingPage=null&amp;amp;totalCount=23&amp;amp;showAdditionalParameters=no&amp;amp;lc=2000062&amp;amp;lc=2000121&amp;amp;lc=2000607&amp;amp;lc=2000886&amp;amp;lc=2001201&amp;amp;lc=2001227&amp;amp;lc=2001219&amp;amp;lc=2001220&amp;amp;lc=2001202&amp;amp;lc=2001203&amp;amp;lc=2000565&amp;amp;lc=2000825&amp;amp;lc=2000299&amp;amp;compare=yes&amp;amp;download=yes&amp;amp;sort=yes&amp;amp;customize=yes&amp;amp;paramResults=yes&amp;amp;paramCriteria=yes&amp;amp;familyTree=yes&amp;amp;military=no&amp;amp;baSystem=yes&amp;amp;paramTable=no&amp;amp;sortOption=PA_PART_NUMBER&amp;amp;sortMode=DESC&amp;amp;searchPaths=1001299&amp;amp;pageId=1299&amp;amp;templateId=0&amp;amp;navigationId=0&amp;amp;family=mcu&amp;amp;paramTable=no&amp;amp;military=no&amp;amp;ul=TMS470R1VF689&amp;amp;ul=TMS470R1VF67A&amp;amp;ul=TMS470R1VF55BA&amp;amp;ul=TMS470R1VF4B8&amp;amp;ul=TMS470R1VF48C&amp;amp;ul=TMS470R1VF478&amp;amp;ul=TMS470R1VF45BA&amp;amp;ul=TMS470R1VF45AA&amp;amp;ul=TMS470R1VF448&amp;amp;ul=TMS470R1VF356&amp;amp;&amp;amp;uiTemplateId=PT-GSA&amp;amp;techFamId=null&amp;amp;sectionId=95&amp;amp;tabId=1930&amp;amp;appId=null&amp;amp;viewDeviceCallingPage=null#rt Texas Instruments TMS470 automotive ARM7 Übersicht]&lt;br /&gt;
&lt;br /&gt;
[http://www.micronas.com/products/by_function/cdc_3207g/related_products/index.html Micronas ARM7-Controller]&lt;br /&gt;
&lt;br /&gt;
[http://www.luminarymicro.com/products/product_selector_guide.html Luminary Micro ARM Cortex-M3 Selector Guide]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:ARM]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=230V_Schalter_und_Dimmer&amp;diff=27369</id>
		<title>230V Schalter und Dimmer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=230V_Schalter_und_Dimmer&amp;diff=27369"/>
		<updated>2008-04-11T14:29:43Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: formatfix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Warnung, Lebensgefahr!==&lt;br /&gt;
&lt;br /&gt;
230V aus der Steckdose können tödlich sein!&lt;br /&gt;
http://de.wikipedia.org/wiki/Stromunfall&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Stromnetz&lt;br /&gt;
http://de.wikipedia.org/wiki/Wechselstrom&lt;br /&gt;
&lt;br /&gt;
==Relais==&lt;br /&gt;
Schalten ist elektromechanisch mit einem&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Relais&lt;br /&gt;
&lt;br /&gt;
einfach möglich. Ein Relais ist eine induktive Last. Freilaufdiode benutzen!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Halbleiterbauelemente==&lt;br /&gt;
Es geht aber auch mit Halbleitern.&lt;br /&gt;
Z.B. indem man die gleichgerichtete Spannung mit einem FET kurzschließt, wie in diesem Bausatz von ELV (Phasenabschnittsdimmer DI 300):&lt;br /&gt;
&lt;br /&gt;
www.elv-downloads.de/service/manuals/DI300/37378-DI300.pdf&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch Wechselspannung direkt mit einem Halbleiterbauelement schalten, dem Thyristor.&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Thyristor&lt;br /&gt;
&lt;br /&gt;
Verwandt sind DIAC&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Diac&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
===TRIAC===&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Triac&lt;br /&gt;
&lt;br /&gt;
Ein Triac ist eine steuerbare Wechselspannungsdiode, die im Nulldurchgang der Wechselspannung von selbst sperrend wird.&lt;br /&gt;
&lt;br /&gt;
Das Ding kann man super als Wechselspannungsschalter einsetzen, es gibt aber einiges zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Der Triac muss immer im Nulldurchgang wieder eingeschaltet (&amp;quot;gezündet&amp;quot;) werden, da er von selbst sperrt (Nulldurchgangserkennung / Zero-crossing detection, ZD). Andernfalls schneidet man die Phase an, was z.B. in Dimmern gewünscht ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bauteile heißen z.B.&lt;br /&gt;
&lt;br /&gt;
TIC 2xyz&lt;br /&gt;
&lt;br /&gt;
xy: ??&lt;br /&gt;
z: Spannungsfestigkeit D 400V, M 600V, S 700V, N 800V&lt;br /&gt;
&lt;br /&gt;
===OPTOTRIAC===&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Optokoppler&lt;br /&gt;
Die sind dafür gemacht, den Triac galvanisch getrennt zu zünden. Teilweise ist dort auch die Nulldurchgangserkennung integriert, d.h. es kann einfach mit einem Pin vom µC geschaltet werden.&lt;br /&gt;
&lt;br /&gt;
* MOC302x Typen ohne Nulldurchgangserkennung&lt;br /&gt;
* MOC304x Typen mit Nulldurchgangserkennung&lt;br /&gt;
letzte Ziffer x:&lt;br /&gt;
Sie unterscheiden sich in I_FT (LED Trigger Current, Current Required to Latch Output). Größeres x, kleinerer Strom.&lt;br /&gt;
&lt;br /&gt;
Preis ca. 0,50 Euro.&lt;br /&gt;
&lt;br /&gt;
===Solid-State-Relais===&lt;br /&gt;
&lt;br /&gt;
Sog. Solid-State-Relais bzw. Halbleiterrelais kombinieren Triac, Optotriac und ggf. Nulldurchgangserkennung (ZD) sowie Schutzschaltung (Snubber) in kompakten Modulen (3-8 Euro)&lt;br /&gt;
&lt;br /&gt;
==Nulldurchgangserkennung==&lt;br /&gt;
&lt;br /&gt;
==Triac-Schutzschaltung==&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/articles/Snubber, Häufig auch im Datenblatt erwähnt.&lt;br /&gt;
&lt;br /&gt;
==Triac und Kondensatornetzteil==&lt;br /&gt;
&lt;br /&gt;
Man benötigt nicht unbeding einen Optotriac, um den Triac zu zünden. Speziell wenn die galvanische Trennung durch Einsatz eine Kondensatornetzteil ohnehin aus Sicherheitsgründen überflüssig ist, kann ein Triac auch direkt angesteuert werden..&lt;br /&gt;
&lt;br /&gt;
==Dimmen==&lt;br /&gt;
&lt;br /&gt;
Ist nicht so einfach wie z.B. das Dimmen einer Last an Gleichspannung durch Pulsweitenmodulation (PWM).&lt;br /&gt;
&lt;br /&gt;
Besonders beim Dimmen werden Störungen erzeugt, die gefiltert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Trafos lassen sich nur dimmen, wenn man den Strom misst.&lt;br /&gt;
&lt;br /&gt;
Elektronische Trafos lassen sich nur mit Phasenabschnittsteuerung dimmen.&lt;br /&gt;
&lt;br /&gt;
http://de.wikipedia.org/wiki/Phasenanschnittsteuerung&lt;br /&gt;
===PhasenANschnitt===&lt;br /&gt;
====Entstören====&lt;br /&gt;
===PhasenABschnitt===&lt;br /&gt;
&lt;br /&gt;
==Forensuche==&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/search&lt;br /&gt;
&lt;br /&gt;
==Informative Dokumente==&lt;br /&gt;
* http://www.mikrocontroller.net/topic/66703&lt;br /&gt;
* Triac enstören, Triac vs. MosFET vs. IGBT: http://www.mikrocontroller.net/topic/20368&lt;br /&gt;
* http://www.mikrocontroller.net/articles/I2C-Schaltmodul&lt;br /&gt;
* http://www.nxp.com/acrobat_download/applicationnotes/APPCHP6.pdf&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bsp_software_Pulsuhr&amp;diff=27368</id>
		<title>Bsp software Pulsuhr</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bsp_software_Pulsuhr&amp;diff=27368"/>
		<updated>2008-04-11T14:24:55Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: formatfix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:-&amp;gt;[[Pulsuhrempfänger mit AVR Butterfly]]&lt;br /&gt;
;Source Code&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
char PROG_NAME[] = &amp;quot;Handy Board HRM &amp;quot;;&lt;br /&gt;
char PROG_DATE[] = &amp;quot;29-Jan-2003&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Handy Board HRM was created to demonstrate how to&lt;br /&gt;
interface my HRM receiver circuit to a microcontroller.&lt;br /&gt;
This code requires the receiver to be connected to the&lt;br /&gt;
Handy Board&#039;s analog port 0.  The algorithm used is&lt;br /&gt;
simplistic, but is sufficient to show how to detect the&lt;br /&gt;
transmitted heart beat signal and calculate a heart&lt;br /&gt;
rate.  There are, however, some important limitations&lt;br /&gt;
to the algorithm and the code implementing it.  Here&lt;br /&gt;
are some particular limitations you should be aware of&lt;br /&gt;
and some experiments you might try to better understand&lt;br /&gt;
their consequences:&lt;br /&gt;
&lt;br /&gt;
    1) Heart beats are detected with a simple fixed&lt;br /&gt;
    trigger level.  Consequently, magnetic noise in the&lt;br /&gt;
    environment can cause erroneously high heart rates&lt;br /&gt;
    to be calculated.  Try this experiment, hold the&lt;br /&gt;
    HRM receiver up to a computer CRT or even up close&lt;br /&gt;
    to the Handy Board&#039;s own LCD.  What happens to the&lt;br /&gt;
    displayed heart rate?  Try changing the DEAD_TIME&lt;br /&gt;
    parameter in the code, now what heart rate is&lt;br /&gt;
    displayed when you hold the HRM receiver up to the&lt;br /&gt;
    Handy Board LCD?&lt;br /&gt;
&lt;br /&gt;
    2) The heart rate is recalculated at each heart&lt;br /&gt;
    beat, so the displayed heart rate can vary&lt;br /&gt;
    considerably with each beat.  Try this experiment,&lt;br /&gt;
    watch your heart beat displayed on the Handy Board&lt;br /&gt;
    LCD as you slowly breath in and out.  Is there a&lt;br /&gt;
    pattern?  Set a commercial HRM wrist style receiver&lt;br /&gt;
    next to the Handy Board, how often is the&lt;br /&gt;
    commercial unit&#039;s display being updated -- what&lt;br /&gt;
    algorithm does the commercial unit seem to be&lt;br /&gt;
    using?&lt;br /&gt;
&lt;br /&gt;
    3) The magnetic pulses generated by the HRM chest&lt;br /&gt;
    strap transmitters are fairly short, typically&lt;br /&gt;
    around 5 milliseconds.  Since the algorithm is&lt;br /&gt;
    implemented in a fairly high level language, the&lt;br /&gt;
    code loop which waits for the next heart beat to be&lt;br /&gt;
    triggered must be carefully crafted to ensure that&lt;br /&gt;
    it runs fast enough and doesn&#039;t miss any beats.&lt;br /&gt;
    Try this experiment, add some more code to this&lt;br /&gt;
    loop, say a call to msleep().  What happens?  Can&lt;br /&gt;
    you suggest a way to measure the frequency at which&lt;br /&gt;
    this loop runs?  Can you suggest a better method&lt;br /&gt;
    for implementing the algorithm?&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Algorithm Parameters&lt;br /&gt;
*/&lt;br /&gt;
int  TRIGGER_LEVEL =   80;&lt;br /&gt;
long DEAD_TIME     =  100L;/* milliseconds */&lt;br /&gt;
long MAX_BEAT_WAIT = 5000L;/* milliseconds */&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
main()&lt;br /&gt;
{&lt;br /&gt;
    /*&lt;br /&gt;
    State Variables&lt;br /&gt;
        state: 0 -&amp;gt; no signal detected&lt;br /&gt;
               1 -&amp;gt; 1 heart beat detected&lt;br /&gt;
               2 -&amp;gt; 2 or more heart beats detected&lt;br /&gt;
    */&lt;br /&gt;
    int state;&lt;br /&gt;
    long this_time;&lt;br /&gt;
    long last_time;&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
    Temporary Variables&lt;br /&gt;
    */&lt;br /&gt;
    long wait_time;&lt;br /&gt;
    int heart_rate;/* beats/minute */&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
    Turn off all system interrupt features,&lt;br /&gt;
    except LCD printfs.&lt;br /&gt;
    */&lt;br /&gt;
    poke( 0x39, 1 );&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
    Flash the program name and date on the LCD.&lt;br /&gt;
    */&lt;br /&gt;
    printf(&amp;quot;%s%s\n&amp;quot;, PROG_NAME, PROG_DATE);&lt;br /&gt;
    msleep(3000L);&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
    Loop forever, waiting for heart beat signals&lt;br /&gt;
    and updating the LCD.&lt;br /&gt;
    */&lt;br /&gt;
    state = 0;&lt;br /&gt;
    for (;;) {&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
        Update LCD to display current state.&lt;br /&gt;
        */&lt;br /&gt;
        if (state &amp;gt; 1) {&lt;br /&gt;
            /*&lt;br /&gt;
            beats/min&lt;br /&gt;
                = (60,000 msecs/min) / (msecs/beat)&lt;br /&gt;
                = (30,000 msecs/min) / ((msecs/beat)/2)&lt;br /&gt;
            */&lt;br /&gt;
            heart_rate =&lt;br /&gt;
                30000 / ((int)(this_time-last_time)/2);&lt;br /&gt;
            printf(&amp;quot;hr: %d\n&amp;quot;, heart_rate);&lt;br /&gt;
        } else if (state &amp;gt; 0) {&lt;br /&gt;
            printf(&amp;quot;signal found\n&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            printf(&amp;quot;no signal\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
        Previous this_time becomes last_time.&lt;br /&gt;
        */&lt;br /&gt;
        last_time = this_time;&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
        If we detected a heart beat last time,&lt;br /&gt;
        delay for DEAD_TIME milliseconds so that&lt;br /&gt;
        we don&#039;t redetect the same beat.&lt;br /&gt;
        */&lt;br /&gt;
        if (state &amp;gt; 0)&lt;br /&gt;
            for (;;) {&lt;br /&gt;
                wait_time = mseconds()-last_time;&lt;br /&gt;
                if (wait_time &amp;gt; DEAD_TIME)&lt;br /&gt;
                    break;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
        Loop for up to MAX_BEAT_WAIT milliseconds&lt;br /&gt;
        while looking for the next heart beat signal.&lt;br /&gt;
        */&lt;br /&gt;
        for (;;) {&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
            If we detect a heart beat, update the&lt;br /&gt;
            state variables to show that we got a&lt;br /&gt;
            beat and break to update LCD.&lt;br /&gt;
            */&lt;br /&gt;
            if (_raw_analog(0) &amp;lt; TRIGGER_LEVEL) {&lt;br /&gt;
                this_time = mseconds();&lt;br /&gt;
                if (state &amp;lt; 2)&lt;br /&gt;
                    state++;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
            If we&#039;ve waited for MAX_BEAT_WAIT&lt;br /&gt;
            milliseconds, update the state variables&lt;br /&gt;
            to show we no longer detect a signal&lt;br /&gt;
            and break to update LCD.&lt;br /&gt;
            */&lt;br /&gt;
            wait_time = mseconds()-last_time;&lt;br /&gt;
            if (wait_time &amp;gt; MAX_BEAT_WAIT) {&lt;br /&gt;
                this_time = mseconds();&lt;br /&gt;
                state = 0;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Bluetooth&amp;diff=27367</id>
		<title>Bluetooth</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Bluetooth&amp;diff=27367"/>
		<updated>2008-04-11T14:22:01Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bluetooth Module ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;2&amp;quot;  bgcolor=&amp;quot;#EFEFEF&amp;quot; class=&amp;quot;sortable&amp;quot; id=&amp;quot;bluetoothmodule&amp;quot;&lt;br /&gt;
|----- &lt;br /&gt;
| &#039;&#039;&#039;NAME&#039;&#039;&#039; || &#039;&#039;&#039;HERSTELLER&#039;&#039;&#039; || &#039;&#039;&#039;KLASSE&#039;&#039;&#039; || &#039;&#039;&#039;MAX REICHWEITE [m]&#039;&#039;&#039; || &#039;&#039;&#039;DATENRATE [kbps]&#039;&#039;&#039; || &#039;&#039;&#039;PROFILE&#039;&#039;&#039; || &#039;&#039;&#039;ANTENNE INTEGRIERT&#039;&#039;&#039; || &#039;&#039;&#039;Vss [V]&#039;&#039;&#039; || &#039;&#039;&#039;PREIS [EUR]+VERSAND&#039;&#039;&#039; || &#039;&#039;&#039;DATASHEET&#039;&#039;&#039;&lt;br /&gt;
|----- &lt;br /&gt;
|[http://www.reimesch.de/arf32.html ARF32]|| Reimesch || 2 || 15 || 723 || GAP, SDAP, SPP Bluetooth-Standard V1.1  &lt;br /&gt;
|| Y || 3,3 || 55,00-61,80 || [http://www.reimesch.de/download/arf32_mn.pdf datasheet]&lt;br /&gt;
|----- &lt;br /&gt;
|[http://www.ezurio.com/products/bism/ TRBLU23]|| EZURIO || 1 || 300 || 300 || GAP, SDAP, SPP Bluetooth 2.0  &lt;br /&gt;
|| Y || 3,3 || ?? || [http://www.ezurio.com/dl/?id=88 datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.amber-wireless.de/produkte/bluetooth/index.php BlueNiceCom 3]|| Amber || 2 || 10 || 921 || SPP Bluetooth 1.1  &lt;br /&gt;
|| Y || 3,3 || [http://www.spoerle.de/ 37,40] || [http://www.amber-wireless.de/pdf/OPC1601_HB.pdf datasheet]&lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.amber-wireless.de/produkte/bluetooth/index.php BlueNiceCom 4]|| Amber || 2 || 10 || 921 || SPP,GAP,SDAP (DUN, FAX, FTP, HSP, HFP, OPP, SYNC, BIP, BPP) Bluetooth 2.0  &lt;br /&gt;
|| Y || 3,3 || [http://www.spoerle.de/ 37,40] || [http://www.spoerle.com/binaries/1150190971661-16.pdf datasheet]&lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.lemosint.com/scripts/bluetooth_promiesd.asp Parani-ESD100]|| SENA || 1 || 100 || 921 || SPP GAP|  Bluetooth 1.2  &lt;br /&gt;
|| Y || 3,3 || 53,25$-62,95$ ||&lt;br /&gt;
[http://www.sena.com/download/datasheet/ds_parani_esd.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.lemosint.com/scripts/bluetooth_promiesd.asp Parani-ESD200]|| SENA || 2 || 10 || 230? || SPP GAP Bluetooth 1.2  &lt;br /&gt;
|| Y || 3,3 || 52,95$-63,95$  || [http://www.lemosint.com/bluetooth_specs/Promi-ESD_manual.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.lemosint.com/scripts/bluetooth_promiesd_02.asp Parani-ESD-02]|| SENA || 2 || 30 || 230kB? ||  SPP GAP Bluetooth 1.1  &lt;br /&gt;
|| Y || 3,3 || ca. 50$ ||&lt;br /&gt;
[http://www.lemosint.com/bluetooth_specs/Promi-ESD-02_manual.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://cgi.segor.de/user-cgi-bin/sidestep2.pl?foto=1&amp;amp;Q=WML&amp;amp;M=1 WML-C20]|| Mitsumi || 1 || 100 || 721 || kein SPP..+? Bluetooth 1.1  &lt;br /&gt;
|| Y || 3,3 || 78,00  || [http://www.mitsumi-components.com/Catalog/hifreq/commun/wml/c20/text01e.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.free2move.se/products.shtml F2M03C1]|| Free2Move || 1 || 100 || 721 || SPP..+? Bluetooth 1.1  &lt;br /&gt;
|| [http://www.datasoft.se/documents/InfoBTOEMBoardC1-ver1.2.pdf N] || 3,3 || 41,00  || [http://www.datasoft.se/documents/DatasheetF2M03C1DSS4.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.free2move.se/products.shtml F2M03AC2]|| Free2Move || 2 || 20 || 721 || SPP..+? Bluetooth 1.1  &lt;br /&gt;
|| Y || 3,3 || 41,00  || [http://www.datasoft.se/documents/DatasheetF2M03AC2DSS4_000.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.ecom.panasonic.de/index.cfm?UUID=20D65392D3924DFDAFDBAB3651BF30F5&amp;amp;and_uuid=83EFD98252104F74B01DFCDD23162396&amp;amp;obj_ID=102 PAN1540]|| Panasonic || 2 || 10 || 600 || SPP GAP SDAP Bluetooth 1.2  &lt;br /&gt;
|| Y || 3,3 || ?  || [http://www.ecom.panasonic.de/pdf/102Datasheet.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|BlueCore-2 || http://www.csrsupport.com || 2 || 10 || 721? || SPP ? || Y || 3,3 || eBay: Bluetooth Gamepad ab 13,00 || [http://www.csrsupport.com/download/83/BC212015-ds-001Pj%20BlueCore2-External%20Data%20Sheet%20AUG06.pdf datasheet]&lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.modulestek.com/BT-Module.php MB-C04 ((bas. auf BlueCore-04 Chip)]|| Modulestek || 2 || ? || 9600bps ||  SPP  Bluetooth 2.0  &lt;br /&gt;
|| N || 3,3 || ca. 20€ ||&lt;br /&gt;
[http://www.modulestek.com/DOC/MB-C04.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|[http://www.modulestek.com/BT-Module.php MB-C041 ((bas. auf BlueCore-04 Chip)]|| Modulestek || 1 || ? || 9600bps ||  SPP HCI Bluetooth 2.0  &lt;br /&gt;
|| N || 3,3 || ? ||&lt;br /&gt;
[http://www.modulestek.com/DOC/MB-C04.pdf datasheet] &lt;br /&gt;
|-----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versionen ==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Bluetooth Quelle]&lt;br /&gt;
&lt;br /&gt;
Eine Auswahl wichtiger Eigenschaften der bisherigen Bluetooth-Versionen sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth 1.0 und 1.0B&#039;&#039;&#039;&lt;br /&gt;
:: enthielt Sicherheitsprobleme durch &#039;&#039;Bluetooth Hardware Device Address Transmission (BD_ADDR)&#039;&#039;&lt;br /&gt;
:: maximale Datenübertragungsrate von 723,2 kbit/s&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth 1.1&#039;&#039;&#039;&lt;br /&gt;
:: Indikator für die Signalstärke hinzugefügt &#039;&#039;Received Signal Strength Indicator (RSSI)&#039;&#039;&lt;br /&gt;
:: maximale Datenübertragungsrate von 723,2 kbit/s&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth 1.2&#039;&#039;&#039;&lt;br /&gt;
:: weniger empfindlich gegen statische Störer (z.B. WLAN) durch &#039;&#039;Adaptive Frequency-Hopping spread spectrum (AFH)&#039;&#039;&lt;br /&gt;
:: maximale Datenübertragungsrate von 723,2 kbit/s&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth 2.0&#039;&#039;&#039;&lt;br /&gt;
:: etwa dreifache Datenübertragungsgeschwindigkeit durch &#039;&#039;Enhanced Data Rate (EDR)&#039;&#039; mit maximal 2,1 Mbit/s&lt;br /&gt;
&lt;br /&gt;
== Bluetooth-Profile ==&lt;br /&gt;
&lt;br /&gt;
[http://de.wikipedia.org/wiki/Bluetooth Quelle]&lt;br /&gt;
&lt;br /&gt;
Daten zwischen Bluetooth Geräten werden durch so genannte Profile ausgetauscht, die für bestimmte Anwendungsbereiche festgelegt sind. Wenn eine Bluetooth Verbindung aufgebaut wird, tauschen die Geräte ihre Profile aus und legen damit fest, welche Dienste sie für die jeweiligen anderen Partner zur Verfügung stellen können und welche Daten oder Befehle sie dazu benötigen. Ein Headset fordert beispielsweise von einem Bluetooth kompatiblen Mobiltelefon einen Audiokanal an und steuert über zusätzliche Datenkanäle die Lautstärkeregelung. &lt;br /&gt;
&lt;br /&gt;
Unten eine Auswahl einiger Profile, die für Bluetooth implementiert sind. Es kommen ständig neue Profile hinzu, da Bluetooth somit sehr flexibel auf neue Geräteanforderungen reagieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;1&amp;quot;  bgcolor=&amp;quot;#EFEFEF&amp;quot;&lt;br /&gt;
|----- &lt;br /&gt;
| &#039;&#039;&#039;ABKÜRZUNG&#039;&#039;&#039; || &#039;&#039;&#039;BEDEUTUNG&#039;&#039;&#039; || &#039;&#039;&#039;VERWENDET FÜR&#039;&#039;&#039;&lt;br /&gt;
|----- &lt;br /&gt;
| A2DP || Advanced Audio Distribution Profile || Übermittlung von Audiodaten&lt;br /&gt;
|-----&lt;br /&gt;
| AVRCP || Audio Video Remote Control Profile || Fernbedienung für Audio/Video&lt;br /&gt;
|-----&lt;br /&gt;
| BIP || Basic Imaging Profile || Übertragung von Bilddaten&lt;br /&gt;
|-----&lt;br /&gt;
| BPP || Basic Printing Profile || Drucken&lt;br /&gt;
|-----&lt;br /&gt;
| CIP || Common ISDN Access Profile || ISDN Verbindungen über CAPI&lt;br /&gt;
|-----&lt;br /&gt;
| CTP || Cordless Telephony Profile || Schnurlose Telefonie&lt;br /&gt;
|-----&lt;br /&gt;
| DUN || Dial-up Networking Profile || Internet-Einwahlverbindung&lt;br /&gt;
|-----&lt;br /&gt;
| ESDP || Extended Service Discovery Profile || Erweiterte Diensteerkennung&lt;br /&gt;
|-----&lt;br /&gt;
| FAXP || FAX Profile || Faxen&lt;br /&gt;
|-----&lt;br /&gt;
| FTP || File Transfer Profile || Dateiübertragung&lt;br /&gt;
|-----&lt;br /&gt;
| GAP || Generic Access Profile || Zugriffsregelung&lt;br /&gt;
|-----&lt;br /&gt;
| GAVDP || Generic AV Distribution Profile || Übertragung von Audio-/Videodaten&lt;br /&gt;
|-----&lt;br /&gt;
| GOEP || Generic Object Exchange Profile || Objektaustausch&lt;br /&gt;
|-----&lt;br /&gt;
| HCRP || Hardcopy Cable Replacement Profile || Druckanwendung&lt;br /&gt;
|-----&lt;br /&gt;
| HSP || Headset Profile || Sprachausgabe per Headset&lt;br /&gt;
|-----&lt;br /&gt;
| HFP || Hands Free Profile || Schnurlose Telefonie im Auto&lt;br /&gt;
|-----&lt;br /&gt;
| HID || Human Interface Device Profile || Eingabe&lt;br /&gt;
|-----&lt;br /&gt;
| INTP || Intercom Profile || Sprechfunk&lt;br /&gt;
|-----&lt;br /&gt;
| LAP || LAN Access Profile (nur Version &amp;lt; 1.2) || PPP Netzwerkverbindung&lt;br /&gt;
|-----&lt;br /&gt;
| OPP || Object Push Profile || Visitenkarten-/Terminaustausch&lt;br /&gt;
|-----&lt;br /&gt;
| PAN || Personal Area Networking Profile || Netzwerkverbindungen&lt;br /&gt;
|-----&lt;br /&gt;
| SAP || SIM Access Profile || Zugriff auf SIM-Karte&lt;br /&gt;
|-----&lt;br /&gt;
| SDAP || Service Discovery Application Profile || Geräteauffindung&lt;br /&gt;
|-----&lt;br /&gt;
| SPP || Serial Port Profile || Serielle Datenübertragung&lt;br /&gt;
|-----&lt;br /&gt;
| SYNCH || Synchronisation Profile || Datenabgleich&lt;br /&gt;
|-----&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* LMX9820 Bluetooth Designer Guide (nicht downloaden-&amp;gt;speichern unter) [http://www.iis.ee.ethz.ch/~felber/DataSheets/Bluetooth/LMX9820_bluetooth_designer_guide.pdf   LMX9820_bluetooth_designer_guide.pdf]&lt;br /&gt;
* Broschüre SmartModules [http://www.baracoda.com/oem/librairie-doc/SmartModules-Datasheet_7.pdf SmartModules ]&lt;br /&gt;
* ATMEGA128 Blue Board von Peter Zirngibl [http://clipswitch.de/progs/blue-trx.pdf blue-trx.pdf]&lt;br /&gt;
* LMX9820 Bluetooth Serial Port Module [http://www.reimesch.de/download/LMX9820.pdf LMX9820.pdf]&lt;br /&gt;
* LMX9820A Datenblat [http://cache.national.com/ds/LM/LMX9820A.pdf LMX9820A.pdf]&lt;br /&gt;
* LMX9820 Schaltung [http://www.mikrocontroller.net/attachment.php/383426/LMX9820A_REF_SCH.pdf LMX9820A_REF_SCH]&lt;br /&gt;
* C-Kode Schnipsel 1 [http://www.mikrocontroller.net/attachment.php/297268/LMX9820.C LMX9820.C]&lt;br /&gt;
* C-Kode Schnipsel 2 [http://www.mikrocontroller.net/attachment.php/331646/BNC+III+-+set+name.txt BNC III - set name.txt]&lt;br /&gt;
* BlueNiceComII Handbuch  [http://www.amber-wireless.de/pdf/OPC1650_HB.pdf OPC1650_HB.pdf]&lt;br /&gt;
* Panasonic BlueRS SPP Manual [http://www.ecom.panasonic.de/pdf/102ext.pdf SPP Manual]&lt;br /&gt;
&lt;br /&gt;
* Blue Nice Module Amber [http://www.mikrocontroller.net/forum/read-1-274425.html#277468 Forum-Link]&lt;br /&gt;
* BlueNiceComIII + Ansteuerung [http://www.mikrocontroller.net/forum/read-1-331309.html#331309 Forum-Link]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Drucksensor&amp;diff=27366</id>
		<title>Drucksensor</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Drucksensor&amp;diff=27366"/>
		<updated>2008-04-11T14:21:06Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Drucksensoren sind oft in Mikromechanik-Technik auf Siliziumchips ausgeführt.&lt;br /&gt;
*Differenzdruck-Sensoren &lt;br /&gt;
messen den Druckunterschied zwischen zwei Anschlußstutzen&lt;br /&gt;
* Absolutdrucksensoren&lt;br /&gt;
messen den Druck im Vergleich zu einem abgeschlossenen Hohlraum&lt;br /&gt;
&lt;br /&gt;
Hersteller:&lt;br /&gt;
* Siemens, Philips  &amp;quot;KPY...&amp;quot;&lt;br /&gt;
* Motorola / SenSym &amp;quot;SX...&amp;quot;, &amp;quot;SCX...&amp;quot;&lt;br /&gt;
früher auch mal &lt;br /&gt;
* National Semiconductor ( Datenbuch 1974 ) &amp;quot;LX...&amp;quot;&lt;br /&gt;
Oft findet man Bauanleitungen mit Drucksensoren aus der Kraftfahrzeugelektronik: &lt;br /&gt;
* Bosch-Sensoren&lt;br /&gt;
&lt;br /&gt;
Da diese Sensoren sehr temperaturabhängig sind, muß der Temperaturgang kompensiert werden.&lt;br /&gt;
Eine kompensierte Schaltung mit einem KP100 von Philips, der auch einen Temperatursensor auf dem Chip enthält, kann Höhenunterschiede von 10 cm im Luftdruck anzeigen. Armbanduhren mit integriertem Drucksensor zeigen die Höhe mit 5m Auflösung an.&lt;br /&gt;
Eine weitere Anwendung sind Einbruchsalarmanlagen, die auf die Druckschwankung beim Türöffnen reagieren. &lt;br /&gt;
Der Überschallknall der Concorde beim Beschleunigen über dem Atlantik konnte mit empfindlichen Drucksensor-Mikrophonen in Bayern nachgewiesen werden - mit entsprechender Zeitverzögerung.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-CORDIC&amp;diff=27365</id>
		<title>AVR-CORDIC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-CORDIC&amp;diff=27365"/>
		<updated>2008-04-11T14:20:35Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=AVR-Arithmetik mit dem CORDIC-Algorithmus=&lt;br /&gt;
&lt;br /&gt;
Der Cordic-Algorithmus bietet eine ganze Reihe mathematischer Funktionen. Er wird seit den ersten Taschenrechnern bis zu den mathematischen Befehlen der Pentium-Prozessoren oder in FPGAs verwendet. &lt;br /&gt;
&lt;br /&gt;
Hier soll nur die praktische Anwendung in Mikrocontrollern der AVR-Reihe besprochen werden. Er arbeitet iterativ, ähnlich der sukzessiven Approximation in Analog-Digital-Wandlern. Es werden nur Additionen und Schiebeoperationen benötigt.&lt;br /&gt;
&lt;br /&gt;
Es gibt sechs verschiedene CORDIC-Versionen, die für unterschiedliche mathematische Funktionen benutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;circular&amp;quot;, &amp;quot;linear&amp;quot;, &amp;quot;hyperbolic&amp;quot;, und diese jeweils &amp;quot;vectoring&amp;quot; oder &amp;quot;rotation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===circular vectoring===&lt;br /&gt;
[http://de.wikipedia.org/wiki/Kartesisches_Koordinatensystem Kartesische] --&amp;gt; [http://de.wikipedia.org/wiki/Polarkoordinaten Polarkoordinaten], [http://de.wikipedia.org/wiki/Arcsin arcsin, arccos], [http://de.wikipedia.org/wiki/Arctan arctan, arccot]&lt;br /&gt;
&lt;br /&gt;
===circular rotation===&lt;br /&gt;
[http://de.wikipedia.org/wiki/Polarkoordinaten Polare] --&amp;gt; [http://de.wikipedia.org/wiki/Kartesisches_Koordinatensystem Kartesische Koordinaten], [http://de.wikipedia.org/wiki/Sinus sin, cos], [http://de.wikipedia.org/wiki/Tangens tan, cot]&lt;br /&gt;
&lt;br /&gt;
Der CORDIC kann so auch als Alternative zum [http://www.mikrocontroller.net/articles/DDS DDS] Sinusgenerator verwendet werden. Er braucht keine Tabelle, daher ist eine höhere Amplitudenauflösung von z.B. 16 Bit möglich. Es entsteht gleichzeitig eine Sinus- und Cosinusschwingung.&lt;br /&gt;
&lt;br /&gt;
===linear vectoring===&lt;br /&gt;
Division y/x&lt;br /&gt;
&lt;br /&gt;
===linear rotation===&lt;br /&gt;
Multiplikation y*x&lt;br /&gt;
&lt;br /&gt;
===hyperbolic vectoring===&lt;br /&gt;
[http://de.wikipedia.org/wiki/Arsinh arsinh, arcosh], [http://de.wikipedia.org/wiki/Artanh artanh, arcoth], [http://de.wikipedia.org/wiki/Logarithmus#Natürlicher_Logarithmus_und_andere_spezielle_Logarithmen ln], [http://de.wikipedia.org/wiki/Dekadischer_Logarithmus log10], [http://de.wikipedia.org/wiki/Quadratwurzel Quadratwurzel]&lt;br /&gt;
&lt;br /&gt;
===hyperbolic rotation===&lt;br /&gt;
[http://de.wikipedia.org/wiki/Sinh sinh, cosh], [http://de.wikipedia.org/wiki/Tanh tanh, coth], [http://de.wikipedia.org/wiki/Exponentialfunktion e-Funktion]&lt;br /&gt;
==Die avrfix - Festkommabibliothek==&lt;br /&gt;
Entstand im Rahmen einer Baccalaureus-Arbeit an der TU Wien und ist auf [https://sourceforge.net/projects/avrfix/ Sourceforge] frei verfügbar.&lt;br /&gt;
Sie bietet neben den Grundrechenarten und einigen Hilfsroutinen zur Rundung und Überlaufbehandlung vor allem zwei CORDIC - Routinen, siehe [http://mesh.dl.sourceforge.net/sourceforge/avrfix/avrfix.pdf Handbuch avrlib.pdf Seite 126]:&lt;br /&gt;
* &amp;quot;CORDICCK&amp;quot; circular&lt;br /&gt;
* &amp;quot;CORDICHK&amp;quot; hyperbolic&lt;br /&gt;
der lineare Modus ist nicht vorhanden.&lt;br /&gt;
 &lt;br /&gt;
Mit dem Parameter &amp;quot;mode&amp;quot; wird die Transformationsrichtung übergeben: &lt;br /&gt;
* mode = 0 entspricht rotation&lt;br /&gt;
* mode = 1 entspricht vectoring&lt;br /&gt;
&lt;br /&gt;
Mit dem Parameter &amp;quot;iterations&amp;quot; wird einer von zwei möglichen 32-Bit Festkomma-Datentypen ausgewählt:&lt;br /&gt;
* _Akkum  hat 1 Vorzeichenbit, 15 Vorkomma- und 16 Nachkommabits, iterations=16&lt;br /&gt;
* _lAkkum hat 1 Vorzeichenbit,  7 Vorkomma- und 24 Nachkommabits, iterations=24&lt;br /&gt;
&lt;br /&gt;
==CORDIC im Diskussionsforum==&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/58111  &amp;quot;echter&amp;quot; double mit AVR-GCC]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/39891  Cordic-Algorithmus, FPGA]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/69575  CORDIC-Core Xilinx]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/69573  Mischung mit sin/cos in VHDL]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/84685  Genauigkeitsproblem, FFT im FPGA]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/88563  Wurzel mit Cordic auf Spartan3E]&lt;br /&gt;
&lt;br /&gt;
==Bücher &amp;amp; Artikel==&lt;br /&gt;
* DSP with FPGAs U.Meyer-Baese Kap.2.8 ISBN 3-540-21119-5&lt;br /&gt;
* [http://www.ddj.com/184408428 Implementing Cordic Algorithms] by Pitts Jarvis, DDJ Oktober 01, 1990&lt;br /&gt;
* [http://www.ddj.com/cpp/184402614 The CORDIC Method for Faster sin and cos Calculations] by Michael Bertrand, DDJ November 01, 1992&lt;br /&gt;
* [http://www.ddj.com/184404244 Microcontrollers &amp;amp; CORDIC Methods] by Michael Pashea, DDJ September 01, 2000&lt;br /&gt;
* [http://www.ddj.com/embedded/193300128 Implementing Matrix Inversions in Fixed-point Hardware] by Ramon Uribe and Tom Cesear, DDJ Oktober 12, 2006&lt;br /&gt;
* [http://www.ddj.com/architect/196700769 Software Implementation of Trigonometric Functions Using CORDIC Algorithm] by Christober Rayappan, DDJ Dezember 19, 2006&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[http://de.wikipedia.org/wiki/CORDIC Wikipedia zu Cordic, dort weitere Links]&lt;br /&gt;
*[http://www.jacques-laporte.org/digit_by_digit.htm Historisches, u.a. Originalliteratur ab 1959 als PDF]&lt;br /&gt;
*[http://avrfix.sourceforge.net/ avrfix Festkommabibliothek für AVR in C] und [https://sourceforge.net/projects/avrfix/ Downloadseite]&lt;br /&gt;
*[http://www.andreadrian.de/oldcpu/Z80_number_cruncher.html CORDIC sin/cos in C und Z80-Assembler]&lt;br /&gt;
*[http://www.restena.lu/convict/Jeunes/Math/Fast_operations2.htm schnelle Division mit CORDIC in PIC-Assembler]&lt;br /&gt;
*[http://www.ddj.com/184408428 CORDIC-C-Routinen aus Dr.Dobbs Journal 1990] und hier [http://people.csail.mit.edu/hqm/imode/fplib/cordic_code.html Converted to ANSI-C]&lt;br /&gt;
*[http://www.emesys.com/BS2mathC.htm Cordic sin/cos und kart./polar auf Basic-Stamp]&lt;br /&gt;
*[http://www.restena.lu/convict/Jeunes/Math/arctan.htm CORDIC-Arcustangens für Lego/Renesas H8]&lt;br /&gt;
*[http://www.xilinx.com/bvdocs/ipcenter/data_sheet/cordic.pdf Xilinx Cordic IP-Block mit ausführlicher Beschreibung]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=6502&amp;diff=27364</id>
		<title>6502</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=6502&amp;diff=27364"/>
		<updated>2008-04-11T14:19:27Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der 6502 - Prozessor war einer der ersten Prozessoren, die in Heimcomputern verwendet wurden, und existiert seit dem Jahr 1976 (?)&lt;br /&gt;
&lt;br /&gt;
Er wurde eingesetzt in:&lt;br /&gt;
* KIM-1 (MOS technology)&lt;br /&gt;
* AIM-65 (Rockwell)&lt;br /&gt;
* EMUF Einplatinencomputer mit universeller Festprogrammierung mit 6504 (Franzis-Verlag &amp;quot;mc&amp;quot;)&lt;br /&gt;
* Elektor Junior Computer&lt;br /&gt;
* Apple II&lt;br /&gt;
* Commodore PET und folgende&lt;br /&gt;
* Atari 400 /800&lt;br /&gt;
* Atari 2600&lt;br /&gt;
* Atari 7800&lt;br /&gt;
* Nintendo Entertainment System - beste Spielekonsole aller Zeiten&lt;br /&gt;
&lt;br /&gt;
auch der Prozessor im VIC20 und C64 gehört zur 6502-Familie.&lt;br /&gt;
&lt;br /&gt;
Es gibt heute noch Mikrocontroller mit 6502 Kern.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ADuC7xxx&amp;diff=27363</id>
		<title>ADuC7xxx</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ADuC7xxx&amp;diff=27363"/>
		<updated>2008-04-11T14:18:07Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analog Devices ARM7TDMI-based Precision Analog Microconverters&lt;br /&gt;
&lt;br /&gt;
Besonderheiten:&lt;br /&gt;
* 12-Bit 1 MSPS Analog-Digital/Digital-Analog-Wandler&lt;br /&gt;
* Einige mit 12-Bit Digital-Analog-Wandler&lt;br /&gt;
* Programmable Logic Array (PLA)&lt;br /&gt;
* Teilweise nur 32 kHz Quarz als Takteingang notwendig (per PLL auf bis zu 45 MHz)&lt;br /&gt;
* Serieller Bootloader oder I²C-Bootloader vorprogrammiert&lt;br /&gt;
* (Zumindest einige) ohne Interrupt-Controller (kein AIC oder VIC)&lt;br /&gt;
&lt;br /&gt;
Gemacht für Embedded Sensor-/Control-Loop-, oder bei den größeren Derivaten mit 3-Phasen PWM, für Motor-Control-Applikationen.&lt;br /&gt;
&lt;br /&gt;
Von ADI gibt es eine recht brauchbare Sammlung an [ftp://ftp.analog.com/pub/www/technology/dataConverters/microconverter/source_code.zip Beispielcode] in C (wird auf der Website (11/2006) irrtümlich als Assembler-Code ausgewiesen). Der Beispielcode ist auch für die GNU-Toolchain vorbereitet. &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Linksammlung#ARM|Linksammlung Abschnitt ARM]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.analog.com/en/content/0,2886,762%255F%252D1%255F31068,00.html Analog Devices ADUC7000-Series &amp;quot;Homepage&amp;quot;]&lt;br /&gt;
&amp;lt;!-- * [http://www.analog.com/en/press/0,2890,3%255F%255F96529,00.html] - Mit integriertem DDS (Direct Digital Synthesizer) - laut Website noch nicht verfügbar - mthomas 11/2006) --&amp;gt;&lt;br /&gt;
* [http://tech.groups.yahoo.com/group/lpc21isp/ lpc21isp] &amp;quot;Multiplattform&amp;quot; Programmiersoftware für den seriellen Bootloader&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM-MP3-Player&amp;diff=27362</id>
		<title>ARM-MP3-Player</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM-MP3-Player&amp;diff=27362"/>
		<updated>2008-04-11T14:17:22Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von [[Benutzer:Andreas]]&lt;br /&gt;
&lt;br /&gt;
Jeder Mikrocontroller-Bastler der was auf sich hält baut irgend wann mal einen [[MP3]]-Player. Das hier ist meiner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diese Seite ist veraltet! Eine ausführlichere Beschreibung (auf Englisch) gibt es auf der Seite [[ARM MP3/AAC Player]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Status (28.05.06) ==&lt;br /&gt;
&lt;br /&gt;
* [http://shop.mikrocontroller.net/ AT91SAM7S64-Dev-Board], SAM7S64 gegen SAM7S256 ausgetauscht&lt;br /&gt;
* MP3- und AAC-Decoder: https://datatype.helixcommunity.org/&lt;br /&gt;
* Datenspeicher: SD-Karte, Ansteuerung über die FAT-Bibliothek von http://elm-chan.org/fsw/ff/00index_e.html&lt;br /&gt;
* DAC: CS4331 (auf MP3-Player-Platine &amp;quot;Pump&amp;quot; aus der c&#039;t), Fütterung über SSC mit DMA&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment.php/343708/IMG_3779.JPG Bild des Hardwareaufbaus]&lt;br /&gt;
* Abspielen von WAV-, MP3- und AAC-Dateien (im ADTS-Format) von SD-Karte funktioniert einwandfrei&lt;br /&gt;
* VBR-MP3 mit durchschnittlich 195 kbit/s (128-320) problemlos abspielbar&lt;br /&gt;
* AAC über ca. 140 kBit/s mit Aussetzern, sollte kein Problem mehr sein wenn das Verhältnis CPU-Takt/Samplerate etwas erhöht wird (sobald der TLV320-DAC dran ist)&lt;br /&gt;
&lt;br /&gt;
=== Noch zu tun ===&lt;br /&gt;
&lt;br /&gt;
* ID3v2-Tags auslesen&lt;br /&gt;
* Playlists (m3u)&lt;br /&gt;
* neuen DAC einbauen&lt;br /&gt;
* OLED-Display anschließen&lt;br /&gt;
* AAC im MP4-Container abspielen&lt;br /&gt;
&lt;br /&gt;
== Überlegungen zum DA-Wandler ==&lt;br /&gt;
&lt;br /&gt;
=== Taktversorgung ===&lt;br /&gt;
&lt;br /&gt;
Soll-Werte:&lt;br /&gt;
* Samplerate (word clock, LRCLK): &amp;lt;math&amp;gt;f_s = 44\,100 \mathrm{Hz}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Bittakt: &amp;lt;math&amp;gt;f_b = f_s \cdot 2 \cdot 16 = 1\,411\,200 \mathrm{Hz}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samplerate und Bittakt werden normalerweise synchron vom I2S-Interface erzeugt.&lt;br /&gt;
&lt;br /&gt;
* Master-Clock (MCLK): Fast alle DACs benötigen zusätzlich einen Takt mit dem 256-fachen der Samplerate, der exakt synchron zu den anderen Takten sein muss. In diesem Fall kann der DAC den Bittakt aus MCLK und LRCLK intern selbst erzeugen, so dass man den Bittakt nicht anzuschließen braucht.&lt;br /&gt;
&lt;br /&gt;
Um halbwegs zur üblichen Samplerate passende Takte zu erzeugen muss der Controller mit einer &amp;quot;krummen&amp;quot; Frequenz laufen (z.B. MCLK * 4 = 45.16 MHz). Das sollte sich mit der PLL hinbekommen lassen.&lt;br /&gt;
&lt;br /&gt;
Eine bessere Alternative sind DACs die intern einen sinnvollen Takt erzeugen und ausgeben können, so dass man das SSC peripheral des Controllers damit betreiben kann. Der Vorteil ist dass der Controller mit einer beliebigen Frequenz laufen kann.&lt;br /&gt;
&lt;br /&gt;
=== Erster Prototyp: CS4331 ===&lt;br /&gt;
&lt;br /&gt;
Für den ersten Prototypen verwende ich einen CS4331. Hier wird der PWM-Controller für die MCLK-Erzeugung verwendet, SCLK wird vom Wandler intern aus MLCK und LRCLK abgeleitet (siehe &amp;quot;Taktversorgung&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Bild:ARM-MP3-Blockschaltbild.png]]&lt;br /&gt;
&lt;br /&gt;
Der Prozessortakt ist hier auf 48.05 MHz eingestellt. Geteilt durch 4 gibt das einen etwas unpassenden Wert für den DAC (Soll: 256 * 44.1 kHz = 11.29 MHz, Ist: 12 MHz), somit hört sich alles etwas zu hoch an.&lt;br /&gt;
&lt;br /&gt;
Code zur Initialisierung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
	/************  PWM  ***********/&lt;br /&gt;
	/*   PWM0 = MAINCK/4          */&lt;br /&gt;
	*AT91C_PMC_PCER = (1 &amp;lt;&amp;lt; AT91C_ID_PWMC); // Enable Clock for PWM controller&lt;br /&gt;
	*AT91C_PWMC_CH0_CPRDR = 2; // channel period = 2&lt;br /&gt;
	*AT91C_PWMC_CH0_CMR = 1; // prescaler = 2&lt;br /&gt;
	pPIO-&amp;gt;PIO_PDR = AT91C_PA0_PWM0; // enable pin&lt;br /&gt;
	*AT91C_PWMC_CH0_CUPDR = 1;&lt;br /&gt;
	*AT91C_PWMC_ENA = AT91C_PWMC_CHID0; // enable channel 0 output&lt;br /&gt;
&lt;br /&gt;
	/************  SSC  ***********/&lt;br /&gt;
	*AT91C_PMC_PCER = (1 &amp;lt;&amp;lt; AT91C_ID_SSC); // Enable Clock for SSC controller&lt;br /&gt;
	*AT91C_SSC_CR = AT91C_SSC_SWRST; // reset&lt;br /&gt;
	*AT91C_SSC_CMR = 16;&lt;br /&gt;
	*AT91C_SSC_TCMR = AT91C_SSC_CKS_DIV | AT91C_SSC_CKO_CONTINOUS |&lt;br /&gt;
	                  AT91C_SSC_START_FALL_RF |&lt;br /&gt;
	                  (1 &amp;lt;&amp;lt; 16) |   // STTDLY = 1&lt;br /&gt;
	                  (15 &amp;lt;&amp;lt; 24);   // PERIOD = 15&lt;br /&gt;
	pPIO-&amp;gt;PIO_PDR = AT91C_PA16_TK | AT91C_PA15_TF | AT91C_PA17_TD; // enable pins&lt;br /&gt;
	*AT91C_SSC_TFMR = (15) |        // 16 bit word length&lt;br /&gt;
	                  (1 &amp;lt;&amp;lt; 8) |	// DATNB = 1 =&amp;gt; 2 words per frame&lt;br /&gt;
	                  (15 &amp;lt;&amp;lt; 16) |	// FSLEN = 15&lt;br /&gt;
	                  AT91C_SSC_MSBF | AT91C_SSC_FSOS_NEGATIVE;&lt;br /&gt;
	*AT91C_SSC_CR = AT91C_SSC_TXEN; // enable TX&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fazit: CS4331 ist brauchbar zum Testen, mehr nicht.&lt;br /&gt;
&lt;br /&gt;
=== Zweite Version: TLV320AIC23BPW ===&lt;br /&gt;
&lt;br /&gt;
Geplant ist den TLV320AIC23BPW erst mal mit einer [[IC-Gehäuseformen#Adapterplatinen für SMD-ICs|Adapterplatine]] ans SAM7-Board anzuschließen.&lt;br /&gt;
&lt;br /&gt;
=== Auflistung interessanter DACs ===&lt;br /&gt;
&lt;br /&gt;
==== TLV320AIC23B ====&lt;br /&gt;
&lt;br /&gt;
* http://focus.ti.com/docs/prod/folders/print/tlv320aic23b.html&lt;br /&gt;
* Kopfhörer-Verstärker&lt;br /&gt;
* Line- und Mikrofoneingang&lt;br /&gt;
* 28 TSSOP&lt;br /&gt;
* läuft auch mit 12 MHz&lt;br /&gt;
* gibt&#039;s bei Digikey&lt;br /&gt;
* -&amp;gt; perfekt!&lt;br /&gt;
&lt;br /&gt;
==== MAX9850 ====&lt;br /&gt;
* 28 PIN (aber nur im bastlerunfreundlichen TQFN-Package erhältlich!)&lt;br /&gt;
* mit Kopfhörer-Amp. u.a.&lt;br /&gt;
* Keine großen Entkoppelkondensatoren notwendig&lt;br /&gt;
* relativ aufwendige Beschaltung und Konfiguration&lt;br /&gt;
* auch krumme MCLK erlaubt:&lt;br /&gt;
* Anforderung im Integer mode: Takt ganzzahliges Vielfaches der 16fachen Samplerate =&amp;gt; nur bei PLL-Multiplikator von 4 möglich&lt;br /&gt;
* Anforderung im Noninteger mode: Takt fast beliebig, somit 44.1 kHz kein Problem, auch mit 18.432 MHz-Quarz&lt;br /&gt;
* nur als Sample beschaffbar? -&amp;gt; scheidet aus&lt;br /&gt;
&lt;br /&gt;
==== Wolfson WM8727 ====&lt;br /&gt;
&lt;br /&gt;
http://www.wolfson.co.uk/products/digital_audio/dacs/WM8727/&lt;br /&gt;
&lt;br /&gt;
* 8-pin SOIC&lt;br /&gt;
* keine Konfiguration&lt;br /&gt;
* nicht sehr weit verbreitet&lt;br /&gt;
&lt;br /&gt;
==== CS4331 ====&lt;br /&gt;
&lt;br /&gt;
http://joule.bu.edu/~hazen/DataSheets/Cirrus_Crystal/4330.pdf&lt;br /&gt;
&lt;br /&gt;
* 8 pin SOIC&lt;br /&gt;
* keine Konfiguration&lt;br /&gt;
* nicht mehr hergestellt&lt;br /&gt;
&lt;br /&gt;
==== CS4334 ====&lt;br /&gt;
&lt;br /&gt;
* 8-pin SOIC&lt;br /&gt;
* keine Konfiguration&lt;br /&gt;
* nur 5V-Betrieb&lt;br /&gt;
&lt;br /&gt;
==== WM8731 ====&lt;br /&gt;
&lt;br /&gt;
* The WM8731 is a very low power, high quality audio codec with integrated headphone driver, designed for portable digital audio applications.&lt;br /&gt;
* Integrierte PLL-Takterzeugung aus z.B. 12 MHz&lt;br /&gt;
* Aufnahmefunktion möglich&lt;br /&gt;
* Mikro-Vorverstärker und Kopfhörer-Verstärker eingebaut&lt;br /&gt;
* Nur in 100er-Stückzahlen erhältlich -&amp;gt; scheidet aus&lt;br /&gt;
&lt;br /&gt;
==== TDA1543 ====&lt;br /&gt;
&lt;br /&gt;
* kein MCLK nötig&lt;br /&gt;
* DIP-8&lt;br /&gt;
* gibt&#039;s bei Segor für 2 Euro, bei Reichelt für 0,75 Euro&lt;br /&gt;
* qualitätsmäßig eher Low-End&lt;br /&gt;
* -&amp;gt; perfekt zum Testen!&lt;br /&gt;
* Datenblatt: http://www.docethifi.com/TDA1543_.PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Beispiel_Makefile&amp;diff=27361</id>
		<title>Beispiel Makefile</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Beispiel_Makefile&amp;diff=27361"/>
		<updated>2008-04-11T14:16:43Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Beispiel-Makefile =&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
makefiles sind Steuerdateien für ein Programm, das &amp;quot;make&amp;quot; &amp;quot;/bin/make&amp;quot; oder make.exe heißt. Mit dem WinAVR kommt C:\WINAVR\utils\bin\make.exe&lt;br /&gt;
&lt;br /&gt;
Um ein Makefile zu benutzen, muss man in dem Verzeichnis, in dem sich das makefile befindet, &amp;quot;make&amp;quot; aufrufen. Wenn man das von der DOS-Box aus tut, dann sieht man auch die Fehlerausgaben.&lt;br /&gt;
&lt;br /&gt;
== Beispiel 1 ==&lt;br /&gt;
&lt;br /&gt;
Dies ist ein Beispiel-Makefile für Programmieranfänger:&lt;br /&gt;
&lt;br /&gt;
*AVR: Mega16&lt;br /&gt;
*Programmer: Pony-Stk200&lt;br /&gt;
*CPU-Frequenz: 1 Mhz&lt;br /&gt;
*C-Datei: main.c&lt;br /&gt;
&lt;br /&gt;
Hier gibt es das Beispiel-Makefile zum [[Media:makefile | Herunterladen]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# Hey Emacs, this is a -*- makefile -*-&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.&lt;br /&gt;
#&lt;br /&gt;
# Released to the Public Domain&lt;br /&gt;
#&lt;br /&gt;
# Additional material for this makefile was written by:&lt;br /&gt;
# Peter Fleury&lt;br /&gt;
# Tim Henigan&lt;br /&gt;
# Colin O&#039;Flynn&lt;br /&gt;
# Reiner Patommel&lt;br /&gt;
# Markus Pfaff&lt;br /&gt;
# Sander Pool&lt;br /&gt;
# Frederik Rouleau&lt;br /&gt;
# Carlos Lamas&lt;br /&gt;
#&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
# On command line:&lt;br /&gt;
#&lt;br /&gt;
# make all = Make software.&lt;br /&gt;
#&lt;br /&gt;
# make clean = Clean out built project files.&lt;br /&gt;
#&lt;br /&gt;
# make coff = Convert ELF to AVR COFF.&lt;br /&gt;
#&lt;br /&gt;
# make extcoff = Convert ELF to AVR Extended COFF.&lt;br /&gt;
#&lt;br /&gt;
# make program = Download the hex file to the device, using avrdude.&lt;br /&gt;
#                Please customize the avrdude settings below first!&lt;br /&gt;
#&lt;br /&gt;
# make debug = Start either simulavr or avarice as specified for debugging, &lt;br /&gt;
#              with avr-gdb or avr-insight as the front end for debugging.&lt;br /&gt;
#&lt;br /&gt;
# make filename.s = Just compile filename.c into the assembler code only.&lt;br /&gt;
#&lt;br /&gt;
# make filename.i = Create a preprocessed source file for use in submitting&lt;br /&gt;
#                   bug reports to the GCC project.&lt;br /&gt;
#&lt;br /&gt;
# To rebuild project do &amp;quot;make clean&amp;quot; then &amp;quot;make all&amp;quot;.&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# MCU name&lt;br /&gt;
MCU = atmega16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Processor frequency.&lt;br /&gt;
#     This will define a symbol, F_CPU, in all source code files equal to the &lt;br /&gt;
#     processor frequency. You can then use this symbol in your source code to &lt;br /&gt;
#     calculate timings. Do NOT tack on a &#039;UL&#039; at the end, this will be done&lt;br /&gt;
#     automatically to create a 32-bit value in your source code.&lt;br /&gt;
#     Typical values are:&lt;br /&gt;
F_CPU =  1000000&lt;br /&gt;
#         F_CPU =  1843200&lt;br /&gt;
#         F_CPU =  2000000&lt;br /&gt;
#         F_CPU =  3686400&lt;br /&gt;
#         F_CPU =  4000000&lt;br /&gt;
#         F_CPU =  7372800&lt;br /&gt;
#         F_CPU =  8000000&lt;br /&gt;
#         F_CPU = 11059200&lt;br /&gt;
#         F_CPU = 14745600&lt;br /&gt;
#         F_CPU = 16000000&lt;br /&gt;
#         F_CPU = 18432000&lt;br /&gt;
#         F_CPU = 20000000&lt;br /&gt;
#         F_CPU = 8000000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Output format. (can be srec, ihex, binary)&lt;br /&gt;
FORMAT = ihex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Target file name (without extension).&lt;br /&gt;
TARGET = main&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Object files directory&lt;br /&gt;
OBJDIR = obj&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# List C source files here. (C dependencies are automatically generated.)&lt;br /&gt;
SRC = $(TARGET).c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# List C++ source files here. (C dependencies are automatically generated.)&lt;br /&gt;
CPPSRC = &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# List Assembler source files here.&lt;br /&gt;
#     Make them always end in a capital .S.  Files ending in a lowercase .s&lt;br /&gt;
#     will not be considered source files but generated files (assembler&lt;br /&gt;
#     output from the compiler), and will be deleted upon &amp;quot;make clean&amp;quot;!&lt;br /&gt;
#     Even though the DOS/Win* filesystem matches both .s and .S the same,&lt;br /&gt;
#     it will preserve the spelling of the filenames, and gcc itself does&lt;br /&gt;
#     care about how the name is spelled on its command-line.&lt;br /&gt;
ASRC =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Optimization level, can be [0, 1, 2, 3, s]. &lt;br /&gt;
#     0 = turn off optimization. s = optimize for size.&lt;br /&gt;
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)&lt;br /&gt;
OPT = s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Debugging format.&lt;br /&gt;
#     Native formats for AVR-GCC&#039;s -g are dwarf-2 [default] or stabs.&lt;br /&gt;
#     AVR Studio 4.10 requires dwarf-2.&lt;br /&gt;
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.&lt;br /&gt;
DEBUG = dwarf-2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# List any extra directories to look for include files here.&lt;br /&gt;
#     Each directory must be seperated by a space.&lt;br /&gt;
#     Use forward slashes for directory separators.&lt;br /&gt;
#     For a directory that has spaces, enclose it in quotes.&lt;br /&gt;
EXTRAINCDIRS = &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Compiler flag to set the C Standard level.&lt;br /&gt;
#     c89   = &amp;quot;ANSI&amp;quot; C&lt;br /&gt;
#     gnu89 = c89 plus GCC extensions&lt;br /&gt;
#     c99   = ISO C99 standard (not yet fully implemented)&lt;br /&gt;
#     gnu99 = c99 plus GCC extensions&lt;br /&gt;
CSTANDARD = -std=gnu99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Place -D or -U options here for C sources&lt;br /&gt;
CDEFS = -DF_CPU=$(F_CPU)UL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Place -D or -U options here for C++ sources&lt;br /&gt;
CPPDEFS = -DF_CPU=$(F_CPU)UL&lt;br /&gt;
#CPPDEFS += -D__STDC_LIMIT_MACROS&lt;br /&gt;
#CPPDEFS += -D__STDC_CONSTANT_MACROS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Compiler Options C ----------------&lt;br /&gt;
#  -g*:          generate debugging information&lt;br /&gt;
#  -O*:          optimization level&lt;br /&gt;
#  -f...:        tuning, see GCC manual and avr-libc documentation&lt;br /&gt;
#  -Wall...:     warning level&lt;br /&gt;
#  -Wa,...:      tell GCC to pass this to the assembler.&lt;br /&gt;
#    -adhlns...: create assembler listing&lt;br /&gt;
CFLAGS = -g$(DEBUG)&lt;br /&gt;
CFLAGS += $(CDEFS)&lt;br /&gt;
CFLAGS += -O$(OPT)&lt;br /&gt;
#CFLAGS += -mint8&lt;br /&gt;
#CFLAGS += -mshort-calls&lt;br /&gt;
CFLAGS += -funsigned-char&lt;br /&gt;
CFLAGS += -funsigned-bitfields&lt;br /&gt;
CFLAGS += -fpack-struct&lt;br /&gt;
CFLAGS += -fshort-enums&lt;br /&gt;
#CFLAGS += -fno-unit-at-a-time&lt;br /&gt;
CFLAGS += -Wall&lt;br /&gt;
CFLAGS += -Wstrict-prototypes&lt;br /&gt;
CFLAGS += -Wundef&lt;br /&gt;
#CFLAGS += -Wunreachable-code&lt;br /&gt;
#CFLAGS += -Wsign-compare&lt;br /&gt;
CFLAGS += -Wa,-adhlns=$(&amp;lt;:%.c=$(OBJDIR)/%.lst)&lt;br /&gt;
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))&lt;br /&gt;
CFLAGS += $(CSTANDARD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Compiler Options C++ ----------------&lt;br /&gt;
#  -g*:          generate debugging information&lt;br /&gt;
#  -O*:          optimization level&lt;br /&gt;
#  -f...:        tuning, see GCC manual and avr-libc documentation&lt;br /&gt;
#  -Wall...:     warning level&lt;br /&gt;
#  -Wa,...:      tell GCC to pass this to the assembler.&lt;br /&gt;
#    -adhlns...: create assembler listing&lt;br /&gt;
CPPFLAGS = -g$(DEBUG)&lt;br /&gt;
CPPFLAGS += $(CPPDEFS)&lt;br /&gt;
CPPFLAGS += -O$(OPT)&lt;br /&gt;
#CPPFLAGS += -mint8&lt;br /&gt;
#CPPFLAGS += -mshort-calls&lt;br /&gt;
CPPFLAGS += -funsigned-char&lt;br /&gt;
CPPFLAGS += -funsigned-bitfields&lt;br /&gt;
CPPFLAGS += -fpack-struct&lt;br /&gt;
CPPFLAGS += -fshort-enums&lt;br /&gt;
CPPFLAGS += -fno-exceptions&lt;br /&gt;
#CPPFLAGS += -fno-unit-at-a-time&lt;br /&gt;
CPPFLAGS += -Wall&lt;br /&gt;
#CPPFLAGS += -Wstrict-prototypes&lt;br /&gt;
CFLAGS += -Wundef&lt;br /&gt;
#CPPFLAGS += -Wunreachable-code&lt;br /&gt;
#CPPFLAGS += -Wsign-compare&lt;br /&gt;
CPPFLAGS += -Wa,-adhlns=$(&amp;lt;:%.cpp=$(OBJDIR)/%.lst)&lt;br /&gt;
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))&lt;br /&gt;
#CPPFLAGS += $(CSTANDARD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Assembler Options ----------------&lt;br /&gt;
#  -Wa,...:   tell GCC to pass this to the assembler.&lt;br /&gt;
#  -ahlms:    create listing&lt;br /&gt;
#  -gstabs:   have the assembler create line number information; note that&lt;br /&gt;
#             for use in COFF files, additional information about filenames&lt;br /&gt;
#             and function names needs to be present in the assembler source&lt;br /&gt;
#             files -- see avr-libc docs [FIXME: not yet described there]&lt;br /&gt;
ASFLAGS = -Wa,-adhlns=$(&amp;lt;:%.S=$(OBJDIR)/%.lst),-gstabs &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Library Options ----------------&lt;br /&gt;
# Minimalistic printf version&lt;br /&gt;
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min&lt;br /&gt;
&lt;br /&gt;
# Floating point printf version (requires MATH_LIB = -lm below)&lt;br /&gt;
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt&lt;br /&gt;
&lt;br /&gt;
# If this is left blank, then it will use the Standard printf version.&lt;br /&gt;
PRINTF_LIB = &lt;br /&gt;
#PRINTF_LIB = $(PRINTF_LIB_MIN)&lt;br /&gt;
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Minimalistic scanf version&lt;br /&gt;
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min&lt;br /&gt;
&lt;br /&gt;
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)&lt;br /&gt;
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt&lt;br /&gt;
&lt;br /&gt;
# If this is left blank, then it will use the Standard scanf version.&lt;br /&gt;
SCANF_LIB = &lt;br /&gt;
#SCANF_LIB = $(SCANF_LIB_MIN)&lt;br /&gt;
#SCANF_LIB = $(SCANF_LIB_FLOAT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MATH_LIB = -lm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- External Memory Options ----------------&lt;br /&gt;
&lt;br /&gt;
# 64 KB of external RAM, starting after internal RAM (ATmega128!),&lt;br /&gt;
# used for variables (.data/.bss) and heap (malloc()).&lt;br /&gt;
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff&lt;br /&gt;
&lt;br /&gt;
# 64 KB of external RAM, starting after internal RAM (ATmega128!),&lt;br /&gt;
# only used for heap (malloc()).&lt;br /&gt;
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff&lt;br /&gt;
&lt;br /&gt;
EXTMEMOPTS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Linker Options ----------------&lt;br /&gt;
#  -Wl,...:     tell GCC to pass this to linker.&lt;br /&gt;
#    -Map:      create map file&lt;br /&gt;
#    --cref:    add cross reference to  map file&lt;br /&gt;
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref&lt;br /&gt;
LDFLAGS += $(EXTMEMOPTS)&lt;br /&gt;
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)&lt;br /&gt;
#LDFLAGS += -T linker_script.x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Programming Options (avrdude) ----------------&lt;br /&gt;
&lt;br /&gt;
# Programming hardware: alf avr910 avrisp bascom bsd &lt;br /&gt;
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500&lt;br /&gt;
#&lt;br /&gt;
# Type: avrdude -c ?&lt;br /&gt;
# to get a full listing.&lt;br /&gt;
#&lt;br /&gt;
AVRDUDE_PROGRAMMER = pony-stk200&lt;br /&gt;
&lt;br /&gt;
# com1 = serial port. Use lpt1 to connect to parallel port.&lt;br /&gt;
AVRDUDE_PORT = lpt1&lt;br /&gt;
&lt;br /&gt;
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex&lt;br /&gt;
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Uncomment the following if you want avrdude&#039;s erase cycle counter.&lt;br /&gt;
# Note that this counter needs to be initialized first using -Yn,&lt;br /&gt;
# see avrdude manual.&lt;br /&gt;
#AVRDUDE_ERASE_COUNTER = -y&lt;br /&gt;
&lt;br /&gt;
# Uncomment the following if you do /not/ wish a verification to be&lt;br /&gt;
# performed after programming the device.&lt;br /&gt;
#AVRDUDE_NO_VERIFY = -V&lt;br /&gt;
&lt;br /&gt;
# Increase verbosity level.  Please use this when submitting bug&lt;br /&gt;
# reports about avrdude. See &amp;lt;http://savannah.nongnu.org/projects/avrdude&amp;gt; &lt;br /&gt;
# to submit bug reports.&lt;br /&gt;
#AVRDUDE_VERBOSE = -v -v&lt;br /&gt;
&lt;br /&gt;
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)&lt;br /&gt;
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)&lt;br /&gt;
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)&lt;br /&gt;
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------- Debugging Options ----------------&lt;br /&gt;
&lt;br /&gt;
# For simulavr only - target MCU frequency.&lt;br /&gt;
DEBUG_MFREQ = $(F_CPU)&lt;br /&gt;
&lt;br /&gt;
# Set the DEBUG_UI to either gdb or insight.&lt;br /&gt;
DEBUG_UI = gdb&lt;br /&gt;
# DEBUG_UI = insight&lt;br /&gt;
&lt;br /&gt;
# Set the debugging back-end to either avarice, simulavr.&lt;br /&gt;
#DEBUG_BACKEND = avarice&lt;br /&gt;
DEBUG_BACKEND = simulavr&lt;br /&gt;
&lt;br /&gt;
# GDB Init Filename.&lt;br /&gt;
GDBINIT_FILE = __avr_gdbinit&lt;br /&gt;
&lt;br /&gt;
# When using avarice settings for the JTAG&lt;br /&gt;
JTAG_DEV = /dev/com1&lt;br /&gt;
&lt;br /&gt;
# Debugging port used to communicate between GDB / avarice / simulavr.&lt;br /&gt;
DEBUG_PORT = 4242&lt;br /&gt;
&lt;br /&gt;
# Debugging host used to communicate between GDB / avarice / simulavr, normally&lt;br /&gt;
#     just set to localhost unless doing some sort of crazy debugging when &lt;br /&gt;
#     avarice is running on a different computer.&lt;br /&gt;
DEBUG_HOST = localhost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#============================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Define programs and commands.&lt;br /&gt;
SHELL = sh&lt;br /&gt;
CC = avr-gcc&lt;br /&gt;
OBJCOPY = avr-objcopy&lt;br /&gt;
OBJDUMP = avr-objdump&lt;br /&gt;
SIZE = avr-size&lt;br /&gt;
NM = avr-nm&lt;br /&gt;
AVRDUDE = avrdude&lt;br /&gt;
REMOVE = rm -f&lt;br /&gt;
REMOVEDIR = rm -rf&lt;br /&gt;
COPY = cp&lt;br /&gt;
WINSHELL = cmd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Define Messages&lt;br /&gt;
# English&lt;br /&gt;
MSG_ERRORS_NONE = Errors: none&lt;br /&gt;
MSG_BEGIN = -------- begin --------&lt;br /&gt;
MSG_END = --------  end  --------&lt;br /&gt;
MSG_SIZE_BEFORE = Size before: &lt;br /&gt;
MSG_SIZE_AFTER = Size after:&lt;br /&gt;
MSG_COFF = Converting to AVR COFF:&lt;br /&gt;
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:&lt;br /&gt;
MSG_FLASH = Creating load file for Flash:&lt;br /&gt;
MSG_EEPROM = Creating load file for EEPROM:&lt;br /&gt;
MSG_EXTENDED_LISTING = Creating Extended Listing:&lt;br /&gt;
MSG_SYMBOL_TABLE = Creating Symbol Table:&lt;br /&gt;
MSG_LINKING = Linking:&lt;br /&gt;
MSG_COMPILING = Compiling C:&lt;br /&gt;
MSG_COMPILING_CPP = Compiling C++:&lt;br /&gt;
MSG_ASSEMBLING = Assembling:&lt;br /&gt;
MSG_CLEANING = Cleaning project:&lt;br /&gt;
MSG_CREATING_LIBRARY = Creating library:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Define all object files.&lt;br /&gt;
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) &lt;br /&gt;
&lt;br /&gt;
# Define all listing files.&lt;br /&gt;
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Compiler flags to generate dependency files.&lt;br /&gt;
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Combine all necessary flags and optional flags.&lt;br /&gt;
# Add target processor to flags.&lt;br /&gt;
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)&lt;br /&gt;
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)&lt;br /&gt;
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Default target.&lt;br /&gt;
all: begin gccversion sizebefore build sizeafter end&lt;br /&gt;
&lt;br /&gt;
# Change the build target to build a HEX file or a library.&lt;br /&gt;
build: elf hex eep lss sym&lt;br /&gt;
#build: lib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
elf: $(TARGET).elf&lt;br /&gt;
hex: $(TARGET).hex&lt;br /&gt;
eep: $(TARGET).eep&lt;br /&gt;
lss: $(TARGET).lss&lt;br /&gt;
sym: $(TARGET).sym&lt;br /&gt;
LIBNAME=lib$(TARGET).a&lt;br /&gt;
lib: $(LIBNAME)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Eye candy.&lt;br /&gt;
# AVR Studio 3.x does not check make&#039;s exit code but relies on&lt;br /&gt;
# the following magic strings to be generated by the compile job.&lt;br /&gt;
&lt;br /&gt;
begin:&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_BEGIN)&lt;br /&gt;
&lt;br /&gt;
end:&lt;br /&gt;
	@echo $(MSG_END)&lt;br /&gt;
	@echo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Display size of file.&lt;br /&gt;
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex&lt;br /&gt;
ELFSIZE = $(SIZE) -A $(TARGET).elf&lt;br /&gt;
AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)&lt;br /&gt;
&lt;br /&gt;
sizebefore:&lt;br /&gt;
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \&lt;br /&gt;
	$(AVRMEM) 2&amp;gt;/dev/null; echo; fi&lt;br /&gt;
&lt;br /&gt;
sizeafter:&lt;br /&gt;
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \&lt;br /&gt;
	$(AVRMEM) 2&amp;gt;/dev/null; echo; fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Display compiler version information.&lt;br /&gt;
gccversion : &lt;br /&gt;
	@$(CC) --version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Program the device.  &lt;br /&gt;
program: $(TARGET).hex $(TARGET).eep&lt;br /&gt;
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)&lt;br /&gt;
	$(AVRDUDE_WRITE_EEPROM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Generate avr-gdb config/init file which does the following:&lt;br /&gt;
#     define the reset signal, load the target file, connect to target, and set &lt;br /&gt;
#     a breakpoint at main().&lt;br /&gt;
gdb-config: &lt;br /&gt;
	@$(REMOVE) $(GDBINIT_FILE)&lt;br /&gt;
	@echo define reset &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
	@echo SIGNAL SIGHUP &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
	@echo end &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
	@echo file $(TARGET).elf &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
	ifeq ($(DEBUG_BACKEND),simulavr)&lt;br /&gt;
	@echo load  &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
	endif&lt;br /&gt;
	@echo break main &amp;gt;&amp;gt; $(GDBINIT_FILE)&lt;br /&gt;
&lt;br /&gt;
debug: gdb-config $(TARGET).elf&lt;br /&gt;
	ifeq ($(DEBUG_BACKEND), avarice)&lt;br /&gt;
	@echo Starting AVaRICE - Press enter when &amp;quot;waiting to connect&amp;quot; message displays.&lt;br /&gt;
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \&lt;br /&gt;
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)&lt;br /&gt;
	@$(WINSHELL) /c pause&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \&lt;br /&gt;
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)&lt;br /&gt;
	endif&lt;br /&gt;
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.&lt;br /&gt;
	COFFCONVERT = $(OBJCOPY) --debugging&lt;br /&gt;
	COFFCONVERT += --change-section-address .data-0x800000&lt;br /&gt;
	COFFCONVERT += --change-section-address .bss-0x800000&lt;br /&gt;
	COFFCONVERT += --change-section-address .noinit-0x800000&lt;br /&gt;
	COFFCONVERT += --change-section-address .eeprom-0x810000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
coff: $(TARGET).elf&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_COFF) $(TARGET).cof&lt;br /&gt;
	$(COFFCONVERT) -O coff-avr $&amp;lt; $(TARGET).cof&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extcoff: $(TARGET).elf&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof&lt;br /&gt;
	$(COFFCONVERT) -O coff-ext-avr $&amp;lt; $(TARGET).cof&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create final output files (.hex, .eep) from ELF output file.&lt;br /&gt;
	%.hex: %.elf&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_FLASH) $@&lt;br /&gt;
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
	%.eep: %.elf&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_EEPROM) $@&lt;br /&gt;
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom=&amp;quot;alloc,load&amp;quot; \&lt;br /&gt;
--change-section-lma .eeprom=0 -O $(FORMAT) $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# Create extended listing file from ELF output file.&lt;br /&gt;
	%.lss: %.elf&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_EXTENDED_LISTING) $@&lt;br /&gt;
	$(OBJDUMP) -h -S $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
# Create a symbol table from ELF output file.&lt;br /&gt;
	%.sym: %.elf&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_SYMBOL_TABLE) $@&lt;br /&gt;
	$(NM) -n $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create library from object files.&lt;br /&gt;
	.SECONDARY : $(TARGET).a&lt;br /&gt;
	.PRECIOUS : $(OBJ)&lt;br /&gt;
	%.a: $(OBJ)&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_CREATING_LIBRARY) $@&lt;br /&gt;
	$(AR) $@ $(OBJ)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Link: create ELF output file from object files.&lt;br /&gt;
	.SECONDARY : $(TARGET).elf&lt;br /&gt;
	.PRECIOUS : $(OBJ)&lt;br /&gt;
	%.elf: $(OBJ)&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_LINKING) $@&lt;br /&gt;
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Compile: create object files from C source files.&lt;br /&gt;
	$(OBJDIR)/%.o : %.c&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_COMPILING) $&amp;lt;&lt;br /&gt;
	$(CC) -c $(ALL_CFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Compile: create object files from C++ source files.&lt;br /&gt;
	$(OBJDIR)/%.o : %.cpp&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_COMPILING_CPP) $&amp;lt;&lt;br /&gt;
	$(CC) -c $(ALL_CPPFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Compile: create assembler files from C source files.&lt;br /&gt;
	%.s : %.c&lt;br /&gt;
	$(CC) -S $(ALL_CFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Compile: create assembler files from C++ source files.&lt;br /&gt;
	%.s : %.cpp&lt;br /&gt;
	$(CC) -S $(ALL_CPPFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Assemble: create object files from assembler source files.&lt;br /&gt;
	$(OBJDIR)/%.o : %.S&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_ASSEMBLING) $&amp;lt;&lt;br /&gt;
	$(CC) -c $(ALL_ASFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create preprocessed source for use in sending a bug report.&lt;br /&gt;
	%.i : %.c&lt;br /&gt;
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Target: clean project.&lt;br /&gt;
clean: begin clean_list end&lt;br /&gt;
&lt;br /&gt;
clean_list :&lt;br /&gt;
	@echo&lt;br /&gt;
	@echo $(MSG_CLEANING)&lt;br /&gt;
	$(REMOVE) $(TARGET).hex&lt;br /&gt;
	$(REMOVE) $(TARGET).eep&lt;br /&gt;
	$(REMOVE) $(TARGET).cof&lt;br /&gt;
	$(REMOVE) $(TARGET).elf&lt;br /&gt;
	$(REMOVE) $(TARGET).map&lt;br /&gt;
	$(REMOVE) $(TARGET).sym&lt;br /&gt;
	$(REMOVE) $(TARGET).lss&lt;br /&gt;
	$(REMOVEDIR) $(OBJDIR)&lt;br /&gt;
	$(REMOVE) $(SRC:.c=.s)&lt;br /&gt;
	$(REMOVE) $(SRC:.c=.d)&lt;br /&gt;
	$(REMOVEDIR) .dep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create object files directory&lt;br /&gt;
	$(shell mkdir $(OBJDIR) 2&amp;gt;/dev/null)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Include the dependency files.&lt;br /&gt;
	-include $(shell mkdir .dep 2&amp;gt;/dev/null) $(wildcard .dep/*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Listing of phony targets.&lt;br /&gt;
.PHONY : all begin finish end sizebefore sizeafter gccversion \&lt;br /&gt;
build elf hex eep lss sym coff extcoff \&lt;br /&gt;
clean clean_list program debug gdb-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel 2 ==&lt;br /&gt;
Wenn man mehrere Projekte aus mehreren Mikroprozessoren ausprobieren will, muss man pro Projekt ein Unterverzeichnis und darin ein Makefile haben.&lt;br /&gt;
&lt;br /&gt;
Wenn wegen neuer Erkenntnisse etwas am Kompilieren geändert werden soll, dann müssen alle diese makefiles angepasst werden. Das kann umgangen werden, wenn man &amp;quot;include&amp;quot; im Makefile benutzt.&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte Beispiel geht davon aus, dass im Windows-Rechner die Quellen der Unterprogramme, Hauptprogramme und Header so geordnet sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 C:\home\cc\include          - Alle Header&lt;br /&gt;
 C:\home\cc\lq               - Alle Unterprogramme&lt;br /&gt;
 C:\home\cc\ts               - Alle Hauptprogramme fixapfel.cpp tsadc.cpp &lt;br /&gt;
 C:\home\cc\ts\avr\tsadc     - Der makefile und die astudio tsadc.apf-Datei &lt;br /&gt;
                               und die pnproj-Datei&lt;br /&gt;
 C:\home\cc\ts\avr\fixapfel  - Der makefile und die astudio fixapfel.apf-Datei&lt;br /&gt;
 C:\home\cc\avrinc           - Da habe ich eine Kopie der Header von WinAVR&lt;br /&gt;
 c:\home\cc\avrbat           - makedefs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die beiden Dateien benutze ich sowohl beim Kompilieren mit Windows und WinAVR als auch beim Kompilieren mit Linux. Dann muss ich nur die jeweils andere Zeile &amp;quot;HOME=&amp;quot; auskommentieren.&lt;br /&gt;
&lt;br /&gt;
=== Die Datei C:\home\cc\ts\avr\tsadc\makefile ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
PRG            = tsadc&lt;br /&gt;
&lt;br /&gt;
# all objects required to link this project&lt;br /&gt;
OBJ			= $(PRG).o adc.o asctohw.o asctouc.o getticks.o inhex16.o \&lt;br /&gt;
	inline.o inuint8.o mul_uw_uw.o mul_sw_sw.o othex1.o othex2.o \&lt;br /&gt;
	othex4.o otint16.o otnl.o otputs.o otuint16.o otuint32.o otuint8.o \&lt;br /&gt;
	tsdaytim.o tshar.o tsser.o&lt;br /&gt;
&lt;br /&gt;
NPRGPATH	=	3&lt;br /&gt;
&lt;br /&gt;
include ../../../avrbat/makedefs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Die Datei C:\home\cc\avrbat\makedefs ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# Select here which processor&lt;br /&gt;
&lt;br /&gt;
#MCU     = atmega8535&lt;br /&gt;
#F_CPU   = 16000000L&lt;br /&gt;
#BAUD    = 9600L&lt;br /&gt;
&lt;br /&gt;
MCU     = atmega32&lt;br /&gt;
F_CPU	  = 1008136L	&lt;br /&gt;
BAUD    = 4800L &lt;br /&gt;
&lt;br /&gt;
# When using WINAVR&lt;br /&gt;
HOME=C:&lt;br /&gt;
&lt;br /&gt;
# when using Linux&lt;br /&gt;
# HOME=/home/hjh&lt;br /&gt;
&lt;br /&gt;
# Always in $(HOME)/home/cc/include are my headers&lt;br /&gt;
# Always in $(HOME)/home/cc/avrinc  are the avr-gcc headers&lt;br /&gt;
# Always in $(HOME)/home/cc/lq are my sources (.cpp and .s)&lt;br /&gt;
&lt;br /&gt;
# Because I copied the headers from C:\winavr here, I use this path&lt;br /&gt;
# Then I do not need to adapt this part of the make file if I compile with Linux&lt;br /&gt;
# instead with Windows WinAVR&lt;br /&gt;
HJH_IDIR = -I $(HOME)/home/cc/include -I $(HOME)/home/cc/avrinc&lt;br /&gt;
&lt;br /&gt;
# predefinitons:&lt;br /&gt;
# NPRGPATH : the amount of timesharing parallel functions, including &lt;br /&gt;
#            the main loop in main()&lt;br /&gt;
# F_CPU    : The CPU frequency, may be long or float. The compiler converts &lt;br /&gt;
#            it to the used type&lt;br /&gt;
# BAUD     : The baud rate, used in tsser.cpp&lt;br /&gt;
DEFS           = -DNPRGPATH=$(NPRGPATH) -DF_CPU=$(F_CPU) -DBAUD=$(BAUD)&lt;br /&gt;
&lt;br /&gt;
CC             = avr-gcc&lt;br /&gt;
&lt;br /&gt;
ASFLAGS 	= -g -mmcu=$(MCU) $(DEFS)&lt;br /&gt;
CFLAGS	= -g -mmcu=$(MCU) -Wall -Os -DAVR $(DEFS)&lt;br /&gt;
LDFLAGS	= -g -mmcu=$(MCU) -Wall -Wl,-Map,$(PRG).map -L $(HOME)home/cc/lq/avr/$(MCU) -l c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
all: $(PRG).elf lst text&lt;br /&gt;
	echo  Makefile of $(PRG) all done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$(PRG).elf: $(OBJ)&lt;br /&gt;
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak &lt;br /&gt;
	rm -rf *.lst *.map *.tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lst:  $(PRG).lst&lt;br /&gt;
&lt;br /&gt;
%.lst: %.elf&lt;br /&gt;
	avr-objdump -h -S $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
# Rules for building the .text rom images&lt;br /&gt;
&lt;br /&gt;
text: hex&lt;br /&gt;
&lt;br /&gt;
hex:  $(PRG).hex&lt;br /&gt;
&lt;br /&gt;
%.hex: %.elf&lt;br /&gt;
	avr-objcopy -j .text -j .data -O ihex $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
# Compile the main program&lt;br /&gt;
$(PRG).o : ../../$(PRG).cpp&lt;br /&gt;
	@echo compiling special input=$&amp;lt; output=$@&lt;br /&gt;
	$(CC) -S -c $(HJH_IDIR) $(CFLAGS) $&amp;lt; -o $@.tmp&lt;br /&gt;
	$(CC) -c $(HJH_IDIR) $(CFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
# Warning for Windows Users:&lt;br /&gt;
# For the %s, %S and %.cpp to work, all files in the ../../../lq directory &lt;br /&gt;
# must have lower case file names (use total commander to do this)&lt;br /&gt;
#&lt;br /&gt;
# Compile one of the programs of the library&lt;br /&gt;
%.o : ../../../lq/%.s&lt;br /&gt;
	@echo compiling special input=$&amp;lt; output=$@&lt;br /&gt;
	$(CC) -c $(HJH_IDIR) $(ASFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.o : ../../../lq/%.S&lt;br /&gt;
	@echo compiling special input=$&amp;lt; output=$@&lt;br /&gt;
	$(CC) -c $(HJH_IDIR) $(ASFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
%.o : ../../../lq/%.cpp&lt;br /&gt;
	@echo compiling special input=$&amp;lt; output=$@&lt;br /&gt;
	$(CC) -c $(HJH_IDIR) $(CFLAGS) $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
http://www.gnu.org/software/make/ - Die GNU-Make Homepage&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Baudratenquarz&amp;diff=27360</id>
		<title>Baudratenquarz</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Baudratenquarz&amp;diff=27360"/>
		<updated>2008-04-11T14:12:16Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baudratenquarze&#039;&#039;&#039; sind handelsübliche Quarze aus deren Frequenz sich durch ganzzahlige Teilung die Baudrate einer seriellen Schnittstelle ergibt. Wenn sich die Baudrate nicht durch ganzzahlige Teilung aus der Quarzfrequenz ableiten läßt ergibt sich ein Fehler, der zu Fehlabtastungen des seriellen Signals führt. Bei der Verwendung von Baudratenquarzen wird dieser Fehler nur durch die Toleranz des Quarzes bestimmt (+/-100ppm = +/-0,01% !).&lt;br /&gt;
&lt;br /&gt;
=== Wofür steht der Begriff &amp;quot;baud&amp;quot; ? ===&lt;br /&gt;
Die Einheit Baud wurde nach dem Franzosen Baudot benannt und wird mit bd abgekürzt.&lt;br /&gt;
&lt;br /&gt;
=== Was versteht man unter der Baudrate ? ===&lt;br /&gt;
Unter Baudrate versteht man die Schrittfrequenz eines Datensignals. &lt;br /&gt;
Unter einem Schritt versteht man in der Datenübertragung das kürzeste Datensignal. Dieses Datensignal enthält mindestens ein Bit. Je nach Modulationsverfahren können aber auch wesentlich mehr Bits in einem Schritt übertragen werden.&lt;br /&gt;
&lt;br /&gt;
=== Was hat es mit der &amp;quot;Abtastung&amp;quot; auf sich ? ===&lt;br /&gt;
Bei der asynchronen Übertragung ist der Zeichenbeginn für den Empänger nicht vorhersehbar. Mit dem &amp;quot;Startbit&amp;quot; wird das Zeichen begonnen. Nach dem Startbit weiß der Empfänger, dass er eine halbe Bitlänge später das erste Datenbit abtasten kann. Eine weitere Bitlänge später das zweite Bit u.s.w..&lt;br /&gt;
&lt;br /&gt;
Wenn nun die Abtastung schneller oder langsamer als die Datenübertragung stattfindet, weil der Abtasttakt mit zu grossem Fehler erzeugt wird, dann verschieben sich die Daten gegenüber dem Abtastsignal um einen geringen Zeitbetrag. Um das Datensignal möglichst fehlerfrei immer in der Bitmitte abtasten zu können, benötigt man deshalb einen stabilen und genauen Abtasttakt, der idealerweise von einem Baudratenquarz abgeleitet wird. Wenn die Frequenz um einige % daneben liegt wird die Verschiebung zwischen Datensignal und Abtastung nach wenigen Bits so gross, dass die Abtastung zu einem falschen Zeitpunkt stattfindet und ein Übertragungsfehler entsteht. Eine Beispielrechnung wurde vom Hersteller [http://www.maxim-ic.com MAXIM] schon einmal sehr ausführlich in einer [http://pdfserv.maxim-ic.com/en/an/AN2141.pdf Application Note (englisch)] durchgeführt. Als theoretische Obergrenze sind 3% Frequenzversatz zwischen Sender und Empfänger möglich. Praktisch sollte man diese Grenze jedoch nicht ausreizen und sich auf Fehler kleiner gleich 1% beschränken, um die Übertragungssicherheit und Fehlertoleranz zu erhöhen.&lt;br /&gt;
&lt;br /&gt;
Zu dem vorstehend beschriebenen Abtasteffekt kommen noch die Fehler aus der Signalverzerrung auf dem Übertragungsweg. Die Verzerrung ist von der Leitungslänge und dem Übertragungsmedium abhängig. Eine präzise Abtastung des Signals im Empfänger ermöglicht einen höheren &amp;quot;Verzerrungsspielraum&amp;quot; auf dem Übertragungsweg. Deshalb ist es immer angeraten die Abtastfrequenz mit einem Baudratenquarz zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Berechnung von Baudratenquarzen ==&lt;br /&gt;
&lt;br /&gt;
Da die integrierten UART-Bausteine das serielle Signal oftmals mit der acht- oder 16-fachen Frequenz abtasten, muß nach Teilung der Quarzfrequenz ein Takt entstehen, dessen Frequenz das acht- bzw. 16-fache der gewünschten Baudrate beträgt.&lt;br /&gt;
&lt;br /&gt;
== Mathematische Betrachtung ==&lt;br /&gt;
Vor über 50 Jahren hat man mechanische Fernschreibsysteme mit 50 bd, 75 bd und 100 bd benutzt. Die ersten Akustikkoppler wurden dann mit 300 bd betrieben. Man erkennt leicht, dass alle diese Werte ganzzahlige Vielfache von 25 sind.&lt;br /&gt;
&lt;br /&gt;
Die niedrigste &amp;quot;übliche&amp;quot; Baudrate liegt bei 300 bd. Durch Primfaktorzerlegung ergibt sich: &lt;br /&gt;
* 300 = 5 * 5 * 3 * 2 * 2.&lt;br /&gt;
&lt;br /&gt;
Die Zahl 16 hat als Zweierpotenz die Primfaktoren&lt;br /&gt;
&lt;br /&gt;
* 16 = 2 * 2 * 2 * 2 = 2^4&lt;br /&gt;
&lt;br /&gt;
Alle Baudratenquarze müssen deshalb mindestens diese Primfaktoren enthalten.&lt;br /&gt;
&lt;br /&gt;
Höhere Datenraten, wie z.B. 9600 bd liegen oftmals um einen aus einigen Zweierpotenzen bestehenden Faktor darüber.&lt;br /&gt;
* 9600 = 5 * 5 * 3 * 2 * 2 * 2 * 2 * 2 * 2 * 2 oder kurz 5^2 * 3^1 * 2^7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Quarz mit der Frequenz 77,5 kHz ist nicht als Baudratenquarz brauchbar.&lt;br /&gt;
Die Primfaktorzerlegung ergibt: &lt;br /&gt;
* 77500 = 2 * 2 * 5 * 5 * 5 * 5 * 31 &lt;br /&gt;
&lt;br /&gt;
Es fehlt der Primfaktor 3. Deshalb ist die Baudrate von 300 bd nicht durch Teilung zu Erreichen. Das bedeutet wiederum, dass auch Vielfache wie z. B. 1200 baud, 9600 baud etc. nicht ohne Fehler erzeugt werden können.&lt;br /&gt;
Der Primfaktor 31 zeigt, dass eine ganzzahlige Teilung nicht ohne weiteres möglich ist. Wenn die Sendefrequenz des Senders DCF 77 mit einem 1 MHz Oszillator synchronisiert werden soll, geht das nur mit aufwendigen Auslaßteilern.&lt;br /&gt;
&lt;br /&gt;
== Beispiele für Baudratenfrequenzen ==&lt;br /&gt;
&lt;br /&gt;
* 1,8432 MHz (das ist die klassische Frequenz des PC-Baudratengenerators)&lt;br /&gt;
* 3,6864 MHz&lt;br /&gt;
* 4,9152 MHz&lt;br /&gt;
* 6,1440 MHz&lt;br /&gt;
* 7,3728 MHz&lt;br /&gt;
* 9,8304 MHz&lt;br /&gt;
* 11,0592 MHz&lt;br /&gt;
* 12,2880 MHz&lt;br /&gt;
* 14,7456 MHz&lt;br /&gt;
* 18,4320 MHz&lt;br /&gt;
* 19,6608 MHz&lt;br /&gt;
* 22,1184 MHz&lt;br /&gt;
&lt;br /&gt;
Viele Frequenzen sind Vielfache zueinander. Die Basisfrequenz 1,8432 MHz ist so z.B. auch als 2-fache, 3-fache, 4-fache, 5- und 6-fache Frequenz üblich.&lt;br /&gt;
Hier einige solcher &amp;quot;Familien&amp;quot;&lt;br /&gt;
*1.) 1,8432 MHz; 3,6864 MHz; 7,3728 MHz; 11,0592 MHz; 14,7456 MHz; 18,432 MHz; 22,1184 MHz&lt;br /&gt;
*2.) 2,4567 MHz; 4,9152 MHz; 9,8304 MHz; 14,7456 MHz; 19,6608 MHz&lt;br /&gt;
*3.) 6,144 MHz; 12,288 MHz; 18,432 MHz&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Brownout&amp;diff=27359</id>
		<title>Brownout</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Brownout&amp;diff=27359"/>
		<updated>2008-04-11T14:03:08Z</updated>

		<summary type="html">&lt;p&gt;84.156.75.65: kat.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Anlehnung an Blackout (= Stromausfall) ist ein Brownout eine zu geringe Spannung.&lt;br /&gt;
&lt;br /&gt;
Jeder [[Mikrocontroller]] hat einen angegebenen Versorgungsspannungsbereich, z.B. 4,5 - 5,5V. Unterschreitet man diesen, dann hört er aber nicht einfach auf zu funktionieren, sondern nach und nach fallen einzelne Komponenten aus oder werden unzuverlässig. Die CPU &amp;quot;spielt verrückt&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die üblichen Ursachen für einen Brownout sind leer werdende Batterien und der normale Ausschaltvorgang, wenn in der Stromversorgung ein größerer Kondensator ist (was bei Netzteilen normalerweise der Fall ist). Anders ausgedrückt: Ein Brownout ist kein exotischer Sonderfall, sondern man muss immer mit ihm rechnen.&lt;br /&gt;
&lt;br /&gt;
Ob man etwas gegen einen Brownout tun muss, hängt von der Anwendung ab. Zeigt ein elektronisches Thermometer beim Ausschalten noch kurz wirre Zeichen an, dann ist das ziemlich egal; macht eine elektronische Steuerung aber dabei z.B. ein Ventil auf, dann könnte das unangenehme bis fatale Folgen haben.&lt;br /&gt;
&lt;br /&gt;
Zur Lösung des Problems kann man über eine externe Schaltung am Prozessor das Reset-Signal aktivieren (solange läuft der Prozessor nämlich nicht). Dafür gibts auch fertige ICs, sogenannte Reset-Controller.&lt;br /&gt;
&lt;br /&gt;
Immer wieder gerne genommene &#039;&#039;&#039;Reset-Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* TL7705 ([http://www.ti.com Ti])&lt;br /&gt;
* MCP100 ([http://www.microchip.com Microchip])&lt;br /&gt;
* MAX809 im sehr kleinen SC70 oder SOT23 Gehäuse zu haben ([http://www.maxim-ic.com Maxim])&lt;br /&gt;
* MAX6864 mit [[Watchdog]]&lt;br /&gt;
&lt;br /&gt;
Neuere [[Mikrocontroller]] haben oft auch schon eine Brownout-Detection eingebaut, man muss sie dann nur noch aktivieren. Bedenken sollte man dabei, dass so eine Schaltung zusätzlich Strom benötigt. Bei den AVR-Prozessoren sind das 10-30 µA, was bei langlaufenden Batteriegeräten nicht mehr zu vernachlässigen ist (ca. 300 mAh pro Jahr).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;/div&gt;</summary>
		<author><name>84.156.75.65</name></author>
	</entry>
</feed>