<?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=R2d2</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=R2d2"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/R2d2"/>
	<updated>2026-04-10T07:48:56Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sparmatic_Heizungsthermostate&amp;diff=100151</id>
		<title>Sparmatic Heizungsthermostate</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sparmatic_Heizungsthermostate&amp;diff=100151"/>
		<updated>2019-01-06T01:09:22Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* travelrec */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel sammelt Informationen zu den elektronischen Heizkörperthermostaten der Reihe &amp;quot;Sparmatic&amp;quot; (≙ &amp;quot;Thermy&amp;quot;).&lt;br /&gt;
Eine Übersicht über verschiedene Modelle enthält der Artikel [[Heizungsthermostat]].&lt;br /&gt;
&lt;br /&gt;
Hersteller: [http://www.eurotronic.org/ Eurotronic]&lt;br /&gt;
&lt;br /&gt;
== Forenthreads ==&lt;br /&gt;
Die in diesem Artikel gesammelten Informationen stammen aus folgenden Threads:&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/topic/86596 (12/2007, &amp;quot;elektronische Heizungsregelung mit Thermotronic&amp;quot;)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/153235 (10/2009, &amp;quot;Preisgünstiger Heizungsregler bei Praktiker&amp;quot;)&lt;br /&gt;
* http://www.mikrocontroller.net/topic/160462 (12/2009, &amp;quot;Alternative Firmware für Sparmatic Zero Heizungsthermostat&amp;quot;) &lt;br /&gt;
* http://www.mikrocontroller.net/topic/237375 (11/2011, &amp;quot;Entwicklungen und Forschung um den Sparmatic Comet / Zero v2 Heizungsthermostat&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen und Preis==&lt;br /&gt;
* Baumarkt&lt;br /&gt;
* Pollin&lt;br /&gt;
* Aldi (&amp;quot;Thermy&amp;quot;) - ca. €15&lt;br /&gt;
* zeitweise auch in Lebensmittel-Ketten, wie Lidl, NP...&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* Controller: [http://www.atmel.com/Images/doc8018.pdf ATmega169(P)V], 16kBytes Flash, 1kByte SRAM, 512Byte EEPROM&lt;br /&gt;
* Display: LCD mit 4x 14-Segmentanzeige, Bargraph und Symbolen&lt;br /&gt;
* Uhrenquarz 32768Hz&lt;br /&gt;
* Tasten und/oder Drehgeber&lt;br /&gt;
* Motor und Getriebe zum Stellen des Heizkörperventils&lt;br /&gt;
* Impulsgeber im / am Getriebe und Messung der Stromaufnahme des Motors&lt;br /&gt;
* Temperatursensor NTC 100k @25°C&lt;br /&gt;
* Comet: Pads für LEDs und Vorwiderstände zur LCD-Hintergrundbeleuchtung&lt;br /&gt;
&lt;br /&gt;
== Modelle ==&lt;br /&gt;
Den Sparmatic gibt es in verschiedenen Ausführungen.&lt;br /&gt;
[http://www.eurotronic.org/produkte.html Herstellerseite mit Produktfotos]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Eurotronic Sparmatic Varianten&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!| &amp;lt;!-- --&amp;gt;&lt;br /&gt;
!| Basic (ehem. Thermotronic), Thermy (v1)&lt;br /&gt;
!| Premium (ehem. Thermotronic) &lt;br /&gt;
!| Zero 2010 (v1)&lt;br /&gt;
!| Zero 2011 (v2) &lt;br /&gt;
!| Thermy V1.5? &lt;br /&gt;
!| Thermy V2&lt;br /&gt;
!| THERMy (V3)&lt;br /&gt;
!| Rotheigner (hornbach,identisch mit V3)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Foto &lt;br /&gt;
| [[Bild:Basic_demontiert.jpg|200px]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|  &lt;br /&gt;
| [[Bild:thermy2.jpg|100px]]&lt;br /&gt;
| [[Bild:thermy1.jpg|140px]]&lt;br /&gt;
| [[Bild:thermyV3.jpg|100px]]&lt;br /&gt;
| [[Bild:Rotheigner_orginal.jpg|100px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Jahr&lt;br /&gt;
| 2007?&lt;br /&gt;
|&lt;br /&gt;
| 2009?&lt;br /&gt;
| 2009?&lt;br /&gt;
| 2009? &lt;br /&gt;
| 2011&lt;br /&gt;
| 2012?&lt;br /&gt;
| 2015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Produktseite&lt;br /&gt;
| [http://www.eurotronic.org/produkte/sparmatic-basic.html ext. link]&lt;br /&gt;
| []&lt;br /&gt;
| [http://www.eurotronic.org/produkte/sparmatic-zero-2010.html ext. link]&lt;br /&gt;
| []&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [http://www.thermy.de/ Thermy, ext. link]&lt;br /&gt;
| [http://www.eurotronic.org/produkte/sparmatic-zero-2010.html ext. link]&lt;br /&gt;
| [https://www.hornbach.de/shop/elektrisches-Heizkoerperthermostat-Rotheigner-Calor/5645331/artikel.html ext. link]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Vertrieb&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Aldi&lt;br /&gt;
|hornbach.de  von Rotheigner vertrieb, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Display &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | V1 http://www.mikrocontroller.net/attachment/105702/rFt8.jpg [[Bild:Sparmatic_Zero_Elements_nubered.png|300px]]([http://www.mikrocontroller.net/topic/153235#1457548 Quelle])&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | V2 [[Bild:SparmaticComet_LCD_Segment_Belegung.jpg|300px]]&lt;br /&gt;
|-&lt;br /&gt;
| Anschlüsse &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | keine&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Mini-USB Buchse zur Programmierung per PC mit PROGmatic-USB-Stick (AVR ISP, aber ohne Reset)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Bedienung &lt;br /&gt;
| 3 Tasten + Drehgeber&lt;br /&gt;
| 3 Tasten + Drehgeber, Funk&lt;br /&gt;
| 5 Tasten vorn  &lt;br /&gt;
| 5 Tasten oben &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |3 Tasten + Drehgeber&lt;br /&gt;
|3 Tasten + Drehgeber&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Gehäuse &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Stifte verschw.&lt;br /&gt;
| Rastnasen &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Stifte verschw.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Controller &lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ATmega169PA&lt;br /&gt;
| ATmega169PV &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | ATmega169PA&lt;br /&gt;
| ATmega169PA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Schaltplan&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Threads&lt;br /&gt;
| [http://www.mikrocontroller.net/topic/160462#1576841 Fotos], [http://www.mikrocontroller.net/topic/160462#1888861 Fotos]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Firmware &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für Informationen in diesem Thread kann man die genannten Thermostate anhand der Beschaltung des Controllers in zwei Kategorien einteilen:&lt;br /&gt;
# Sparmatic Zero alt&lt;br /&gt;
# Sparmatic Zero neu, Comet, Thermy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zero ===&lt;br /&gt;
Der Sparmatic Zero hat gleich zwei Versionen:&lt;br /&gt;
&lt;br /&gt;
==== Alt ====&lt;br /&gt;
Die alte Version ist mit Schrauben zu öffnen und hat hinter der Batterie einen Pin-Header für den JTAG des Controllers.&lt;br /&gt;
&lt;br /&gt;
==== Neu ====&lt;br /&gt;
Die neue Version hingegen ist mit Plastiknasen so verschlossen, dass er nach dem Öffnen nur mit Hilfsmitteln wieder fest verschließbar ist. Unter den Batterien sieht man jeweils hinter den Batteriekontakten 6 Testpads (2x3 Anordnung).&lt;br /&gt;
Die Pads auf der Seite des &amp;quot;+&amp;quot; Batteriekontaktes enthalten dabei den JTAG des Controllers, die andere Seite unter anderem den ISP.&lt;br /&gt;
&lt;br /&gt;
* Thread: http://www.mikrocontroller.net/topic/160462&lt;br /&gt;
* Alternative Firmware: v0.14 http://www.mikrocontroller.net/topic/160462#1845096 (kein Source)&lt;br /&gt;
&lt;br /&gt;
=== Comet / Thermy ===&lt;br /&gt;
Der Sparmatic Comet hat nur drei Tasten, dafür einen zusätzlichen Drehimpulsgeber.&lt;br /&gt;
Hiervon existieren baugleiche(?) Modelle, z.B. der bei Aldi verkaufte &amp;quot;Thermy&amp;quot; auch unter dem Name &amp;quot;EasyHome&amp;quot; (Platine Coment 01-05).&lt;br /&gt;
&lt;br /&gt;
* Fotos: http://www.mikrocontroller.net/topic/160462#1918959&lt;br /&gt;
* Fotos vom Thermy: http://www.mikrocontroller.net/topic/237375#2408668, http://www.mikrocontroller.net/topic/237375#2409754, &lt;br /&gt;
* Schaltplan: http://www.mikrocontroller.net/topic/160462#1935344&lt;br /&gt;
&lt;br /&gt;
== Sparmatic Zero v1 ==&lt;br /&gt;
&lt;br /&gt;
Dieser wurde bereits ausführlich im Forum diskutiert.&lt;br /&gt;
Im folgenden Thread wurde eine alternative Firmware entwickelt:&lt;br /&gt;
http://www.mikrocontroller.net/topic/160462 (&amp;quot;Alternative Firmware für Sparmatic Zero Heizungsthermostat&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Siehe auch http://www.mikrocontroller.net/topic/153235 (&amp;quot;Preisgünstiger Heizungsregler bei Praktiker&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
* http://www.mikrocontroller.net/topic/153235#1442121&lt;br /&gt;
** [[Bild:sparmatic_zero.png|300px]]&lt;br /&gt;
&lt;br /&gt;
== Sparmatic Zero v2 / Comet / Thermy ==&lt;br /&gt;
&lt;br /&gt;
Die Entwicklung läuft noch. Aktuelle Informationen finden sich im Forum:&lt;br /&gt;
http://www.mikrocontroller.net/topic/237375 (&amp;quot;Entwicklungen und Forschung um den Sparmatic Comet / Zero v2 Heizungsthermostat&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Schaltpläne und Platinenaufnahmen === &lt;br /&gt;
&lt;br /&gt;
==== Comet / Thermy ==== &lt;br /&gt;
(Leopold B.):&lt;br /&gt;
REV.0.1 COMET&lt;br /&gt;
[[Bild:SparmaticComet_Schaltplan.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Comet ThermyV1.5&lt;br /&gt;
[[Bild:SparmaticComet_Platine_TOP.jpg|300px]]&lt;br /&gt;
[[Bild:SparmaticComet_Platine_BOT.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
ThermyV2? (11/2011):&lt;br /&gt;
REV.0.0 REG&lt;br /&gt;
&lt;br /&gt;
[[Bild:TOP.jpg|300px]]&lt;br /&gt;
[[Bild:BOT.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/237375#2535478 Quelle]&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/125429/thermy5.jpg Weiteres Bild]&lt;br /&gt;
&lt;br /&gt;
==== Zero v2 / Thermy V1.5 ==== &lt;br /&gt;
(vorläufig)&lt;br /&gt;
REV.0.0 REGZ&lt;br /&gt;
&lt;br /&gt;
[[Bild:SparmaticZerov2_Schaltplan.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:SparmaticZerov2_Platine_TOP.jpg|300px]]&lt;br /&gt;
[[Bild:SparmaticZerov2_Platine_BOT.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
==== THERMy V3 ==== &lt;br /&gt;
Der Schaltplan entspricht fast der Zero V2 mit einigen Abweichungen in Port E und F&lt;br /&gt;
&lt;br /&gt;
[[Bild:THERMYV3-sch.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:THERMYV3-top.jpg|300px]]&lt;br /&gt;
[[Bild:THERMYV3-bot.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rotheigner baugleich mit (THERMy V3) ==== &lt;br /&gt;
[[Bild:Platine bottom Rotheigner.jpg|300px]]&lt;br /&gt;
[[Bild:Platine top Rotheingner.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Verpackung_front_Rotheigner.jpg|300px]] &lt;br /&gt;
[[Bild:Platine_top_Gehaeuse.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Honbach Art-Nr. 700 100 410&lt;br /&gt;
&lt;br /&gt;
=== Display ===&lt;br /&gt;
&lt;br /&gt;
Neueres Display ab Zero/Comet 2010 (v2, offenbar schon 2009 im Handel)&lt;br /&gt;
&lt;br /&gt;
[[Bild:SparmaticComet_LCD_Segment_Belegung.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
tabellarische Darstellung der einzelnen 14-Segment-Module:&lt;br /&gt;
&lt;br /&gt;
[[Bild:SparmaticComet_SegmentMapping.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Initialisierung des LCD Controllers wie in der Originalfirmware (Leopold B.):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
LCDCRB = (1&amp;lt;&amp;lt;LCDCS) | (0&amp;lt;&amp;lt;LCD2B)&lt;br /&gt;
         | (1&amp;lt;&amp;lt;LCDMUX1) | (1&amp;lt;&amp;lt;LCDMUX0)&lt;br /&gt;
         | (1&amp;lt;&amp;lt;LCDPM2) | (1&amp;lt;&amp;lt;LCDPM1) | (1&amp;lt;&amp;lt;LCDPM0);&lt;br /&gt;
/*&lt;br /&gt;
      // Das LCD wird im asynchronen mit der Frequenz&lt;br /&gt;
      // des Quarzes TOSC1 = 32.768Hz als LCD Clock betrieben.&lt;br /&gt;
      (1&amp;lt;&amp;lt;LCDCS)Modus (LCDCS-Bit=1)&lt;br /&gt;
      // 1/3 bias is used                                               &lt;br /&gt;
      |(0&amp;lt;&amp;lt;LCD2B)&lt;br /&gt;
      // 1/4 Duty; COM0:3;&lt;br /&gt;
      |(1&amp;lt;&amp;lt;LCDMUX1) | (1&amp;lt;&amp;lt;LCDMUX0)&lt;br /&gt;
      // SEG0:24&lt;br /&gt;
      |(1&amp;lt;&amp;lt;LCDPM2) | (1&amp;lt;&amp;lt;LCDPM1) | (1&amp;lt;&amp;lt;LCDPM0);&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
LCDFRR = (0&amp;lt;&amp;lt;LCDPS2)|(0&amp;lt;&amp;lt;LCDPS1)|(0&amp;lt;&amp;lt;LCDPS0)&lt;br /&gt;
         |(0&amp;lt;&amp;lt;LCDCD2)|(0&amp;lt;&amp;lt;LCDCD1)|(1&amp;lt;&amp;lt;LCDCD0);&lt;br /&gt;
/*&lt;br /&gt;
      (0&amp;lt;&amp;lt;LCDPS2)|(0&amp;lt;&amp;lt;LCDPS1)|(0&amp;lt;&amp;lt;LCDPS0)    // N = 16&lt;br /&gt;
      |(0&amp;lt;&amp;lt;LCDCD2)|(0&amp;lt;&amp;lt;LCDCD1)|(1&amp;lt;&amp;lt;LCDCD0);  // D = 2&lt;br /&gt;
      // ergo f(frame) = 128Hz&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
LCDCCR = (1&amp;lt;&amp;lt;LCDDC2)|(0&amp;lt;&amp;lt;LCDDC1)|(0&amp;lt;&amp;lt;LCDDC0)&lt;br /&gt;
         |(/*config.lcd_contrast*/ 10 &amp;lt;&amp;lt; LCDCC0);&lt;br /&gt;
/*&lt;br /&gt;
      // 575 µs&lt;br /&gt;
      (1&amp;lt;&amp;lt;LCDDC2)|(0&amp;lt;&amp;lt;LCDDC1)|(0&amp;lt;&amp;lt;LCDDC0)&lt;br /&gt;
      // Set the initial LCD contrast level&lt;br /&gt;
      |(config.lcd_contrast &amp;lt;&amp;lt; LCDCC0);&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
LCDCRA = (1&amp;lt;&amp;lt;LCDEN)|(1&amp;lt;&amp;lt;LCDAB)|(0&amp;lt;&amp;lt;LCDIE)|(0&amp;lt;&amp;lt;LCDBL);&lt;br /&gt;
/*&lt;br /&gt;
      (1&amp;lt;&amp;lt;LCDEN)    // Enable LCD&lt;br /&gt;
      |(1&amp;lt;&amp;lt;LCDAB)   // Low Power Waveform&lt;br /&gt;
      |(0&amp;lt;&amp;lt;LCDIE)   // disable Interrupt&lt;br /&gt;
      |(0&amp;lt;&amp;lt;LCDBL);  // No Blanking&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C-Routinen zur Ansteuerung der Segmente: http://www.mikrocontroller.net/topic/160462#1946692&lt;br /&gt;
&lt;br /&gt;
=== Tasten und Encoder ===&lt;br /&gt;
* 3 Tasten (Menu / OK / Zeit)&lt;br /&gt;
* 1 Encoder zum Einstellen der Temperatur/Werte (+/-)&lt;br /&gt;
&lt;br /&gt;
=== Versorgungsspannung ===&lt;br /&gt;
* zwei Alkalibatterien (1,5 V) AA / Mignon / LR6&lt;br /&gt;
* Erkennung des Ausfalls der Versorgung (siehe http://www.mikrocontroller.net/articles/Sparmatic_Heizungsthermostate#Batterieerkennung)&lt;br /&gt;
&lt;br /&gt;
=== Stellmotor ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:thermy3.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
==== Motor und Getriebe ====&lt;br /&gt;
Gleichstrommotor mit etwa 1V Anlaufspannung. Leerlauf-Stromaufnahme: 20mA bei 3.2V, maximale Stromaufnahme: 120mA bei 3.2V und Stillstand.&lt;br /&gt;
&lt;br /&gt;
Das Getriebe besteht aus 6 Stirnrädern und einer Trapezgewindestellschraube, die den Stössel des Heizkörperventils betätigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:thermy4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
==== Positionserkennung ====&lt;br /&gt;
Reflex-Lichtschranke, die auf das erste Getriebe-Stirnrad ausgerichtet ist. Dieses Stirnrad ist mit Reflektionsmarken oder Reflektionszapfen und Lücken ausgestattet. Durch Ausbleiben der Impulse bei Fahren an einen mechanischen Anschlag wird die innere Endposition festgestellt (Ventil voll geöffnet). Die äußere Endposition (Ventil voll geschlossen) wird durch den Ventilkopf bestimmt und liegt maximal etwa 380 &amp;quot;0/1&amp;quot;-Flanken von der inneren Endposition entfernt. Sie wird nicht durch einen mechanischen Anschlag begrenzt. Beim Fahren über die äußere Endposition (wenn der Thermostat nicht auf dem Ventilkopf sitzt) besteht die Gefahr, dass die Stellschraube aus dem Getriebe herausfällt.&lt;br /&gt;
&lt;br /&gt;
==== Stromaufnahme ====&lt;br /&gt;
An ADC2 (PF2) kann die Stromaufnahme des Motors gemessen werden. Der Shunt besitzt 2,2Ω, der maximale Spannungsabfall ist durch eine parallele Diode begrenzt.&lt;br /&gt;
Leopold B. hat mal eine Stellfahrt oszillographiert:&lt;br /&gt;
&lt;br /&gt;
[[Bild:SparmaticComet_Spannung_an_PF2_beim_Schliessen.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Programmieradapter ==&lt;br /&gt;
Eine Mini-B USB Buchse führt einige ISP Signale. Es ist keine USB-Schnittstelle; sie ist mit einem speziellen Adapter (und der original Firmware und PC-Software) zur Parametrierung vorgesehen.&lt;br /&gt;
Die Standardbelegung der USB-Steckverbindung (http://de.wikipedia.org/wiki/USB#Farbkodierung_und_Pinouts, http://pinouts.ru/Slots/USB_pinout.shtml) ist jedoch nicht vollständig, so dass fertige USB-Kabel nicht ohne zusätzliche Arbeit zur Verbindung geeignet sind. Siehe Beiträge: &lt;br /&gt;
* http://www.mikrocontroller.net/topic/153235#1445503&lt;br /&gt;
* http://www.mikrocontroller.net/topic/153235#1448510&lt;br /&gt;
* http://www.mikrocontroller.net/topic/160462#1591287&lt;br /&gt;
* http://www.mikrocontroller.net/topic/237375#2410189&lt;br /&gt;
&lt;br /&gt;
Auch bei Steckern als Einzelteil ist ein benötigter Kontakt nicht herausgeführt, so dass der Stecker auf jeden Fall bearbeitet werden muss.&lt;br /&gt;
&lt;br /&gt;
* Fotos vom schrittweisen modifizieren: http://www.mikrocontroller.net/topic/153235#1626448&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung ===&lt;br /&gt;
Nummerierung des Steckers, die Buchsen in den Schaltplänen oben sind ggf. andersherum beziffert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 VCC red   VCC&lt;br /&gt;
2 D-  white SCK   ?? stimmt das ??&lt;br /&gt;
3 D+  green MOSI&lt;br /&gt;
4 ID  NC    MISO  ?? stimmt das ??&lt;br /&gt;
5 GND black GND&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung!! im Schaltplan des Comet ist die Nummerierung umgekehrt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beim Aldi thermy ist die Belegung wie folgt: (MISO und SCK vertauscht)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
5 VCC red   VCC&lt;br /&gt;
4 D-  white MISO&lt;br /&gt;
3 D+  green MOSI&lt;br /&gt;
2 ID  NC    SCK&lt;br /&gt;
1 GND black GND&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe auch http://www.mikrocontroller.net/topic/153235#2167058.&lt;br /&gt;
&lt;br /&gt;
=== ISP ===&lt;br /&gt;
Der AVR ISP ist wie folgt belegt (Anschluss auf der Platine, Ansicht von oben):&lt;br /&gt;
&lt;br /&gt;
[[Bild:avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
* http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Pinbelegung&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
Beim Zero ein Pad auf der Rückseite des PCBs, per Kontaktfeder zu erreichen.&lt;br /&gt;
*http://www.mikrocontroller.net/attachment/60461/PrgSteck2.jpg&lt;br /&gt;
&lt;br /&gt;
=== JTAG (Comet) ===&lt;br /&gt;
&lt;br /&gt;
Anschluss des JTAG-ICE (hier mit dem „Tintenfisch“-Adapter):&lt;br /&gt;
&lt;br /&gt;
[[Bild:comet-jtag.jpg]]&lt;br /&gt;
&lt;br /&gt;
Im Auslieferungszustand ist die &amp;lt;tt&amp;gt;JTAGEN&amp;lt;/tt&amp;gt;-Fuse gelöscht (&#039;&#039;high fuse&#039;&#039; = 0xD9 statt 0x99).  Man benötigt daher initial mindestens einmal eine ISP-Verbindung, um ein &#039;&#039;chip erase&#039;&#039; vorzunehmen und danach die &amp;lt;tt&amp;gt;JTAGEN&amp;lt;/tt&amp;gt;-Fuse wieder setzen zu können.&lt;br /&gt;
&lt;br /&gt;
== Funkmodul ==&lt;br /&gt;
Kabellose Steuerung per Funk mittels Funkmodul über SPI ([[RFM12]]).&lt;br /&gt;
* Huckepackplatine (Eagle) siehe Beitrag: http://www.mikrocontroller.net/topic/160462#2000152 und http://www.mikrocontroller.net/topic/153235#1584210&lt;br /&gt;
* Rohfassung integrierte Platine: http://www.mikrocontroller.net/topic/237375#2417822&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
=== Original ===&lt;br /&gt;
&lt;br /&gt;
==== V. X ====&lt;br /&gt;
===== Features =====&lt;br /&gt;
===== Bugs =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alternativ ===&lt;br /&gt;
&lt;br /&gt;
==== travelrec ====&lt;br /&gt;
Alle Informationen aus dem ersten Post aus http://www.mikrocontroller.net/topic/160462. Änderungen noch nicht berücksichtigt!&lt;br /&gt;
&lt;br /&gt;
* Thread: http://www.mikrocontroller.net/topic/160462&lt;br /&gt;
* Sprache: Assembler/C-Portierung verfügbar (siehe Quellcode)&lt;br /&gt;
* Quellcode: https://github.com/dl8dtl/sparmatic&lt;br /&gt;
* Hinweise:  keine Haftung für etwaige Schäden an den Geräten oder der Heizungsanlage, die Benutzung geschieht auf eigene Gefahr.&lt;br /&gt;
&lt;br /&gt;
===== Fuses =====&lt;br /&gt;
Siehe Screenshots: http://www.mikrocontroller.net/topic/160462#1526589&lt;br /&gt;
&lt;br /&gt;
===== ISP-Verbindung =====&lt;br /&gt;
Beim ersten Verbinden mittels AVR-Studio oder einer anderen IDE sollte die ISP-Frequenz nicht höher als 20kHz sein, nach dem Aufbringen der neuen Firmware kann mit 100kHz  weitergearbeitet werden. Der Programmer muß targetseitig auf 2.7V eingestellt werden können.&lt;br /&gt;
&lt;br /&gt;
===== Changelog =====&lt;br /&gt;
* 0.14 http://www.mikrocontroller.net/topic/160462#1845096&lt;br /&gt;
** Der Motor wird nun im Regelbetrieb mit PWM gefahren und ist deutlich leiser. &lt;br /&gt;
** Ein kleiner Bug wurde auch noch gefixt.&lt;br /&gt;
* 0.11 http://www.mikrocontroller.net/topic/160462#1567800&lt;br /&gt;
* 0.09 http://www.mikrocontroller.net/topic/160462#1527418&lt;br /&gt;
* 0.0? http://www.mikrocontroller.net/topic/160462#1526589&lt;br /&gt;
&lt;br /&gt;
===== Bedienung =====&lt;br /&gt;
&lt;br /&gt;
Nach dem Flashen der neuen Firmware bzw. nach dem Einlegen der Batterien wird im Display &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;quot; angezeigt und der Ventilstößel fährt voll auf.&lt;br /&gt;
Nach dem Anfahren des oberen Anschlags stoppt der Motor und &amp;quot;Open&amp;quot; wird angezeigt.&lt;br /&gt;
Jetzt kann der Thermostat auf den Ventilkopf aufgeschraubt werden. &lt;br /&gt;
Danach muß die mittlere Taste gedrückt werden. &lt;br /&gt;
Jetzt fährt der Ventilstößel zu und stellt zuerst den äußeren, dann den inneren Anschlag des Heizkörperventils fest. &lt;br /&gt;
Danach geht das Gerät in den Normalmodus, wobei eine fest eingestellte Komforttemperatur angewählt wird.&lt;br /&gt;
&lt;br /&gt;
Um die Komforttemperatur umzuprogrammieren, drückt man 1x kurz auf die PROG-Taste. &lt;br /&gt;
Das Sonnensymbol blinkt und mit der + oder - Taste kann der Wert in 0.5°C-Schritten verändert werden. &lt;br /&gt;
Nach einem weiteren Druck auf die PROG-Taste kann man die Absenktemperatur umprogrammieren, wobei das Mond-Symbol blinkt. &lt;br /&gt;
Wird über 10 Sekunden keine Taste gedrückt, werden die Einstellungen übernommen. &lt;br /&gt;
Mit einem weiteren Druck auf die PROG-Taste gelangt man in den Programmiermodus für die Timer. Das Anzeigesymbol &amp;quot;PROG&amp;quot; erscheint. &lt;br /&gt;
Es sind pro Wochentag 2 Timer mit jeweils Komfort- und Absenktemperatur vorhanden. &lt;br /&gt;
Zwischenzeitlich blinkt kurz Px.x, wobei das linke x für den Wochentag 1-&amp;gt;Montag bis 7-&amp;gt;Sonntag und das rechte x für den ersten bzw. zweiten Timer für diesen Tag steht.&lt;br /&gt;
Jeder weitere Druck auf die PROG-Taste schaltet einen Timer weiter. &lt;br /&gt;
Nach den Timern folgt die Jahres-, Monats-, Tages-, Stunden- und Minuteneinstellung. &lt;br /&gt;
Die Zeiteinstellung kann man jederzeit schnell über einen langen Druck &amp;gt;3sek. auf die PROG-Taste erreichen. &lt;br /&gt;
Gespeichert werden alle Werte nach Rückkehr in den Normalmodus über fortwährendes Drücken der PROG-Taste oder mindestens 10-sekündiges Nichtdrücken irgendeiner Taste. &lt;br /&gt;
Im Normalmodus kann man jederzeit mit der + oder - Taste die aktuelle Solltemperatur in 0.5°C-Schritten verändern. &lt;br /&gt;
Mit der AUTO-Taste schaltet man zwischen Automatik (Anzeige &amp;quot;AUTO&amp;quot;) oder manuellem Modus (Anzeige &amp;quot;MANU&amp;quot;) um. &lt;br /&gt;
Im manuellen Modus werden die eingestellten Timer ignoriert und die momentan eingestellte Solltemperatur beibehalten. &lt;br /&gt;
Im Automatikmodus werden die programmierten Solltemperaturen gemäß den Timereinstellungen angefahren. &lt;br /&gt;
Über die mittlere Taste kann jederzeit zwischen Komfort- und Absenktemperatur umgeschaltet werden, wenn man beispielsweise vor Ablauf eines Timers das Haus verläßt oder früher heimkehrt oder um im manuellen Modus die Solltemperatur direkt umzuschalten. &lt;br /&gt;
Ein langer Druck auf die mittlere Taste aktiviert die Fenster-Offen-Funktion, die die Solltemperatur für 10 Minuten auf 12°C herabsetzt und danach den voreingestellten Wert wieder aufruft. &lt;br /&gt;
Ein langer Druck auf die AUTO-Taste aktiviert den Debug-Modus, der mit einem langen Druck auf die AUTO-Taste wieder verlassen wird. &lt;br /&gt;
Ein gleichzeitiger, langer Druck auf + und - führt eine erneute Ventilvermessung durch, wobei alle laufenden Einstellungen erhalten bleiben. &lt;br /&gt;
Werden die Batterien leer, informiert ein 8-sekündliches, kurzes Aufblinken der Anzeige &amp;quot;batt&amp;quot; über diesen Zustand. &lt;br /&gt;
Sind die Batterien am Ende, wird das Ventil definiert auf eine Position um etwa 30% Öffnung gefahren, um Einfrieren oder Überheizen zu verhindern. &lt;br /&gt;
Zur Wiederaufnahme der Funktion sind dann frische Batterien einzulegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Unterschiede zur Herstellerfirmware =====&lt;br /&gt;
Die wichtigsten Unterschiede der Alternativ-Firmware gegenüber des Originals sind:&lt;br /&gt;
&lt;br /&gt;
====== Unterstützt ======&lt;br /&gt;
* Der Sparmatic Zero läuft mit AA-Batterien und -Akkus.&lt;br /&gt;
* Die Umschaltung von Komfort- und Spartemperaur ist jederzeit durch einen einzigen Knopfdruck möglich.&lt;br /&gt;
* Die Adaptierfunktion reißt bei vollen Batterien nicht unter Umständen das Gerät vom Ventilkopf (!).&lt;br /&gt;
* Die Adaptierfunktion benötigt nur einen Durchlauf Offen -&amp;gt; Geschlossen.&lt;br /&gt;
* Beim Batteriewechsel öffnet der Ventilstößel und verbleibt in der Offen-Stellung, bis eine Taste gedrückt wird, dies erleichtert die Wiedermontage auf dem Ventilkopf.&lt;br /&gt;
* Statt der Soll-Temperatur werden im Normalzustand die Ist-Temperatur und die aktuelle Zeit angezeigt.&lt;br /&gt;
* Die Fenster-Offen-Funktion ist nicht mehr automatisch, sondern manuell auszulösen - bei der Origialfirmware war diese Funktion zu empfindlich und löste mitunter willkürlich aus.&lt;br /&gt;
* Batterie &amp;quot;fast leer&amp;quot;-Warnung, gelegenliches Blinken von &amp;quot;batt&amp;quot; &lt;br /&gt;
* Batterie &amp;quot;leer&amp;quot;-Anzeige mit definierter Ventilposition, permanente Anzeige von &amp;quot;batt&amp;quot;, keine weitere Funkion möglich&lt;br /&gt;
* leicht geänderte Tastenbelegung und Menüführung&lt;br /&gt;
&lt;br /&gt;
====== Nicht unterstützt ======&lt;br /&gt;
Von der Originalfirmware unterstütze, hier aber (noch) nicht implementierte Funktionen:&lt;br /&gt;
&lt;br /&gt;
* 2 statt 4 Timerblöcke pro Tag&lt;br /&gt;
* Keine Urlaubs-Funktion&lt;br /&gt;
* Keine Blockprogrammierung Werktag / Wochenende bei den Timern&lt;br /&gt;
* Kein Tastenschutz (Kindersicherung)&lt;br /&gt;
* Keine Programmierbarkeit mit dem Sparmatic-USB-Stick&lt;br /&gt;
&lt;br /&gt;
==== tnework ====&lt;br /&gt;
* Hardware: &lt;br /&gt;
* Sprache: Bascom&lt;br /&gt;
* Status: unvollständig&lt;br /&gt;
* Features: nur Thermometer&lt;br /&gt;
* Forum: http://www.mikrocontroller.net/topic/153235#1476452 bzw. http://www.mikrocontroller.net/topic/248295 (02/2012)&lt;br /&gt;
* Quellcode: Zugriff auf SVN per Kontakt: http://www.mikrocontroller.net/topic/153235#1824281&lt;br /&gt;
&lt;br /&gt;
==== wjroes/OpenZero ====&lt;br /&gt;
* Hardware: Thermy&lt;br /&gt;
* Sprache: C (http://www.mikrocontroller.net/articles/Atmel_Studio)&lt;br /&gt;
* Status: &lt;br /&gt;
* Features: Alle Hardwarefunktionen unterstützt (siehe forks), rudimentäre Regelung, kein EEPROM, Stellrad zählt doppelt (Thermy)&lt;br /&gt;
* Quellcode: https://github.com/wjroes/OpenZero&lt;br /&gt;
* Neuere Variante fuer Aldi: http://www.mikrocontroller.net/topic/237375#2727506&lt;br /&gt;
&lt;br /&gt;
==== matze88/sparmatic-zero ====&lt;br /&gt;
* Hardware: Thermy&lt;br /&gt;
* Sprache: C&lt;br /&gt;
* Status: Entwicklung durch Originalentwickler eingestellt&lt;br /&gt;
* Features: PID, nRF24L..&lt;br /&gt;
* Quellcode: https://github.com/NerdyProjects/sparmatic-zero&lt;br /&gt;
* http://www.mikrocontroller.net/topic/237375#2854227&lt;br /&gt;
&lt;br /&gt;
==== openHR20 ====&lt;br /&gt;
* Hardware: Honeywell Rondostat HR20 (versch. Hardware!), HR25, Eurotronic Thermotronic/Sparmatic Basic/Thermy V1&lt;br /&gt;
* Sprache: C&lt;br /&gt;
* Status: Offenbar vollständig (Dokumentation veraltet). Zur Anpassung an das &amp;quot;neue&amp;quot; Display umfangreiche Arbeit an LCD Routinen erforderlich (7-&amp;gt;14 Segmente, anderes Mapping)&lt;br /&gt;
* Features: RFM12 + Verschlüsselung, Zentrale (&amp;quot;Master&amp;quot;: RFM12, AVR ATmega32, serielle Schnittstelle, Logging und Webinterface mit PHP/sqlite, C Kommandozeilentool für Befehle)&lt;br /&gt;
* Quellcode: http://openhr20.svn.sourceforge.net/viewvc/openhr20/rfmsrc/&lt;br /&gt;
* Wiki: (veraltet) http://www.mikrocontroller.net/articles/Heizungssteuerung_mit_Honeywell_HR20&lt;br /&gt;
* Forum: http://embdev.net/topic/118781&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Entwurf ====&lt;br /&gt;
&lt;br /&gt;
Eine gemeinschaftlich entwickelte Firmware (möglicherweise auf Basis von OpenZero (s.o.) und Code von M.L.) führt bei entsprechender Koordination schneller zu Ergebnissen.&lt;br /&gt;
Dieses Wiki ist eine passable Plattform, um die Ziele zu definieren. Die Diskussion findet im Thread http://www.mikrocontroller.net/topic/237375 statt.&lt;br /&gt;
Zusammenarbeit per SVN (mikrocontroller.net) oder entsprechender Plattform (z.B. GIThub, bitbucket, gitorious, ... alles etwas projektspezifischer: Wiki, Forum, issue tracker, Projektplanung).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: ggf. ist es sinnvoller, die Sparmatic-Geräte in OpenHR20 aufzunehmen (s.o.).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Features =====&lt;br /&gt;
&lt;br /&gt;
Sammlung an Features, die beim Entwurf berücksichtigt werden sollten. Natürlich ist nicht damit zu rechnen, dass alles sofort implementiert wird, aber es gibt eine Diskussionsgrundlage für die Schnittstellen.&lt;br /&gt;
&lt;br /&gt;
* Hardwarefunktionen (Details oben)&lt;br /&gt;
** Display&lt;br /&gt;
** Encoder / Tasten (Unterstützung verschiedener Modelle)&lt;br /&gt;
*** Entprellung [Beschleunigung]&lt;br /&gt;
** Aktor&lt;br /&gt;
*** Motoransteuerung über H-Brücke&lt;br /&gt;
*** Stromaufnahme messen&lt;br /&gt;
*** Encoder auswerten&lt;br /&gt;
** Sensoren&lt;br /&gt;
*** Temperatur&lt;br /&gt;
*** Batterie/Akkuspannung&lt;br /&gt;
**** Tiefentladung vermeiden&lt;br /&gt;
** Uhr / Kalender&lt;br /&gt;
** Stromsparmodus&lt;br /&gt;
** Parameterspeicher&lt;br /&gt;
&lt;br /&gt;
* Menüstruktur&lt;br /&gt;
**  Zum Einstellen: Temperatur, Uhrzeit, Datum, Regelparameter, IDs (Schnittstellen), Batterietyp&lt;br /&gt;
**  OpenZero nutzt verschachtelte Statemachine (switch .. case ..), evtl. tabellenbasiert (s. AVR Butterfly)&lt;br /&gt;
&lt;br /&gt;
* Regelung&lt;br /&gt;
** verschiedene Regelalgorithmen denkbar, also unterschiedliche Parameter erforderlich&lt;br /&gt;
&lt;br /&gt;
* Anwendung&lt;br /&gt;
** Kalibrierung (ADC/Bandgap)&lt;br /&gt;
** Referenzfahrt Ventil&lt;br /&gt;
** Temperaturregelung&lt;br /&gt;
** Zeitsteuerung der Regelung&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
* Schnittstelle(n)&lt;br /&gt;
** z.B. Funkmodule (RFM12, nRF.., integrierte HF)&lt;br /&gt;
  Unterschiedliche Anbindung (SPI, I2C, ..) und Ansteuerung&lt;br /&gt;
** Verbindung zu &lt;br /&gt;
*** Zentrale&lt;br /&gt;
*** externe Sensoren (Raumtemperatur, Fenster-Sensor)&lt;br /&gt;
*** anderen Reglern (synchronisieren)&lt;br /&gt;
*** Aktoren (Energie anfordern, Heizung einschalten)&lt;br /&gt;
** gemeinsames Protokoll&lt;br /&gt;
*** welche Parameter werden übertragen?&lt;br /&gt;
*** kann das Protokoll so flexibel sein, dass keine Änderung an der Übertragung erforderlich ist, auch wenn die Partner andere Daten übertragen?&lt;br /&gt;
*** Regler-ID, Prüfsummen, ACK-Pakete?&lt;br /&gt;
&lt;br /&gt;
* Zentrale&lt;br /&gt;
** Konfiguration der Regler&lt;br /&gt;
** Synchronisieren der Regler (manuelle Einstellung ausserhalb der Zeitsteuerung)&lt;br /&gt;
** evtl. Knotenpunkt der Kommunikation (Zentrale durch Netzteil versorgt, kann aus Energiespargründen nur gelegentlich gesendete Telegramme der Regler immer empfangen)&lt;br /&gt;
** Hardware&lt;br /&gt;
*** mind. Funkmodul und Dekoder des Funkprotokolls&lt;br /&gt;
*** darüber hinaus mehrere Ansätze&lt;br /&gt;
**** Embedded mit (Grafik)Display etc.&lt;br /&gt;
**** GUI&lt;br /&gt;
**** Web-Server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Energiebedarf&lt;br /&gt;
** Batterie / Akku muss mindestens eine Heizperiode halten (&amp;gt; 6 Monate?)&lt;br /&gt;
** minimieren:&lt;br /&gt;
*** Standby/Power-Down&lt;br /&gt;
*** Aktornutzung minimieren&lt;br /&gt;
*** selten Kommunizieren&lt;br /&gt;
&lt;br /&gt;
===== Hardware =====&lt;br /&gt;
====== Display ======&lt;br /&gt;
====== Encoder/Tasten ======&lt;br /&gt;
====== Temperatursensor ======&lt;br /&gt;
====== Motoransteuerung und -strommessung ======&lt;br /&gt;
&lt;br /&gt;
====== Batterieerkennung ======&lt;br /&gt;
&lt;br /&gt;
Bei allen Sparmatic-Modellen ist eine Batterie-Entnahme-Erkennung eingebaut. Diese ermöglicht es dem Controller, zu erkennen, ob die Batterien gerade entnommen wurden. Mit hoher Wahrscheinlichkeit wird dies in der Original-Firmware dazu benutzt, die aktuelle Zeit und das Datum im EEPROM abzuspeichern, bevor der Strom ausgeht. In der alternativen Firmware wird dieses Feature bislang nicht verwendet. Es ist aber für eine neue Version eingeplant. Um das Schaltsignal auswerten zu können, welches bei allen Reglern an Pin E0 anliegt, müssen im Sleep-Mode (PowerSave) des Controllers beide Motorsteuerpins und der Lichtschrankenversorgungspin auf &#039;Eingang, kein Pull-Up&#039; geschaltet werden. Im Fall einer Batterieentnahme wechselt der Pegel an E0 von logisch 0 auf logisch 1. Der 100µF-Elko liefert dann noch für etwa 2 Sekunden Strom (Controller im PowerSave), bis die Spannung dann den kritischen Wert von 1.8V unterschreitet.&lt;br /&gt;
&lt;br /&gt;
Bei den Reglern der 3. Generation (weiße Platine) liegt die Batterie-Entnahme-Erkennung auf Pin E5. In der Firmware genügt es, den Pullup auf E5 während des Main-Durchlaufes einzuschalten. Lässt sich der Pin auf logisch &amp;quot;1&amp;quot; ziehen, sind die Batterien gerade entnommen worden und der Speichervorgang für das EEPROM sollte umgehend eingeleitet werden. Davor sind sämtliche Verbraucher abzuschalten, um genügend Energie für den Speichervorgang zu haben (reicht für etwa 10 Bytes). Bleibt der Pin auf logisch &amp;quot;0&amp;quot;, sind die Batterien eingestzt. Dann deaktiviert man für die Dauer des Schlafzustandes den Pullup wieder und testet im nächsten Main-Durchlauf erneut.&lt;br /&gt;
&lt;br /&gt;
====== Funkmodul ======&lt;br /&gt;
===== Benutzerschnittstelle / Bedienung =====&lt;br /&gt;
===== Regelung =====&lt;br /&gt;
===== Zeitsteuerung =====&lt;br /&gt;
===== Vernetzung =====&lt;br /&gt;
Funkmodul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=94229</id>
		<title>ESP8266</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ESP8266&amp;diff=94229"/>
		<updated>2016-11-02T23:21:02Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Benutzung einer Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:ESP8266.jpg|thumb|300px|ESP8266, Funkmodul]]&lt;br /&gt;
Das [[ESP8266]] von dem Hersteller Espressif ist ein programmierbarer WLAN-SoC mit [[UART]]- und [[SPI]]-Schnittstelle. &#039;&#039;&#039;WLAN&#039;&#039;&#039;-Funkmodule mit ESP8266 sind ab 3€ verfügbar. Die UART-Schnitttstelle ermöglicht eine einfache Integration in Mikrocontrollerprojekte.&lt;br /&gt;
&lt;br /&gt;
== Spezifikation ==&lt;br /&gt;
Laut Hersteller &amp;lt;ref&amp;gt;[http://espressif.com/en/products/esp8266 &#039;&#039;Herstellerseite -  unter Details&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;. :&lt;br /&gt;
* 802.11 b/g/n&lt;br /&gt;
* Wi-Fi Direct (P2P), soft-AP&lt;br /&gt;
* Integrated TCP/IP protocol stack&lt;br /&gt;
* Integrated TR switch, balun, LNA, power amplifier and matching network&lt;br /&gt;
* Integrated PLLs, regulators, DCXO and power management units&lt;br /&gt;
* +19.5dBm output power in 802.11b mode&lt;br /&gt;
* Power down leakage current of &amp;lt;10uA&lt;br /&gt;
* Integrated low power 32-bit CPU could be used as application processor&lt;br /&gt;
* SDIO 1.1/2.0, SPI, UART&lt;br /&gt;
* STBC, 1×1 MIMO, 2×1 MIMO&lt;br /&gt;
* A-MPDU &amp;amp; A-MSDU aggregation &amp;amp; 0.4ms guard interval&lt;br /&gt;
* Wake up and transmit packets in &amp;lt; 2ms&lt;br /&gt;
* Standby power consumption of &amp;lt; 1.0mW (DTIM3)&lt;br /&gt;
* VCC: 3,3V (Achtung: Eingänge sind &#039;&#039;&#039;NICHT 5V TOLERANT&#039;&#039;&#039;!)&lt;br /&gt;
Weiterhin:&lt;br /&gt;
* GPIOs, ADC&lt;br /&gt;
&lt;br /&gt;
=== Datendurchsatz/Performanz ===&lt;br /&gt;
[https://www.mikrocontroller.net/topic/342240?page=single#3857630 Beitrag im Forum mit Tests: TCP: bis zu 7 MBit/s]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=7&amp;amp;t=24 Beitrag Espressif-Form: UART loopback: 4.5 Mbps]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bei den chinesischen Modulen mit Firmware 0.9.1 werden Ping Befehle unabhängig von der Paketgröße typischerweise in 30-150ms beantwortet. Datenpakete, die man vom PC aus an das Modul sendet werden unabhängig von der Paketgröße typischerweise nach 100-200ms quittiert.&lt;br /&gt;
&lt;br /&gt;
=== Power-/Sleep-Modes ===&lt;br /&gt;
Der Stromverbrauch des ESP8266 ist abhängig von vielen Faktoren, er läßt sich aber durch geschickte Programmierung durchaus deutlich senken.&amp;lt;br/&amp;gt;&lt;br /&gt;
So ist es nicht notwendig, dass das WIFI-Modem oder der Mikrocontroller ständig läuft um z.B. eine WLAN-Türklingel zu realisieren. Im &amp;quot;Deep-Sleep&amp;quot; würde der ESP8266 dann nur 10uA verbrauchen, bis er über einen GPI-Interrupt geweckt wird und die Meldung absetzt.&amp;lt;br/&amp;gt;&lt;br /&gt;
Zu beachten ist, dass in diesem Moment die WLAN und Netzwerkanmeldung neu startet und hierfür eine gewisse Zeit benötigt wird.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=6&amp;amp;t=133 detailierte Übersicht der verschieden Modi und deren Stromverbrauch von Espressif]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WLAN-Module mit ESP8266 ==&lt;br /&gt;
Es existieren ca. 11 Varianten von chinesischen Herstellern. Beispielsweise mit PCB- oder Keramik-Antenne oder mit u.fl.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Die Firmware 0.9.1 unterstützt bis zu vier gleichzeitige TCP oder UDP Verbindungen. Sie kann sich in vorhandene WLAN Netze einbuchen, aber auch selbst Access-Point mit DHCP Server sein. Der Access-Point ist zu Android kompatibel (mit 4.1.2 getestet).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Die Firmware enthält jedoch keinen Router. Mehrere Computer, die mit dem Modul als Access-Point verbunden sind, können keine Verbindung zueinander aufbauen.&lt;br /&gt;
Das Feature nennt sich AP Isolation.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
#Produktbeschreibung: [[http://playground.boxtec.ch/doku.php/wireless/esp8266]]&lt;br /&gt;
&lt;br /&gt;
=== Pinbelegung einiger ESP8266-Module ===&lt;br /&gt;
====ESP8266-01====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:ESP8266-PinBelegung1.jpg|Pinbelegung - Groß mit PCB-Antenne&lt;br /&gt;
Datei:ESP8266-PinBelegung2.jpg|Pinbelegung - Klein mit Keramik-Antenne&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Quelle &amp;lt;ref&amp;gt;[http://pan.baidu.com/share/link?shareid=727869034&amp;amp;uk=1900861665 &#039;&#039;Seller Information&#039;&#039;] Abgerufen am 26. August 2014.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
====ESP8266-07====&lt;br /&gt;
Achtung, beim ESP8266-07 Modul sind einige mit vertauschten Beschriftungen von GPIO4 und GPIO5 unterwegs!!.&lt;br /&gt;
&lt;br /&gt;
== Möglichkeiten der Nutzung und Programmierung ==&lt;br /&gt;
===== Benutzung einer Firmware =====&lt;br /&gt;
Verschiedene Projekte betreiben die Entwicklung einer Firmware. Man kann die Firmware &amp;quot;einfach nur&amp;quot; flashen und benutzen oder sich auch aktiv an der Entwicklung beteiligen. Es gibt unter anderem folgende Projekte:&lt;br /&gt;
* AT-Befehle: Firmware, mit welcher das Modul über UART angesprochen wird.&lt;br /&gt;
* Micropython: Firmware, die das Ablaufen von Python Scripts ermöglicht ([https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/intro.html Tutorial])&lt;br /&gt;
* NodeMCU: Firmware, die das Ablaufen von Lua-Scripts ermöglicht ([https://github.com/nodemcu/nodemcu-firmware Github])&lt;br /&gt;
* smartJS: Firmware, die das Ausführen von JavaScript erlaubt ([https://github.com/cesanta/smart.js Github])&lt;br /&gt;
* Arduino core for ESP8266 WiFi chip: Programmierumgebung &amp;amp; Firmware, die das Ausführen von C Programmen ermöglicht, im Stil der bekannten Arduino Plattform. [https://github.com/esp8266/Arduino Github - ink. Anleitung]&lt;br /&gt;
* ESP8266 Basic: Firmware, die das Ausführen von Basic Programmen und das Editieren über WLAN erlaubt [http://www.esp8266basic.com/]&lt;br /&gt;
* Sming: Einfach zu nutzendes Framework, ähnlich wie Arduino, allerdings mit einem einfachen Makefile pro Projekt und mit Eclipseprojekten.([https://github.com/SmingHub/Sming Github])&lt;br /&gt;
* ESP-Lisp (BETA): A small fast lisp interpeter for a ESP8266 ([https://github.com/yesco/esp-lisp Github])&lt;br /&gt;
* ESP8266Forth:  Forth for the ESP8266 NodeMCU Amica ([https://github.com/CraigLindley/ESP8266Forth Github])&lt;br /&gt;
* Forthright: Forth for ESP-8266 ([https://github.com/niclash/forthright Github])&lt;br /&gt;
* Punyforth:  FORTH inspired programming language for the ESP8266 ([https://github.com/zeroflag/punyforth Github])&lt;br /&gt;
&lt;br /&gt;
===== Erstellen (Kompilieren) einer Firmware =====&lt;br /&gt;
Für die Erstellung einer individuellen Firmware gibt es zwei Möglichkeiten:&lt;br /&gt;
* Software Development Kit (SDK): Erstellen einer Firmware mit einer GCC-Toolchain&lt;br /&gt;
* Arduino IDE: Erstellen einer Firmware mit einer Arduino IDE&lt;br /&gt;
Projekte, die eine Firmware für das ESP8266 entwickeln (siehe vorheriger Abschnitt), benutzen eine dieser beiden Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Firmware flashen/updaten ===&lt;br /&gt;
Typischerweise wird eine kompilierte Firmware per UART-Bootloader des ESP8266-SoC auf einen Flash-Chip eines ESP8266-Moduls geladen. Von dort startet der ESP8266-SoC anschließend die Firmware.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewtopic.php?f=5&amp;amp;t=433 Flash Download Tool vom Hersteller] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/themadinventor/esptool Python Tool zum Flashen (von Fredrik Ahlberg)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://github.com/3s1d/esp_prog Extension zum Tool von Fredrik Ahlberg] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=2#3857075 Tool zum Flashen (von Christian Klippel)] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://web.archive.org/web/20150502082616/http://defcon-cc.dyndns.org/wiki/ESP8266#Update Anleitung, extern] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240?page=3#3810559 Anleitung, Forum]&lt;br /&gt;
&lt;br /&gt;
Der Hersteller veröffentlich regelmässig [http://bbs.espressif.com/viewforum.php?f=5 Firmwareupdates] als Bestandteil des esp_iot_sdk. Die Firmware-Dateien befinden sich im Verzeichnis bin. Das Update wird beispielweise für Firmware 0.9.5 folgendermaßen durchgeführt: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python esptool.py --baud 9600 --port com6 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abhängig von der Flashgröße muß man die Firmware ab Version 1.0.1 selbst compilieren. Siehe Diskussion [http://www.esp8266.com/viewtopic.php?p=16515 hier] und [http://bbs.espressif.com/viewtopic.php?f=16&amp;amp;t=400 hier].&lt;br /&gt;
&lt;br /&gt;
=== Nutzung ohne Firmware ===&lt;br /&gt;
Es ist wohl sogar möglich den ESP8266 als SDIO WLAN Modul an einem Raspberry Pi zu betreiben. Verwendet wird dabei der Linuxtreiber des ESP8089. Der ESP8266 bootet dann nicht die Firmware aus dem Flash sondern über SDIO.    &lt;br /&gt;
&lt;br /&gt;
https://hackaday.io/project/8678-rpi-wifi&lt;br /&gt;
&lt;br /&gt;
== AT-Befehle für eine Firmware auf Basis des SDK-Beispiels &amp;quot;AT&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als AP&lt;br /&gt;
&lt;br /&gt;
Da wir nicht wissen, in welchem Modus sich das Modul gerade befindet, fragen wir diesen ab mit dem &lt;br /&gt;
Befehl AT+CWMODE?  Das Modul antwortet mit &lt;br /&gt;
&lt;br /&gt;
    AT+CWMODE?&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;+CWMODE:1&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
In diesem Fall ist das Modul aktuell im Modus 1 ( Station) eingestellt. Also ändern wir den Modus auf 2 ( AP)&lt;br /&gt;
mit dem Befehl AT+CWMODE=2. Nach diesem Befehl ist ein Reset des Moduls erforderlich, damit die Änderung &lt;br /&gt;
sichtbar wird. Mit dem Befehl AT+RST führen wir diesen durch. Das Modul startet neu und die Stromaufnahme&lt;br /&gt;
steigt auf ca 80 mA. Das Modul ist jetzt als WLAN AP im Wireless Lan sichtbar. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir noch einstellen, dass wir mehrere Verbindungen gleichzeitig haben wollen und den TCP Server starten und einstellen. Mit dem Befehl AT+CIPMUX=1 sagen wir dem Modul, dass wir mehrere Verbindungen haben wollen. Und mit dem Befehl AT+CIPSERVER=1,2526 starten wir den TCP Server und lassen ihn auf Port 2526 laufen. Sobald sich ein Client verbindet, sendet das Modul &#039;Link&#039; + LF + CR. Beim Trennen einer Verbindung vom Client kommt &#039;Unlink&#039; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
Ab hier können wir uns über einen TCP Socket auf Port 2526 mit dem Modul verbinden und Daten austauschen. Empfangene Daten werden folgendermaßen angezeigt. Gesendet wurde  &amp;quot;Hallo Leute&amp;quot; + LF + CR.&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     +IPD,0,11:Hallo Leute&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
     OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+IPD kommt immer, 0 ist die erste Verbindung. Wenn 2 Geräte gleichzeitig eine Verbindung aufgebaut haben, steht dort eine 1. 11 Zeichen wurden empfangen, dann kommen die Daten.&lt;br /&gt;
&lt;br /&gt;
Zum Senden von Daten vom Modul zum Client geht man folgenderweise vor. Erstmal sagen wir dem Modul, wieviele Daten wir an welche Verbindung schicken wollen. Mit dem Befehl AT+CIPSEND=0,5 z. B. sagen wir dem Modul wir möchten 5 Bytes an Verbindung 0 senden. Nach diesem Befehl werden die nächsten 5 Zeichen direkt an die Verbindung weitergereicht.&lt;br /&gt;
Sollte keine aktive Verbindung bestehen, sendet das Modul &lt;br /&gt;
     AT+CIPSEND=0,5&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;link is not&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
ansonsten kommt &lt;br /&gt;
     &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt; &amp;gt;&lt;br /&gt;
und man kann Daten senden. Nach dem absenden der Daten &#039;Leute&#039; + LF + CR sendet das Modul &lt;br /&gt;
    Leute&amp;lt;\r&amp;gt;&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    busy&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    &amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
    SEND OK&amp;lt;\r&amp;gt;&amp;lt;\n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einstellen des Moduls als Station&lt;br /&gt;
&lt;br /&gt;
== Software Development Kit (SDK) ==&lt;br /&gt;
Mit dem SDK können eigene Applikationen programmiert und die im SDK vorhandenen Beispiele &amp;quot;AT&amp;quot; und &amp;quot;IoT&amp;quot; verändert werden. Das SDK wird vom Hersteller zur Verfügung gestellt (Stand 25.10.2014). Passend zum SDK existiert eine virtuelle Maschine mit eingerichtetem gcc zum Kompilieren. Insbesondere der nun verfügbare gcc basiert auf einer Community-Entwicklung.&lt;br /&gt;
&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc]&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine + Anleitung/HOWTO für das Setup sowie für das Kompilieren]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anmerkung ===&lt;br /&gt;
Mit dem SDK wird der Mikrocontroller progammiert, der sich direkt auf dem ESP8266-SoC-Chip befindet. Dies ist nicht zu verwechseln mit Programmieranleitungen zur UART-Ansteuerung des ESP8266-SoC (meist mit AT-Firmware) mit einem anderen Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
==Checkliste bei Problemen mit dem Modul/Compiler/SDK==&lt;br /&gt;
Bitte berücksichtige bei der Frage nach Hilfestellung zu Deinem Problem die folgende Checkliste.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit der AT-Firmware/UART-Ansteuerung mit Mikrocontroller&#039;&#039;&#039;&lt;br /&gt;
# Was nutzt Du für die Stromversorgung?&amp;lt;br/&amp;gt;(Ganz knapp benennen, so dass Rückschlüsse auf Spannung und Stromstärke möglich sind)&lt;br /&gt;
# Welche Firmware-Version verwendest Du und von woher hast Du sie?&lt;br /&gt;
# Welchen Mikrocontroller verwendest Du?&lt;br /&gt;
# Welche Baudrate verwendest Du?&lt;br /&gt;
# &amp;quot;Sieht&amp;quot; das Modul den AP, &amp;quot;sieht&amp;quot; der PC das Modul?&lt;br /&gt;
# Funktioniert ein Connect?&lt;br /&gt;
# Welche AT-Befehlssequenz verwendest Du und was antwortet das Modul?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Problemen mit dem SDK/Compiler&#039;&#039;&#039;&lt;br /&gt;
# Benutzt Du die neuste, offizielle VM?&amp;lt;br/&amp;gt;(Diese ist ausgelegt für das neueste SDK)&lt;br /&gt;
# Benutzt Du das neueste, offizielle SDK? Welche Version benutzt Du?&amp;lt;br/&amp;gt;(Es werden regelmäßig Bugfixes und Erweiterungen eingepflegt)&lt;br /&gt;
# Kannst Du die SDK-Beispiele (IoT,AT) entsprechend der offiziellen Anleitung kompilieren, flashen und läuft es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://en.wikipedia.org/wiki/ESP8266 ESP8266-Eintrag auf en.wikipedia.org]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.esp8266.com/ ESP8266 Community Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://github.com/esp8266 ESP8266 Github mit Wiki und Source-Code Samples]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://hackaday.com/tag/esp8266/ Hackaday Posts zu ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://espressif.com/en/products/esp8266/ ESP8266-Seite des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://bbs.espressif.com/ ESP8266-Forum des Herstellers]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/348772 Topic neu im mikrocontroller.net-Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342240 Topic alt im mikrocontroller.net-Forum]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/topic/342878 Sammelbestellungen im mikrocontroller.net-Forum]&lt;br /&gt;
&lt;br /&gt;
[http://esp8266-server.de/ Universelle I2C- Steuerung mittels WLAN TCP/IP und Webinterface mit ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.thomasheldt.de/ Viele Projekte und Informationen zum ESP8266]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://stefanfrings.de/wlan_io/ Projekt I/O Schnittstellen Modul mit WLAN]&lt;br /&gt;
&lt;br /&gt;
=== Dokumente === &lt;br /&gt;
[http://neilkolban.com/tech/esp8266/ Kolban’s book on the ESP8266] Sehr empfehlenswert!&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Anleitung/HOWTO für das Setup der virtuellen Maschine (SDK) sowie für das Kompilieren]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://nurdspace.nl/ESP8266 Übersetztes Datenblatt]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/w/Wi07c AT Instructions Set (English)] und [http://www.electrodragon.com/w/Wi07c#First_time_use_guide Anleitung zum Betrieb an einem Arduino (inkl. Code)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://thomaspfeifer.net/esp8266_wlan_seriell_modul_at_kommandos.htm Beschreibung der AT-Kommandos mit Beispielen]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/229016/Espressif_IoT_AT____v0.1.5.906.pdf Espressif AT Instruction Set(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/document/pdf/ESP8266%20Specifications(Chinese).pdf ESP8266 Specifications(Chinese)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://nodemcu.readthedocs.org/en/dev/ NodeMCU Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cknodemcu.wordpress.com/2015/11/24/building-an-iot-node-for-less-than-15/ Building an IoT Node for less than 15$] (Paper, Kindle via Amazon)&lt;br /&gt;
&lt;br /&gt;
===Daten===&lt;br /&gt;
[http://bbs.espressif.com/viewforum.php?f=5&amp;amp;sid=3cf7540ab17805367e6a45d2c4682fc9 SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&amp;amp;usp=sharing Alternativlink für die virtuelle Maschine]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://onedrive.live.com/#cid=C4DDF72E6EEA3826&amp;amp;id=C4DDF72E6EEA3826%21631 Dateien (Xplorer+SDK+PDF+etc.)]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.mikrocontroller.net/attachment/230185/esp8266_config_v050.exe Config-Tool] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezugsquellen ===&lt;br /&gt;
[http://espressif.com/en/company/contact/buy-a-sample/ Offizieller Espressif Vertriebskanal] (Sample Purchase)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.aliexpress.com/wholesale?SearchText=ESP8266 aliexpress.com] ~ 2€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.banggood.com/?zf=283997 banggood.com] ~ 3.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.ebay.de/ Ebay]&lt;br /&gt;
ab 3€ inkl. Versand, Einzelstückpreis: ESP-01/02/03/04/05&amp;lt;br/&amp;gt;&lt;br /&gt;
(Suchbegriff: ESP8266, Option Artikelstandort: &amp;quot;Weltweit&amp;quot;)&amp;lt;br/&amp;gt;&lt;br /&gt;
(10 Stück ab 27 EUR inkl. Versand; Suchbegriff: 10pcs ESP8266)&amp;lt;br/&amp;gt;&lt;br /&gt;
ab 3.20€ inkl. Versand, Einzelstückpreis: ESP-07/08/09/11&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.electrodragon.com/?s=esp8266&amp;amp;post_type=product electrodragon.com] ~ 3.50€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://ex-store.de/advanced_search_result.php?keywords=esp8266&amp;amp;x=0&amp;amp;y=0 eX-store.de] (ESP-01/02/03/05/07/12/13) ab 3.35€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.it-wns.de/themes/suche/index.php?suchekategorie=&amp;amp;sucheallgemein=esp8266 IT-WNS.de] (ESP-01/02/03/06/07/12E) je 3.99€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.seeedstudio.com/depot/WiFi-Serial-Transceiver-Module-w-ESP8266-p-1994.html seeedstudio.com] ~ 5.50€&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://shop.in-circuit.de/index.php?cPath=21 In-Circuit.de] ESP-ADC DIL Modul mit ESP8266EX 9.90€ Einzelpreis&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.watterott.com/index.php?page=search&amp;amp;desc=off&amp;amp;sdesc=off&amp;amp;keywords=ESP8266 watterott.com] ab ~ 4€ (zzgl. Versand)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anderes==&lt;br /&gt;
*[http://www.mikrocontroller.net/articles/ESP8266-CPCB PCB für Community-Modul (Vorschlag)]&lt;br /&gt;
*[http://fkainka.de/esp8266-in-der-arduino-ide/ ESP8266 mit Arduino IDE programmieren]&lt;br /&gt;
*[http://www.arduinesp.com Arduino IDE Integration (ab 1.6.x)]&lt;br /&gt;
*[https://cknodemcu.wordpress.com/ NodeMCU (Lua) Anwendungen]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--von [[axhieb]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;br /&gt;
[[Kategorie:Wlan]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=China_SUPER_Bauteile-Schn%C3%A4ppchen_Thread-Wiki&amp;diff=88968</id>
		<title>China SUPER Bauteile-Schnäppchen Thread-Wiki</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=China_SUPER_Bauteile-Schn%C3%A4ppchen_Thread-Wiki&amp;diff=88968"/>
		<updated>2015-06-14T22:54:45Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* LDO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Viele von euch möchten gerne zu günstigen Preisen und kostenlosem Versand Elektronische Bauteilsortimente oder alles Rund um Elektronik einkaufen? Dann seid ihr genau auf dieser Seite richtig. Was Ihr hinnehmen müsst, sind die längere Versandzeiten aus China oder Hongkong. Hier werden nacheinander Schnäppchen vom bekannten &amp;quot;SUPER Bauteile-Schnäppchen Thread&amp;quot; gelistet. &lt;br /&gt;
&lt;br /&gt;
Allfällige Preisangaben sind natürlich nur zur Orientierung. &#039;&#039;&#039;Es empfiehlt sich immer, vor dem Kauf  nach dem gewünschten Artikel zu suchen&#039;&#039;&#039;, auf ebay.com (+ Browser-Spracheinstellung englisch), ebenso auf aliexpress.com und auf den anderen hier aufgeführten Seiten. Suchbegriffe finden sich ja beim verlinkten Artikel selbst, der auf Grund der Verlinkung gerne teurer wird.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend muss ich sagen, wenn ihr Artikel seht, die nicht mehr verfügbar zu kaufen sind, bitte ich euch darum einfach den Link zu löschen über die &amp;quot;BEARBEITEN&amp;quot; Funktion rechts (Siehe &amp;quot;Regeln&amp;quot;). So bleibt das Wiki am aktuellsten.&lt;br /&gt;
Wer &amp;quot;Lust und Zeit&amp;quot; hat, darf gerne selber hier Dinge beitragen...&lt;br /&gt;
&lt;br /&gt;
Vielen dank an an den Verfasser Simon Ruetz und alle, die an diesers Seite mitwirken.&lt;br /&gt;
&lt;br /&gt;
Der neue Thread =&amp;gt; https://www.mikrocontroller.net/topic/357076&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Regeln&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Da die Liste mittlerweie größere Außmaße angenommen hat, möchte ich diese Regeln zum Posten vorschlagen:&lt;br /&gt;
&lt;br /&gt;
=== Einträge ===&lt;br /&gt;
&lt;br /&gt;
Zu jedem Eintrag bitte hinzufügen:&lt;br /&gt;
*Link&lt;br /&gt;
*eventuell Titel (falls die Kategoriebezeichnung dies nicht abdeckt)&lt;br /&gt;
*Stückpreis &amp;lt;b&amp;gt;inkl.&amp;lt;/b&amp;gt; Versandkosten, da insbesondere Letztere häufig von der Menge der bestellten Teile abhängen (und so effektiv eine Preiserhöhung sind)&lt;br /&gt;
*Bestellmenge (für die der Preis gilt) &lt;br /&gt;
*Bemerkungen. Wenn der gelieferte Artikel dem Original entspricht reicht &amp;quot;OK&amp;quot;, ansonsten gerne mit Mängel/ Einschränkungen. Sollte der Artikel noch nicht angekommen sein, bitte mit (ausstehend) markieren.&lt;br /&gt;
*Änderungsdatum. Dies steht zwar auch im Changelog, für den schnelleren Überblick ist es imho jedoch praktisch, dies hinzu zu fügen.&lt;br /&gt;
&lt;br /&gt;
Formatierung:&lt;br /&gt;
*[EURO,CENT€ @ MENGE] TITEL, LINK (BEMERKUNG)(DATUM)&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
&lt;br /&gt;
Falls euch beim stöbern auffallen sollte, dass sich etwas geändert hat, aktualisiert bitte den Artikel. Dies kann auch ohne Anmeldung gemacht werden.&lt;br /&gt;
&lt;br /&gt;
*Bei einem neuen Preis diesen aktualisieren&lt;br /&gt;
*Bei einem &amp;quot;toten&amp;quot; Artikel:&lt;br /&gt;
**entfernen, falls ein ähnlicher Artikel bereits existiert&lt;br /&gt;
**durch einen Gleichen, bis zu max. ~25% teureren Artikel ersetzten/ aktualisieren&lt;br /&gt;
**mit &amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt; &amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt; streichen&lt;br /&gt;
&lt;br /&gt;
Ergänzungen bitte an den &amp;lt;b&amp;gt;Anfang&amp;lt;/b&amp;gt; der entsprechenden Liste schreiben, dann ist der oberste Eintrag auch immer das Aktuellste.&lt;br /&gt;
&lt;br /&gt;
== Passiv ==&lt;br /&gt;
&lt;br /&gt;
siehe auch → Sortimente&lt;br /&gt;
&lt;br /&gt;
=== Widerstände ===&lt;br /&gt;
*[0,0036€ @100] 0603, 1% E24 http://www.aliexpress.com/store/group/0603-SMD-Resistor/1331105_257115023.html, z.B. 0603, 1% 10k http://www.aliexpress.com/store/product/10Kohm-10K-0603-1-1-10W-Chip-Fixed-Resistor-SMD-Resistor-100pcs/1331105_1936842480.html (OK)&lt;br /&gt;
&lt;br /&gt;
=== Kondensatoren ===&lt;br /&gt;
*bitte Ergänzen!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aktiv ==&lt;br /&gt;
&lt;br /&gt;
=== ICs  ===&lt;br /&gt;
&lt;br /&gt;
==== AVR ====&lt;br /&gt;
*[0,886€ @10] ATMEGA8A TQFP32 http://www.ebay.at/itm/270747777418&lt;br /&gt;
*[1,105€ @10] ATMEGA328 http://www.aliexpress.com/item/Free-Shipping-10PCS-ATMEGA328P-AU-ATMEGA328P-ATMEGA328-8-bit-microcontroller-AVR-32-k-flash-memory-QFP/1716671852.html (ausstehend)(14.06.2015)&lt;br /&gt;
&lt;br /&gt;
==== Laderegler ====&lt;br /&gt;
*[0,0506€ @50] LiPo, ltc4054 (OK, https://www.mikrocontroller.net/topic/357076#4129799) (14.06.2015)&lt;br /&gt;
&lt;br /&gt;
==== LDO ====&lt;br /&gt;
*[0,102€ @100] 2,8V xc6206p282mr low dropout, low quiescent current http://de.aliexpress.com/item/100pcs-XC6206P282MR/1417110112.html (OK, https://www.mikrocontroller.net/topic/357076#4129799) (14.06.2015)&lt;br /&gt;
*[0,102€ @100] 3,3V xc6206p332mr low dropout, low quiescent current http://de.aliexpress.com/item/100pcs-XC6206P282MR/1417110112.html (OK, https://www.mikrocontroller.net/topic/357076#4129799) (14.06.2015)&lt;br /&gt;
&lt;br /&gt;
==== (verschiedene) ====&lt;br /&gt;
*[0,0998€ @50] pt8211, DAC, 2 Kanäle http://de.aliexpress.com/item/PT8211-S-PT8211-SOP-8-Analog-Converter-Chips-IC-50Pcs-Lot/32303927730.html&lt;br /&gt;
*[0,0738€ @100] pt8211, DAC, 2 Kanäle http://www.aliexpress.com/item/PT8211-S-SC8211-SOP-8-new-quality-assurance/2042088564.html&lt;br /&gt;
*[0,135€ @100] ap2280, High-Side Switch, 2A, low leakage http://de.aliexpress.com/item/100pcs-AP2280-AP2280-1FMG-AP2280-1FMG-7-QFN-DIODES-100-new-Free-shipping/895259542.html (OK, https://www.mikrocontroller.net/topic/357076#4152784) (14.06.2015)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;[1,089€ @10] LM2577S http://www.ebay.de/itm/130724310847 (10 Stück für 12,33 EUR am 30.11.2013) &amp;lt;/s&amp;gt;(kein Versand nach DE)&lt;br /&gt;
*[0,246€ @10] LM317 http://www.banggood.com/10pcs-LM317T-LM317-Adjustable-Voltage-Regulator-IC-1_2V-To-37V-1_5A-p-80867.html&lt;br /&gt;
*&amp;lt;s&amp;gt;MAX 232 http://www.banggood.com/10pcs-Smd-Max232-RS-232-Interface-IC-Dual-Transceiver-Sop-16-p-74860.html&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LEDs ===&lt;br /&gt;
&lt;br /&gt;
==== THT, 5mm ====&lt;br /&gt;
*[0,0183€ @100] Rot, matt? http://www.ebay.at/itm/130723150892&lt;br /&gt;
*[0,0201€ @100] Grün, matt? http://www.ebay.at/itm/140789002572&lt;br /&gt;
*[0,0177€ @100] Grün, klar http://www.ebay.at/itm/230741038980&lt;br /&gt;
*[0,0355€ @100] Weiss, diffus http://www.ebay.de/itm/290881202957 &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;Rot, klar http://www.ebay.at/itm/330651196119&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SMD ====&lt;br /&gt;
*[0,036€ @100] 0402, rot http://de.aliexpress.com/item/100PC-Lot-SMD-0402-Red-Led-Free-Shipping-WMDZ0402001/32322082945.html (noch nicht bestellt)(14.06.2015)&lt;br /&gt;
*[0,0721€ @100] RGB 0603 common cathode http://de.aliexpress.com/store/product/100PC-Lot-SMD-0603-RGB-Common-Cathode-Led-Free-Shipping-SL011/513417_1583945579.html(noch nicht bestellt)(14.06.2015)&lt;br /&gt;
*[0,0117€ @500] 0603, je 100 rot, grün, blau, weiß, gelb http://www.aliexpress.com/item/5-Values-x100pcs-500pcs-SMD-0603-led-Super-Bright-Red-Green-Blue-Yellow-White-Water-Clear/32263003392.html (OK)(14.06.2015)&lt;br /&gt;
*[0,0302€ @120] 0603, je 20 rot, grün, blau, weiß, gelb, orange http://www.ebay.de/itm/231317818944&lt;br /&gt;
&lt;br /&gt;
=== Filament ===&lt;br /&gt;
[0,413€ @10] warmweis http://de.aliexpress.com/item/10x-1W-COB-LED-Filament-Light-Source-for-LED-Bulb-Globe-Candle-Light-Pure-White-DIY/32299038069.html?recommendVersion=1 (ausstehend)(14.06.2015)&lt;br /&gt;
&lt;br /&gt;
==== Hochleistungs LEDs ====&lt;br /&gt;
*[1,624€ @5] RGB 10W http://www.aliexpress.com/item/RGB-10w-diode-led-chip-for-RGB-10W-LED-Floodlight-Flood-Light-CE-RoHS-Warranty-2/957361239.html&lt;br /&gt;
&lt;br /&gt;
==== WS2811 / WS2812B ====&lt;br /&gt;
*[72,29€ @1] Matrix 16x16 http://www.aliexpress.com/item/1x-16-16-Pixel-WS2812B-LED-Digital-Flexible-Panel-WS2811-Individually-Color-DC5V/1342768354.html&lt;br /&gt;
*[27,97€ @1] Strip 1m 144LEDs http://www.aliexpress.com/item/New-1M-Black-PCB-WS2811-Digital-RGB-LED-Strip-Light-144-Pixel-LEDs-5050-RGB-SMD/1314161448.html&lt;br /&gt;
&lt;br /&gt;
=== Laser ===&lt;br /&gt;
*[0,255€ @10] Modul, red, 5V 5mW 650nm http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=370810846723&amp;amp;clk_rvr_id=553098953077&lt;br /&gt;
*[2,72€ @2] Laser Line Modul, red, 5mW 650nm  http://www.aliexpress.com/item/2pcs-650nm-5mW-Red-Laser-Line-Module-Glass-Lens-Focusable-Industrial-Class/981044377.html&lt;br /&gt;
&lt;br /&gt;
== Batterien und Akkus==&lt;br /&gt;
&lt;br /&gt;
*[0,0872€ @64] AA Batterien http://www.aliexpress.com/item/16-pcs-lot-4-Blister-AA-Battery-Dry-Battery-Super-Heavy-Duty-Battery-1-5V-AA/796248871.html&lt;br /&gt;
*[0,179€ @100] Varta AA Zink Kohle http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=330898341798&amp;amp;clk_rvr_id=553114059335&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;[2,344€ @5] LiPo 3.7V http://www.aliexpress.com/item/Free-Shipping-New-Upgraded-3-7V-380mAh-25C-Lipo-Battery-for-Hubsan-X4-H107-Ladybird-RC/1135685083.html&amp;lt;/s&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;[0,0062€ @500] SG13 http://www.ebay.de/itm/330570767968&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Taster und Schalter ==&lt;br /&gt;
*[0,019€ @100] Taster Standard http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=300916303479&amp;amp;clk_rvr_id=553093896309&lt;br /&gt;
*[0,041@ @30] Taster Standard http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=110957987526&amp;amp;clk_rvr_id=553108801354&lt;br /&gt;
*[0,018€ @100] Taster SMD 3*6*2.5mm http://www.aliexpress.com/item/100PC-Lot-SMT-3X6X2-5-h-MM-Tactile-Tact-Push-Button-Micro-Switch-Momentary-Two-Pin/728175767.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stecker und Buchsen ==&lt;br /&gt;
&lt;br /&gt;
=== Stiftleisten ===&lt;br /&gt;
*[1,37€ @ 1] Stiftleiste &amp;amp; Buchse, 40 pin http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=171038016920&amp;amp;clk_rvr_id=552821867059&lt;br /&gt;
*[0,0628€ @ 200] Stiftleiste, 40 pin http://www.ebay.de/itm/180923079454&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ebay.de/itm/191259020062 (Jumper Wire Steckkontakte zum Selberbasteln von Jumperkabeln)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2mm Bananenstecker ===&lt;br /&gt;
*[0,3103€ @ 100] 2mm Bananensteckerbuchsen http://www.aliexpress.com/snapshot/292664113.html&lt;br /&gt;
&lt;br /&gt;
=== 4mm Bananenstecker ===&lt;br /&gt;
*[1,173€ @ 10] Beweglichem Berührungsschutz http://www.aliexpress.com/item/free-shipping-high-quality-gold-plated-copper-4mm-banana-plugs-stackable-banana-connector-plug-10pcs-lot/1980476943.html (Habe sie damals für 0,81€ /Stk gekauft - mit einer guten Leitung ideal eigene Messaufbauten)&lt;br /&gt;
&lt;br /&gt;
=== Klemmblöcke ===&lt;br /&gt;
*[0,218€ @ 20, 0,0949€ @ 100] 2 Pin 5mm Pitch http://www.aliexpress.com/store/product/20-pcs-2-Pin-Screw-Terminal-Block-Connector-5mm-Pitch-B/929745_1329137726.html (Versandkosten steigen fast linear mit Menge)&lt;br /&gt;
*[0,167€ @ 10] 2 Pin 5mm Pitch http://www.aliexpress.com/item/Free-Shipping-100PCS-2-Pin-Screw-Terminal-Block-Connector-5mm-Pitch-5-08-301-2P-301/1691207109.html&lt;br /&gt;
*[0,0629€ @ 100] 3 Pin 5mm Pitch http://www.aliexpress.com/item/Free-Shipping-100PCS-KF-301-3P-3-Pin-Screw-Terminal-Block-Connector-5-08mm-Pitch/2020916618.html&lt;br /&gt;
&lt;br /&gt;
=== IC-Sockel ===&lt;br /&gt;
&lt;br /&gt;
*[0,0435€ @60] 8-Pin IC Sockel http://www.banggood.com/60pcs-8-Pin-DIP-IC-Sockets-Adaptor-PCB-Solder-Type-Connectors-Plugs-p-908460.html&lt;br /&gt;
*[0,585€ @10] 16-Pin Nullkraftsockelhttp://www.ebay.de/itm/110957986619&lt;br /&gt;
*[0,667€ @10] 28-Pin Nullkraftsockel z.B. für Atmega8 http://www.ebay.de/itm/110950919330&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
*[0,0536€ @100] Mini USB Buchse, THT http://www.aliexpress.com/item//1396423329.html&lt;br /&gt;
*[0,0627€ @200] Mini USB Buchse, THT http://www.aliexpress.com/item//1079961170.html&lt;br /&gt;
*[0,0941€ @100] Mini USB Buchse, THT vertikal http://www.aliexpress.com/item//978229424.html&lt;br /&gt;
*[0,2255€ @120] Mini USP Stecker http://www.aliexpress.com/item//1103210893.html&lt;br /&gt;
*&amp;lt;s&amp;gt;Mini USB 10pin http://www.aliexpress.com/item//1333205473.html&amp;lt;/s&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;USB OTG Kabel http://www.ebay.de/itm/360711370937&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Displays ==&lt;br /&gt;
&lt;br /&gt;
=== LCD ===&lt;br /&gt;
&lt;br /&gt;
==== Text (z.B. HD44780) ====&lt;br /&gt;
&lt;br /&gt;
*[2,31€ @ 1] 16x2 http://www.ebay.at/itm/251049844026&lt;br /&gt;
*[5,30€ @ 1] 16x2 http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=380630838372&amp;amp;clk_rvr_id=552823587951&lt;br /&gt;
*[1,43€ @ 10] 16x2 http://www.aliexpress.com/item/Whole-sale-10PCS-LOT-5V-Character-LCD-Module-Display-LCM-1602-162-16X2-blue-blacklight/817113032.html&lt;br /&gt;
&lt;br /&gt;
*[6,19€ @ 1] 20x4, blaue Beleuchtung http://www.ebay.de/itm/2004-204-20x4-Character-LCD-Display-Module-HD44780-Controller-Blue-Blacklight-/191121960915?pt=LH_DefaultDomain_0&amp;amp;hash=item2c7fc1afd3&lt;br /&gt;
*[5,48€ @ 1] 20x4 http://www.ebay.de/itm/2004-204-20x4-Character-LCD-Display-Module-2004-LCD-Yellow-Green-Blacklight-/400521027796?pt=LH_DefaultDomain_0&amp;amp;hash=item5d40e9e0d4 gelb-grün&lt;br /&gt;
&lt;br /&gt;
==== Grafik ====&lt;br /&gt;
*[11,53€ @ 1] 128x64, KS0108 http://www.ebay.at/itm/170899666269&lt;br /&gt;
*[15,08€ @ 1] 128x64, KS0108 http://www.ebay.at/itm/261069788027&lt;br /&gt;
*[2,03€ @ 1] 84x84 LCD Module White backlight adapter PCB Nokia 5110 for Arduino http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=400488314619&amp;amp;clk_rvr_id=552815797700&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ebay.at/itm/220594603390 (ST7920 Vorsicht*)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TFT (Grafik) ===&lt;br /&gt;
&lt;br /&gt;
==== Touchscreen ====&lt;br /&gt;
*[13,31€ @ 1]  2,8&amp;quot;, 320x240, SPI/8bit/16bit mit ILI9325C http://www.ebay.at/itm/171201078046&lt;br /&gt;
&lt;br /&gt;
=== OLED ===&lt;br /&gt;
&lt;br /&gt;
==== Grafik ====&lt;br /&gt;
&lt;br /&gt;
*[2,956€ @ 5] 0.91&amp;quot;, 128x32, weis, SPI(4wire), lötverbinder http://www.aliexpress.com/store/product/Free-Shipping-5pcs-lot-128x32-Dots-0-91-inch-Graphic-OLED-Display-Screen-SPI-Parallel-I2C/312910_910469757.html (ausstehend)(14.06.2015)&lt;br /&gt;
*[5,01€ @ 1] 0.96&amp;quot;, 128x64, nur Display ohne Platine http://www.ebay.at/itm/160879914739 (kein Versand nach DE)&lt;br /&gt;
*&amp;lt;s&amp;gt;[4,08€ @ 1] 0.96&amp;quot;, 128x64, weiß auf schwarz I2C http://www.ebay.de/itm/0-96-I2C-IIC-SPI-Serien-128X64-OLED-LCD-LED-Display-Modul-fur-Arduino-odule-MN-/331233071057?pt=Wissenschaftliche_Ger%C3%A4te&amp;amp;hash=item4d1f078fd1&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensoren ==&lt;br /&gt;
&lt;br /&gt;
=== Hall-Sensor ===&lt;br /&gt;
*[0,257] 41F/0H41/SH41/SS41F/S41 Bipolar Digital Latch http://www.aliexpress.com/item/41F-0H41-SH41-SS41F-S41-Bipolar-Hall-Element-Sensor-Motor-Sensor-20PCS-Lot/32214679551.html (OK)(14.06.2015)&lt;br /&gt;
&lt;br /&gt;
=== Beschleunigungssensor ===&lt;br /&gt;
*[0,434€ @10] BMA250, Chip, 2x2x1mm http://de.aliexpress.com/item/10PCS-X-100-New-10-bit-digital-triaxial-acceleration-sensor-BMA250/2050058199.html (noch nicht bestellt)(14.06.2015)&lt;br /&gt;
*[0,333€ @10] ADXL345, Chip, 5x3x1mm http://www.aliexpress.com/item/ADXL345BCCZ-ADXL345-345B-LGA14-New-hot/32330279812.html (ausstehend)(14.06.2015)&lt;br /&gt;
&lt;br /&gt;
===  Gyro (&amp;amp; Beschleunigungssensor) ===&lt;br /&gt;
*[1,30€ @1] MPU 6050, Chip http://www.aliexpress.com/item/MPU-6050/32326153531.html (noch nicht bestellt)(14.06.2015)&lt;br /&gt;
*[1,598€ @5] MPU 6050, Modul inkl. Header http://www.aliexpress.com/item/FREE-SHIPPING-MPU-6050-MPU6050-Module-3-Axis-analog-gyro-sensors-3-Axis-Accelerometer-Module-GY/1086775775.html&lt;br /&gt;
*[2,39€ @1] MPU 6050, Modul inkl. Header http://www.ebay.de/itm/371027578328&lt;br /&gt;
&lt;br /&gt;
=== Infrared PIR Motion ===&lt;br /&gt;
*&amp;lt;s&amp;gt;[1,10€ @5 ] http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=130824723088&amp;amp;clk_rvr_id=553097766279&amp;lt;/s&amp;gt;(Kein Versand nach DE)&lt;br /&gt;
*[1,93€ @1] http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=370671048122&amp;amp;clk_rvr_id=553103039249&lt;br /&gt;
&lt;br /&gt;
=== Ultraschall ===&lt;br /&gt;
*[0,90€ @10] HC-SR04 Modul http://www.aliexpress.com/item/Free-shipping-HC-SR04-HCSR04-Ultrasonic-module-ultrasonic-ranging-modules-ranging-module-Ultrasonic-Sensors-in-stock/610440655.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arduino ==&lt;br /&gt;
*[4,68€ @1] Arduino UNO R3 http://www.ebay.com/itm/UNO-R3-ATmega328P-USB-Development-Board-CH340G-for-Arduino-with-USB-Cable-/191491260883?pt=LH_DefaultDomain_0&amp;amp;hash=item2c95c4c1d3&lt;br /&gt;
*[5,40€ @1] Arduino BTE Robot (mit Ethernet) http://www.aliexpress.com/item/Free-shipping-BTE-ROBOT-Main-Control-Board-Compatible-with-Arduino-duemilanove-2009-ATMEGA328USB-cable/587638761.html&lt;br /&gt;
*&amp;lt;s&amp;gt;Arduino Mega 2560 http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=200929452071&amp;amp;clk_rvr_id=552818482186&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arduino Mini/Pro Clones (Breadboard, TQFP ATMEGA328) ab ca 7 EUR inkl. &lt;br /&gt;
Versand&lt;br /&gt;
*[3,87€ @1] Arduino Nano (ATMEGA328, Resettaster, kein USB) http://www.ebay.de/itm/221406597673&lt;br /&gt;
*[6,33€ @1] Tosduino Nano (ATMEGA328, USB) http://www.ebay.at/itm/230799921826 &lt;br /&gt;
*[1,824€ @5] Arduino Pro Mini (ATMEGA168, Resettaster, kein USB) http://www.aliexpress.com/item/5pcs-lot-Pro-Mini-328-Mini-ATMEGA328-5V-16MHz-Free-Shipping-Dropshipping/1275111458.html (ATMEGA328, Resettaster, kein USB) &lt;br /&gt;
*[5,42€ @1] Arduino Pro Mini (ATMEGA328, Resettaster, kein USB) + CP2102 USB&amp;lt;&amp;gt;USART http://www.aliexpress.com&lt;br /&gt;
&lt;br /&gt;
Chip-Only ATMEGA328 mit Arduino-Bootloader ab ca 3 EUR inkl. Versand:&lt;br /&gt;
*[1,96€ @1] http://www.ebay.at/itm/300726927158&lt;br /&gt;
*[1,775€ @1] http://www.ebay.at/itm/140810128013&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Module ==&lt;br /&gt;
Hierrunter fällt alles, was nicht ein bloßer Adapter für ein (SMD) Bauteil ist.&lt;br /&gt;
&lt;br /&gt;
=== Stromversorgung ===&lt;br /&gt;
&lt;br /&gt;
==== Step-Down Schaltregler-Module ====&lt;br /&gt;
*[0,797€ @10] MP2307 3A KIS-3R33S http://www.ebay.de/itm/270762820456&lt;br /&gt;
*[1,18€ @1] LM2596 2A http://www.ebay.at/itm/330646303458&lt;br /&gt;
*[3,54€ @1] LM2596 2A http://www.ebay.at/itm/130729707683&lt;br /&gt;
*[2,35€ @1] LM2596HVS 45V Input http://www.ebay.at/itm/290948471801&lt;br /&gt;
*[2,094€ @5] LM2596HVS 45V Input http://www.ebay.at/itm/290948472404&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ebay.de/itm/190698451181 KIM-055L, 9-40V auf 5V, 5A  (10 @ ca. 11,50 EUR)&amp;lt;/s&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ebay.de/itm/261016126639 KIM-3R35, 9-40V auf 3.3V, 5A (10 @ ca. 6 EUR)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Step-Up Schaltregler-Module ====&lt;br /&gt;
*[1,82€ @1] LM2577 http://www.ebay.at/itm/170813838776&lt;br /&gt;
*[2,08€ @1] LM2577 http://www.ebay.at/itm/140773758954&lt;br /&gt;
*[2,09€ @1] LM2577 http://www.ebay.at/itm/180957599819&lt;br /&gt;
&lt;br /&gt;
=== Voltmeter ===&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.aliexpress.com/snapshot/291462038.html&amp;lt;/s&amp;gt;&lt;br /&gt;
*USB Strom-/Spannungsanzeige: siehe Bereich USB&lt;br /&gt;
&lt;br /&gt;
=== Drahtlos ===&lt;br /&gt;
&lt;br /&gt;
==== Funk ====&lt;br /&gt;
*[7,13€ @2] RFM69HW-433 http://www.aliexpress.com/snapshot/294138133.html&lt;br /&gt;
*[7,13€ @2] RFM69HW-868 http://www.aliexpress.com/snapshot/294138134.html&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth ====&lt;br /&gt;
*[5,373€ @1] BMX-03A/B http://www.fasttech.com/products/0/10005943/1453902-bluetooth-wireless-serial-port-master-slave-module&lt;br /&gt;
&lt;br /&gt;
==== 2,4 GHz ====&lt;br /&gt;
*[3,90€ @1] STC15F204 + NRF24L01 http://www.ebay.de/itm/181051362897&lt;br /&gt;
*[5,82€ @1] NRF24L01 + PA + LNA http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=121118879770&amp;amp;clk_rvr_id=552817485616&lt;br /&gt;
*[2,00€ @1] SMA Antenne http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=400505927677&amp;amp;clk_rvr_id=552827828280&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;NRF24L01 2.4GHz RF Wireless Transceiver Module for Arduino http://www.ebay.de/itm/170838373171 (Bei kostenlosen Versand gibt es keine Tracking-Nummer!)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GSM ====&lt;br /&gt;
*[17,74€ @1] GSM SIEMENS TC35 SMS Module Board RS232 UART http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=270851051007&amp;amp;clk_rvr_id=553098865478&lt;br /&gt;
&lt;br /&gt;
==== GPS ====&lt;br /&gt;
*[9,48€ @1] Ublox GPS Module with Antenna VK16U6 http://www.aliexpress.com/item/VK16U6-ublox-GPS-Module-with-Antenna-TTL-Signal-Output-FZ0517-Free-Shipping-Dropshipping/922483051.html&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
&lt;br /&gt;
==== USB-TTL-UART ====&lt;br /&gt;
*[0,88€ @1] PL2303HX http://&lt;br /&gt;
www.ebay.at/itm/180953299346&lt;br /&gt;
*[1,516€ @10] PL2303 USB Kabel http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=261210033859&amp;amp;clk_rvr_id=553102953867&lt;br /&gt;
*[0,546€ @20] PL2303 http://www.aliexpress.com/item//969841785.html (PL2303, 60ct/Stück, 10 Stück pro Pack)&lt;br /&gt;
&lt;br /&gt;
*[1,77€ @1] CP2102 http://www.ebay.at/itm/170895253016&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Messgeräte &amp;amp; Entwicklung ==&lt;br /&gt;
&lt;br /&gt;
=== Breadboard ===&lt;br /&gt;
*&amp;lt;s&amp;gt;Breadboard Power Supply http://www.ebay.com/itm/New-1PCS-MB-102-Breadboard-Power-Supply-Module-3-3V-5V-For-Arduino-Board-EP98-/111146951040?pt=LH_DefaultDomain_0&amp;amp;hash=item19e0dfe180&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programmer ===&lt;br /&gt;
*&amp;lt;s&amp;gt;http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=301000812018&amp;amp;clk_rvr_id=553107983302&amp;lt;/s&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.aliexpress.com/store/group/Programmer-Emulator/213957_211836576.html&amp;lt;/s&amp;gt;(Verweist auf Store)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;Adapter für ISP 10pin-Programmer auf 6pin-Anschluss http://www.ebay.de/itm/281219165940&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logic Analyzer ===&lt;br /&gt;
*[39,79€ @1] Clone des logic16 von Saleae http://www.aliexpress.com/item/1pcs-lot-Free-shipping-New-Arrival-Saleae-Logic16-saleae16-USB-Logic-Analyzer-100M-16CH-best-quality/667671473.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fertiggeräte ==&lt;br /&gt;
&lt;br /&gt;
=== Taschenlampe ===&lt;br /&gt;
*[5,295€ @2] 7W 450LM CREE Q5 LED http://www.aliexpress.com/item/Mini-LED-Torch-7W-450LM-CREE-Q5-LED-Flashlight-Adjustable-Focus-Zoom-flash-Light-Lamp-free/913244541.html&lt;br /&gt;
*&amp;lt;s&amp;gt;[3,90€ @1] 600 LM CREE LED http://www.ebay.de/itm/111185764169?ssPageName=STRK:MEWNX:IT&amp;amp;_trksid=p3984.m1497.l2649 (nur ein Exemplar pro Monat bestellbar)&amp;lt;/s&amp;gt;(Kein Versand nach Deutschland)&lt;br /&gt;
&lt;br /&gt;
=== Kamera ===&lt;br /&gt;
*[39,04€ @1] Mini DVR 808 #16 V2 - 720P http://www.ebay.de/itm/180937263580&lt;br /&gt;
*[61,22€ @1] Mobius Action Camera - 1080P http://www.ebay.de/itm/221259368601 - [http://www.rcgroups.com/forums/showthread.php?t=1904559 Infothread bei rcgroups.com]&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
*&amp;lt;s&amp;gt;Soundkarte http://www.ebay.de/itm/171317742680&amp;lt;/s&amp;gt; &lt;br /&gt;
*&amp;lt;s&amp;gt;Strom-/Spannungsanzeige http://www.ebay.de/itm/141028948395 (hkiron-shop 2,34 EUR inkl. Versand am 30.11.2013)&amp;lt;/s&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;Strom-/Spannungsanzeige http://www.ebay.de/itm/400616343237 (befdimall 2,27 EUR inkl. Versand)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Labor / Werkstattzubehör ==&lt;br /&gt;
&lt;br /&gt;
=== Platinen ===&lt;br /&gt;
*[1,065€ @10] Lochraster, 50x70mm, doppelseitig http://www.ebay.de/itm/10x-Double-Side-Prototype-PCB-Universal-Board-50x70mm-/130686265627?clk_rvr_id=552815576470&lt;br /&gt;
*[0,6325€ @20] Lochraster, je 5mal 5x7 4x6 3x7 2x8cm, doppelseitig http://www.ebay.de/itm/20x-Double-Side-Prototype-PCB-Board-5x7-4x6-3x7-2x8CM-/130531103896?clk_rvr_id=552822429042&lt;br /&gt;
&lt;br /&gt;
Ich habe aus Sammelbestellungen immer wieder mal FR4 Lochrasterplatinen... Fragen kostet nichts ;)&lt;br /&gt;
*http://www.mikrocontroller.net/topic/311103&lt;br /&gt;
&lt;br /&gt;
=== Sortimente ===&lt;br /&gt;
Kondensatoren:&lt;br /&gt;
*[0,0088€ @320] 0805 32 Werte a 10 pcs. http://www.banggood.com/Wholesale-0805-SMD-32-Value-Chip-Capacitor-Assortment-Kit-Pack-320pcs-p-53344.html&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ebay.de/itm/181146487242&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widerstände &amp;amp; Kondensatoren: &lt;br /&gt;
*[0,0021€ @7000] 0805, 50 Widerstandswerte a 100 pcs. &amp;amp; 30 Kondensatorwerte a 50 pcs. &amp;amp; 1uF + 100nF je 250 pcs. http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=350855175041&amp;amp;clk_rvr_id=553088669397&lt;br /&gt;
&lt;br /&gt;
Zener-Dioden:&lt;br /&gt;
*[0.0160€ @300] THT, 30 Werte a 10 pcs. http://www.banggood.com/300pcs-2V-39V-30-Values-1-Or-2W-0_5W-Zener-Diode-Assorted-Kit-p-87725.html (30 Werte, je 10 Stück)&lt;br /&gt;
&lt;br /&gt;
Sortiment bunte Schrumfschläuche:&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.aliexpress.com/snapshot/292198344.html&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kunststoff Boxen ===&lt;br /&gt;
*[0,33€ @20] http://www.ebay.de/itm/20-pcs-Components-Part-Laboratory-Storage-Electronic-SMT-SMD-Box-SMT-Anti-Static-/380740028506.,&lt;br /&gt;
*[0,3156€ @50] http://www.aliexpress.com/item/1-IC-original-box-SMD-chip-components-interlocking-parts-can-patch-box-Anti-static-Black-Orange/1322069794.html&lt;br /&gt;
*[0,2877€ @100] http://www.aliexpress.com/item/smd-storage-box-SMA-SMT-component-container-storage-boxes-electronic-case-kit-IC-boxes-100pcs-lot/1306857575.html&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=170770334385&amp;amp;clk_rvr_id=553094538423&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== KITs ==&lt;br /&gt;
&lt;br /&gt;
*[2,98€ @1] Würfel http://www.ebay.de/itm/251547950374?clk_rvr_id=663858522537&lt;br /&gt;
*[3,24€ @1] Lautstärke Indikator http://www.ebay.de/itm/231248897392?clk_rvr_id=663856836100&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;s&amp;gt;Funkmikrofon http://www.ebay.de/itm/281352352622?clk_rvr_id=663851860768&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GESUCHT ==&lt;br /&gt;
&lt;br /&gt;
Ich weis nicht ob es euch genau so geht, aber ich lege mir gerne ein paar Standardbauteile auf Lager, die man dann für spätere Projekte mit wenig aufwand verwenden kann. Dazu sollten die natürlich möglichst günstig sein. Falls du (nach ausgibiger Suche) noch kein entsprechendes Teil gefunden hast, kannst du es hier notieren und hoffen, das jemand zufällig den richtigen Tipp hat. (Das ist nicht als Such-Service gadacht, bitte mit Verstand nutzen sonst ist dieser Teil schnell wieder weg).&lt;br /&gt;
&lt;br /&gt;
*flache (&amp;amp; kleine) LiPo Akkus (&amp;lt;3mm), Kapazität &amp;lt;100mAh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* zu dem angebotenen Preis kommen z.b. noch&lt;br /&gt;
** Kreditkarten Auslandszuschläge (etwa 1 - 2% je nach Karte)&lt;br /&gt;
** Zoll und Einfuhrumsatzsteuer, siehe [http://www.zoll.de/DE/Fachthemen/Steuern/Einfuhrumsatzsteuer/einfuhrumsatzsteuer_node.html Zoll-Homepage]. Dabei werden die Versandkosten mit eingerechnet.&amp;lt;br&amp;gt;Allerdings verzichtet der Zoll i.d.R. bis ca. 26€ auf die Einfuhrumsatzsteuer, weil der Betrag der Einfuhrumsatzsteuer unter 5€ liegt.&lt;br /&gt;
** Zollabfertigungskosten des Paketdienstes.&lt;br /&gt;
** Siehe [[Zoll und Abgaben]]&lt;br /&gt;
&lt;br /&gt;
* Die angegeben Anzahl pro Lot genau prüfen oft werden z.B 1*USB-Kabel und 1*Arduino als 2 PCS/Lot beschrieben.&lt;br /&gt;
&lt;br /&gt;
* Rücksendungen gehen zu Lasten des Kunden, das ist aufgrund der Versandkosten meist nicht wirtschaftlich.&lt;br /&gt;
&lt;br /&gt;
* Natürlich wird ein in China bestellter Arduino mit dem Aufdruck &amp;quot;Made in Italy&amp;quot; nicht in Italien hergestellt.&lt;br /&gt;
&lt;br /&gt;
* Ein Blick auf die Bewertung des Händlers ist dringend zu empfehlen. Vorsicht bei solchen mit wenig Punkten oder Negativbewertungen. Positiv wenn Bestellungen für den gewünschten Artikel (z.B. in Transaction History &amp;amp; Feedback) schon mehrfach gut bewertet wurden.&lt;br /&gt;
&lt;br /&gt;
* Die mitgeteilte Trackingnummer &lt;br /&gt;
** schnellstmöglich prüfen, erscheint meist nach 2-3 Tagen auf http://intmail.183.com.cn/icc-itemtraceen.jsp  &lt;br /&gt;
** Falls das Zielland nicht &amp;quot;DE&amp;quot; ist, sofort reklamieren&lt;br /&gt;
** Falls nach ca 5 Tagen nicht vorhanden, reklamieren &lt;br /&gt;
** Später dann komfortabel den Status aller erwarteten Sendungen anzeigen bei https://www.paket.de&lt;br /&gt;
&lt;br /&gt;
* Beim Artikelstandort ist Vorsicht geboten: Oftmals ist Frankfurt o.d.gl. angegeben, die Ware wird aber tatsächlich aus China gesendet. Hier hilft ein Vergleich der Lieferzeiten.&lt;br /&gt;
** Bei Ebay sind Reklamationen über einen falschen Artikelstandort recht wenig erfolgsversprechend, allerdings funktioniert der Verkäuferschutz bei nicht-einhalten der oft geschönten Lieferzeiten recht gut. &lt;br /&gt;
&lt;br /&gt;
* Zertifikaten und Prüfsiegeln ist nicht zu trauen. Das CE wird oftmals nur aufgeklebt, die Ware erfüllt oftmals die Normen nicht ansatzweise. Auch Siegel wie &amp;quot;geprüfte Sicherheit (GS)&amp;quot; werden gerne ohne die entsprechenden Prüfungen aufgedruckt.&lt;br /&gt;
&lt;br /&gt;
* Viele der Schnäppchen bekommt man auch direkt in Deutschland, dann natürlich nicht zu den genannten Preisen aber wesentlich schneller. In der Regel handelt es sich um die gleichen Artikel. Ein Shop der ausschließlich Module vertreibt ist unter http://www.hecomps.de zu finden. Auch andere Anbieter nehmen einem die Einfuhr ab, wer also nicht wochenlang warten will sollte ruhig in den deutschen Shops suchen.&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_LCD&amp;diff=88324</id>
		<title>AVR-Tutorial: LCD</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_LCD&amp;diff=88324"/>
		<updated>2015-04-18T20:54:50Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Anschluss an den Controller */ Wiki-Link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kaum ein elektronisches Gerät kommt heutzutage noch ohne ein LCD daher. Ist doch auch praktisch, Informationen im Klartext anzeigen zu können, ohne irgendwelche LEDs blinken zu lassen. Kein Wunder also, dass die häufigste Frage in Mikrocontroller-Foren ist: &amp;quot;Wie kann ich ein LCD anschließen?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Das LCD und sein Controller==&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-LCDs verwenden den Controller [[HD44780|&#039;&#039;&#039;HD44780&#039;&#039;&#039;]] oder einen kompatiblen (z.&amp;amp;nbsp;B. KS0070) und haben 14 oder 16 Pins.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Pinbelegung ist meist (Ausnahme z.&amp;amp;nbsp;B. TC1602E (Pollin 120420): V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt; und V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; vertauscht) folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ACHTUNG: Es gibt Displays mit abweichender Anschluss-Belegung, falscher Anschluss kann zur Zerstörung führen! Daher immer das zugehörige Datenblatt zu Rate ziehen!&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Einzelheiten unter [http://www.mikrocontroller.net/articles/HD44780 Artikel zum Controller HD44780]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! Pin # || Bezeichnung || Funktion&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; (selten: V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt;)&lt;br /&gt;
||  GND (selten: +5 V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  2&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt; (selten: V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt;)&lt;br /&gt;
||  +5 V (selten: GND)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  3&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt;, V0, V5&lt;br /&gt;
||  Kontrastspannung (-5 V / 0 V bis 5 V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  4&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  RS&lt;br /&gt;
||  Register Select (0=Befehl/Status 1=Daten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  5&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  RW&lt;br /&gt;
||  1=Read 0=Write&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  6&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  E&lt;br /&gt;
||  0=Disable 1=Enable&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  7&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB0&lt;br /&gt;
||  Datenbit 0&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  8&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB1&lt;br /&gt;
||  Datenbit 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  9&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB2&lt;br /&gt;
||  Datenbit 2&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  10&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB3&lt;br /&gt;
||  Datenbit 3&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  11&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB4&lt;br /&gt;
||  Datenbit 4&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  12&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB5&lt;br /&gt;
||  Datenbit 5&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  13&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB6&lt;br /&gt;
||  Datenbit 6&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  14&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB7&lt;br /&gt;
||  Datenbit 7&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  15&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  A&lt;br /&gt;
||  LED-Beleuchtung, meist Anode&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  16&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  K&lt;br /&gt;
||  LED-Beleuchtung, meist Kathode&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Unbedingt von der richtigen Seite zu zählen anfangen! Meistens ist das Pin1-Pad eckig oder daneben eine kleine 1 auf der LCD-Platine, ansonsten im Datenblatt nachschauen.&lt;br /&gt;
&lt;br /&gt;
Bei der DIL-Version (2x7, 2x8 Kontakte) auch darauf achten, auf welcher Platinen-Seite der Stecker montiert wird: auf der falschen (meist hinteren) Seite sind dann die Flachbandleitungen 1 und 2, 3 und 4  usw. vertauscht. Das kann man kompensieren, indem man es auf der anderen Kabelseite genauso permutiert oder es auf dem Layout bewusst so legt (Stecker auf der Bottom-Seite plazieren). Man kann es NICHT kompensieren, indem man das Flachbandkabel auf der anderen Seite in den Stecker führt.&lt;br /&gt;
&lt;br /&gt;
Bei LCDs mit 16-poligem Anschluss sind die beiden letzten Pins für die Hintergrundbeleuchtung reserviert. Hier unbedingt das Datenblatt zu Rate ziehen. Die beiden Anschlüsse sind je nach Hersteller verdreht beschaltet. Falls kein Datenblatt vorliegt, kann man mit einem Durchgangsprüfer feststellen, welcher Anschluss mit Masse (GND) verbunden ist.&lt;br /&gt;
&lt;br /&gt;
V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; wird ganz einfach an GND angeschlossen und V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;=V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt; an +5 V. V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt; = V0 = V5 kann man testweise auch an GND legen. Wenn das LCD dann zu dunkel sein sollte, muss man ein 10k&amp;amp;Omega;-Potentiometer zwischen GND und 5 V schalten, mit dem Schleifer an V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt;. Meist kann man den +5 V-Anschluss am Poti weglassen, da im Display ein Pull-up-Widerstand ist:&lt;br /&gt;
&lt;br /&gt;
[[Bild:LCD_Vee.gif|framed|center| Gewinnung der Kontrastspannung]]&lt;br /&gt;
&lt;br /&gt;
Wenn der Kontrast zu schwach sein sollte (z.B. bei tiefen Temperaturen oder bei Betrieb mit 3.3V), kann man anstelle von GND eine negative Spannung ans Kontrast-Poti legen. Diese kann bis -5 V gehen und kann leicht aus einem Timerpin des µC, einem Widerstand, zwei Dioden und zwei Kondensatoren erzeugt werden. So wird auch ein digital einstellbarer Kontrast mittels PWM ermöglicht. ACHTUNG: Es gibt jedoch auch Displaycontroller wie den Epson SED1278, die zwar Software-kompatibel sind, aber keine negativen Kontrastspannung verkraften. Wird der Kontrast also bei negativer Spannung schlechter oder geht das Display ganz aus, ist davon auszugehen, dass der Controller diesen Betriebsmodus nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei verschiedene Möglichkeiten zur Ansteuerung eines solchen Displays: den &#039;&#039;&#039;8-Bit-&#039;&#039;&#039; und den &#039;&#039;&#039;4-Bit-&#039;&#039;&#039;Modus.&lt;br /&gt;
* Für den &#039;&#039;&#039;8-Bit-Modus&#039;&#039;&#039; werden (wie der Name schon sagt) alle acht Datenleitungen zur Ansteuerung verwendet, somit kann durch einen Zugriff immer ein ganzes Byte übertragen werden.&lt;br /&gt;
* Der &#039;&#039;&#039;4-Bit-Modus&#039;&#039;&#039; verwendet nur die oberen vier Datenleitungen (&#039;&#039;&#039;DB4-DB7&#039;&#039;&#039;). Um ein Byte zu übertragen, braucht man somit zwei Zugriffe, wobei zuerst das höherwertige &#039;&#039;&#039;&amp;quot;Nibble&amp;quot;&#039;&#039;&#039; (= 4 Bits), also Bit 4 bis Bit 7 übertragen wird und dann das niederwertige, also Bit 0 bis Bit 3. Die unteren Datenleitungen des LCDs, die beim Lesezyklus Ausgänge sind, lässt man offen (siehe Datasheets, z.&amp;amp;nbsp;B. vom KS0070).&lt;br /&gt;
&lt;br /&gt;
Der 4-Bit-Modus hat den Vorteil, dass man 4 IO-Pins weniger benötigt als beim 8-Bit-Modus. 6 bzw. 7 Pins (eines Portes) reichen aus.&lt;br /&gt;
&lt;br /&gt;
Neben den vier Datenleitungen (DB4, DB5, DB6 und DB7) werden noch die Anschlüsse &#039;&#039;&#039;RS&#039;&#039;&#039;, &#039;&#039;&#039;RW&#039;&#039;&#039; und &#039;&#039;&#039;E&#039;&#039;&#039; benötigt. &lt;br /&gt;
&lt;br /&gt;
* Über &#039;&#039;&#039;RS&#039;&#039;&#039; wird ausgewählt, ob man einen Befehl oder ein Datenbyte an das LCD schicken möchte. Beim Schreiben gilt: ist RS Low, dann wird das ankommende Byte als Befehl interpretiert; Ist RS high, wird das Byte auf dem LCD angezeigt (genauer: ins Data-Register geschrieben, kann auch für den CG bestimmt sein). &lt;br /&gt;
* &#039;&#039;&#039;RW&#039;&#039;&#039; legt fest, ob geschrieben oder gelesen werden soll. High bedeutet lesen, low bedeutet schreiben. Wenn man RW auf lesen einstellt und RS auf Befehl, dann kann man das &#039;&#039;&#039;Busy-Flag&#039;&#039;&#039; an DB7 lesen, das anzeigt, ob das LCD den vorhergehenden Befehl fertig verarbeitet hat. Ist RS auf Daten eingestellt, dann kann man z.&amp;amp;nbsp;B. den Inhalt des Displays lesen - was jedoch nur in den wenigsten Fällen Sinn macht. Deshalb kann man RW dauerhaft auf low lassen (= an GND anschließen), so dass man noch ein IO-Pin am Controller einspart. Der Nachteil ist, dass man dann das Busy-Flag nicht lesen kann, weswegen man nach jedem Befehl ca. 50 µs (beim Return Home 2 ms, beim Clear Display 20 ms) warten sollte, um dem LCD Zeit zum Ausführen des Befehls zu geben. Dummerweise schwankt die Ausführungszeit von Display zu Display und ist auch von der Betriebsspannung abhängig. Für professionellere Sachen also lieber den IO-Pin opfern und Busy abfragen.&lt;br /&gt;
* Der &#039;&#039;&#039;E&#039;&#039;&#039; Anschluss schließlich signalisiert dem LCD, dass die übrigen Datenleitungen jetzt korrekte Pegel angenommen haben und es die gewünschten Daten von den Datenleitungen bzw. Kommandos von den Datenleitungen übernehmen kann. Beim Lesen gibt das Display die Daten / Status so lange aus, wie E high ist. Beim Schreiben übernimmt das Display die Daten mit der fallenden Flanke.&lt;br /&gt;
&lt;br /&gt;
== Anschluss an den Controller ==&lt;br /&gt;
&lt;br /&gt;
Jetzt, da wir wissen, welche Anschlüsse das LCD benötigt, können wir das LCD mit dem Mikrocontroller verbinden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ACHTUNG: Es gibt Displays mit abweichender Anschluss-Belegung (z. B. TC1602E (Pollin 120420): Vdd und Vss vertauscht), falscher Anschluss kann zur Zerstörung führen! Daher immer das zugehörige Datenblatt zu Rate ziehen.&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Einzelheiten unter [[HD44780|Artikel zum Controller HD44780]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!Pinnummer&amp;lt;BR&amp;gt;LCD || Bezeichnung || Anschluss&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |1 || V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; || GND (beim TC1602E: V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |2 || V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt; || +5 V (beim TC1602E: Gnd)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3 || V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt; || GND , [[Potentiometer | Poti]] oder [[Pulsweitenmodulation | PWM]] am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |4 || RS || PD4 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |5 || RW || GND &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |6 || E || PD5 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |7 || DB0 || nicht angeschlossen &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |8 || DB1 || nicht angeschlossen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |9 || DB2 || nicht angeschlossen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |10 || DB3 || nicht angeschlossen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |11 || DB4 || PD0 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |12 || DB5 || PD1 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |13 || DB6 || PD2 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |14 || DB7 || PD3 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |15 || A || Vorsicht! Meistens nicht direkt an +5 V abschließbar,&amp;lt;br /&amp;gt; sondern nur über einen Vorwiderstand, der an die Daten&amp;lt;br /&amp;gt;der Hintergrundbeleuchtung angepasst werden muss.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |16 || K || GND&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok. Alles ist verbunden. Wenn man jetzt den Strom einschaltet, sollten ein oder zwei schwarze Balken auf dem Display angezeigt werden. &lt;br /&gt;
&lt;br /&gt;
Doch wie bekommt man jetzt die Befehle und Daten in das Display? Dazu muss das LCD initialisiert werden und man muss Befehle (Commands) und seine Daten an das LCD senden. Weil die Initialisierung ein Spezialfall der Übertragung von Befehlen ist, im Folgenden zunächst die Erklärung für die Übertragung von Werten an das LCD.&lt;br /&gt;
&lt;br /&gt;
== Ansteuerung des LCDs im 4-Bit-Modus ==&lt;br /&gt;
&lt;br /&gt;
Um ein Byte zu übertragen, muss man es erstmal in die beiden Nibbles zerlegen, die getrennt übertragen werden. Da das obere Nibble (Bit 4 - Bit 7) als erstes übertragen wird, die 4 Datenleitungen jedoch an die vier unteren Bits des Port D angeschlossen sind, muss man die beiden Nibbles des zu übertragenden Bytes erstmal vertauschen. Der AVR kennt dazu praktischerweise einen eigenen Befehl: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           swap r16               ; vertauscht die beiden Nibbles von r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus 0b00100101 wird so z.&amp;amp;nbsp;B. 0b01010010. &lt;br /&gt;
&lt;br /&gt;
Jetzt sind die Bits für die erste Phase der Übertragung an der richtigen Stelle. Trotzdem wollen wir das Ergebnis nicht einfach so mit &#039;&#039;&#039;out PORTD, r16&#039;&#039;&#039; an den Port geben. Um die Hälfte des Bytes, die jetzt nicht an die Datenleitungen des LCDs gegeben wird auf null zu setzen, verwendet man folgenden Befehl: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           andi r16, 0b00001111   ; Nur die vier unteren (mit 1 markierten)&lt;br /&gt;
                                  ; Bits werden übernommen, alle anderen werden null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also: Das obere Nibble wird erst mit dem unteren vertauscht, damit es unten ist. Dann wird das obere (das wir jetzt noch nicht brauchen) auf null gesetzt. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir dem LCD noch mitteilen, ob wir Daten oder Befehle senden wollen. Das machen wir, indem wir das Bit, an dem RS angeschlossen ist (PD4), auf 0 (Befehl senden) oder auf 1 (Daten senden) setzen. Um ein Bit in einem normalen Register zu setzen, gibt es den Befehl sbr (Set Bits in Register). Dieser Befehl unterscheidet sich jedoch von sbi (das nur für IO-Register gilt) dadurch, dass man nicht die Nummer des zu setzenden Bits angibt, sondern eine Bitmaske. Das geht so: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           sbr r16, 0b00010000     ; Bit 4 setzen, alle anderen Bits bleiben gleich&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RS ist an PD4 angeschlossen. Wenn wir r16 an den Port D ausgeben, ist RS jetzt also high und das LCD erwartet Daten anstatt von Befehlen. &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis können wir jetzt endlich direkt an den Port D übergeben: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           out PORTD, r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich muss vorher der Port D auf Ausgang geschaltet werden, indem man 0xFF ins Datenrichtungsregister DDRD schreibt. &lt;br /&gt;
&lt;br /&gt;
Um dem LCD zu signalisieren, dass es das an den Datenleitungen anliegende Nibble übernehmen kann, wird die E-Leitung (Enable, an PD5 angeschlossen) auf high und kurz darauf wieder auf low gesetzt. Ein Puls an dieser Leitung teilt also dem LCD mit, das die restlichen Leitungen jetzt ihren vom Programm gewollten Pegel eingenommen haben und gültig sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           sbi PORTD, 5              ; Enable high&lt;br /&gt;
           nop                       ; 3 Taktzyklen warten (&amp;quot;nop&amp;quot; = nichts tun)&lt;br /&gt;
           nop&lt;br /&gt;
           nop&lt;br /&gt;
           cbi PORTD, 5              ; Enable wieder low&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die eine Hälfte des Bytes wäre damit geschafft! Die andere Hälfte kommt direkt hinterher: Alles, was an der obenstehenden Vorgehensweise geändert werden muss, ist, das &amp;quot;swap&amp;quot; (Vertauschen der beiden Nibbles) wegzulassen.&lt;br /&gt;
&lt;br /&gt;
== Initialisierung des Displays ==&lt;br /&gt;
&lt;br /&gt;
Allerdings gibt es noch ein Problem. Wenn ein LCD eingeschaltet wird, dann läuft es zunächst im 8 Bit Modus. Irgendwie muss das Display initialisiert und auf den 4 Bit Modus umgeschaltet werden, und zwar nur mit den 4 zur Verfügung stehenden Datenleitungen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn es Probleme gibt, dann meistens an diesem Punkt. Die &amp;quot;kompatiblen&amp;quot; Kontroller sind gelegentlich doch nicht 100% identisch. Es lohnt sich, das Datenblatt (siehe Weblinks im Artikel [[LCD]]) genau zu lesen, in welcher Reihenfolge und mit welchen Abständen (Delays) die Initialisierungbefehle gesendet werden. Eine weitere Hilfe können Ansteuerungsbeispiele in Forenbeiträgen geben z.&amp;amp;nbsp;B.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/79609#664268 (A) KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
&lt;br /&gt;
=== Initialisierung für 4 Bit Modus ===&lt;br /&gt;
&lt;br /&gt;
Achtung: Im Folgenden sind alle Bytes aus Sicht des LCD-Kontrollers angegeben! Da LCD-seitig nur die Leitungen DB4 - DB7 verwendet werden, ist daher immer nur das höherwertige Nibble gültig. Durch die Art der Verschaltung (DB4 - DB7 wurde auf dem PORT an PD0 bis PD3 angeschlossen) ergibt sich eine Verschiebung, so dass das am Kontroller auszugebende Byte nibblemässig vertauscht ist!&lt;br /&gt;
&lt;br /&gt;
Die Sequenz, aus Sicht des Kontrollers, sieht so aus:&lt;br /&gt;
&lt;br /&gt;
* Nach dem Anlegen der Betriebsspannung muss eine Zeit von mindestens ca. 15ms gewartet werden, um dem LCD-Kontroller Zeit für seine eigene Initialisierung zu geben&lt;br /&gt;
* $3 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 4.1ms warten&lt;br /&gt;
* $3 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 100µs warten&lt;br /&gt;
* $3 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* $2 ins Steuerregister schreiben (RS = 0), dadurch wird auf 4 Bit Daten umgestellt&lt;br /&gt;
* Ab jetzt muss für die Übertragung eines Bytes jeweils zuerst das höherwertige Nibble und dann das niederwertige Nibble übertragen werden, wie oben beschrieben&lt;br /&gt;
* Mit dem Konfigurier-Befehl $20 das Display konfigurieren (4-Bit, 1 oder 2 Zeilen, 5x7 Format)&lt;br /&gt;
* Mit den restlichen Konfigurierbefehlen die Konfiguration vervollständigen: Display ein/aus, Cursor ein/aus, etc.&lt;br /&gt;
&lt;br /&gt;
Eine Begründung, warum die ersten Befehle dreifach geschickt werden sollen, findet sich [http://www.mikrocontroller.net/topic/158983#1508510 im Forum].&lt;br /&gt;
&lt;br /&gt;
=== Initialisierung für 8 Bit Modus ===&lt;br /&gt;
&lt;br /&gt;
Der Vollständigkeit halber hier noch die notwendige Initialiserungssequenz für den 8 Bit Modus. Da hier die Daten komplett als 1 Byte übertragen werden können, sind einige Klimmzüge wie im 4 Bit Modus nicht notwendig. Begründung für die anfänglichen Wiederholungen siehe oben.&lt;br /&gt;
&lt;br /&gt;
* Nach dem Anlegen der Betriebsspannung muss eine Zeit von mindestens ca. 15ms gewartet werden, um dem LCD-Kontroller Zeit für seine eigene Initialisierung zu geben&lt;br /&gt;
* $30 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 4.1ms warten&lt;br /&gt;
* $30 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 100µs warten&lt;br /&gt;
* $30 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mit dem Konfigurier-Befehl 0x30 das Display konfigurieren (8-Bit, 1 oder 2 Zeilen, 5x7 Format)&lt;br /&gt;
* Mit den restlichen Konfigurierbefehlen die Konfiguration vervollständigen: Display ein/aus, Cursor ein/aus, etc.&lt;br /&gt;
&lt;br /&gt;
== Routinen zur LCD-Ansteuerung im 4-Bit-Modus ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden werden die bisherigen Grundroutinen zur LCD-Ansteuerung im 4-Bit-Modus zusammengefasst und kommentiert. Die darin enthaltenen Symbole (temp1, PORTD,...) müssen in einem dazugehörenden Hauptprogramm definiert werden. Dies wird nächsten Abschnitt &#039;&#039;Anwendung&#039;&#039; weiter erklärt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
;;                 LCD-Routinen                ;;&lt;br /&gt;
;;                 ============                ;;&lt;br /&gt;
;;              (c)andreas-s@web.de            ;;&lt;br /&gt;
;;                                             ;;&lt;br /&gt;
;; 4bit-Interface                              ;;&lt;br /&gt;
;; DB4-DB7:       PD0-PD3                      ;;&lt;br /&gt;
;; RS:            PD4                          ;;&lt;br /&gt;
;; E:             PD5                          ;;&lt;br /&gt;
;;                                             ;;&lt;br /&gt;
;; Takt:          4 MHz                        ;;&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ;sendet ein Datenbyte an das LCD&lt;br /&gt;
lcd_data:&lt;br /&gt;
           mov temp2, temp1             ; &amp;quot;Sicherungskopie&amp;quot; für&lt;br /&gt;
                                        ; die Übertragung des 2.Nibbles&lt;br /&gt;
           swap temp1                   ; Vertauschen&lt;br /&gt;
           andi temp1, 0b00001111       ; oberes Nibble auf Null setzen&lt;br /&gt;
           sbr temp1, 1&amp;lt;&amp;lt;4              ; entspricht 0b00010000 (Anm.1)&lt;br /&gt;
           out PORTD, temp1             ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
                                        ; 2. Nibble, kein swap da es schon&lt;br /&gt;
                                        ; an der richtigen stelle ist&lt;br /&gt;
           andi temp2, 0b00001111       ; obere Hälfte auf Null setzen &lt;br /&gt;
           sbr temp2, 1&amp;lt;&amp;lt;4              ; entspricht 0b00010000&lt;br /&gt;
           out PORTD, temp2             ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
           rcall delay50us              ; Delay-Routine aufrufen&lt;br /&gt;
           ret                          ; zurück zum Hauptprogramm&lt;br /&gt;
&lt;br /&gt;
 ; sendet einen Befehl an das LCD&lt;br /&gt;
lcd_command:                            ; wie lcd_data, nur RS=0&lt;br /&gt;
           mov temp2, temp1&lt;br /&gt;
           swap temp1&lt;br /&gt;
           andi temp1, 0b00001111&lt;br /&gt;
           out PORTD, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           andi temp2, 0b00001111&lt;br /&gt;
           out PORTD, temp2&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay50us&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; erzeugt den Enable-Puls&lt;br /&gt;
 ;&lt;br /&gt;
 ; Bei höherem Takt (&amp;gt;= 8 MHz) kann es notwendig sein, &lt;br /&gt;
 ; vor dem Enable High 1-2 Wartetakte (nop) einzufügen. &lt;br /&gt;
 ; Siehe dazu http://www.mikrocontroller.net/topic/81974#685882&lt;br /&gt;
lcd_enable:&lt;br /&gt;
           sbi PORTD, 5                 ; Enable high&lt;br /&gt;
           nop                          ; mindestens 3 Taktzyklen warten&lt;br /&gt;
           nop&lt;br /&gt;
           nop&lt;br /&gt;
           cbi PORTD, 5                 ; Enable wieder low&lt;br /&gt;
           ret                          ; Und wieder zurück                     &lt;br /&gt;
&lt;br /&gt;
 ; Pause nach jeder Übertragung&lt;br /&gt;
delay50us:                              ; 50µs Pause (bei 4 MHz)&lt;br /&gt;
           ldi  temp1, $42&lt;br /&gt;
delay50us_:dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause (bei 4 MHz)&lt;br /&gt;
           ldi  temp1, $21&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&lt;br /&gt;
 ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden&lt;br /&gt;
lcd_init:&lt;br /&gt;
           ldi  temp3,50&lt;br /&gt;
powerupwait:&lt;br /&gt;
           rcall  delay5ms&lt;br /&gt;
           dec  temp3&lt;br /&gt;
           brne powerupwait&lt;br /&gt;
           ldi temp1, 0b00000011        ; muss 3mal hintereinander gesendet&lt;br /&gt;
           out PORTD, temp1             ; werden zur Initialisierung&lt;br /&gt;
           rcall lcd_enable             ; 1&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; 2&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; und 3!&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi temp1, 0b00000010        ; 4bit-Modus einstellen&lt;br /&gt;
           out PORTD, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi temp1, 0b00101000        ; 4Bit / 2 Zeilen / 5x8&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi temp1, 0b00001100        ; Display ein / Cursor aus / kein Blinken&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi temp1, 0b00000100        ; inkrement / kein Scrollen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           ldi temp1, 0b00000001   ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; Sendet den Befehl: Cursor Home&lt;br /&gt;
lcd_home:&lt;br /&gt;
           ldi temp1, 0b00000010   ; Cursor Home&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anm.1: Siehe [[Bitmanipulation]]&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen (wie z.&amp;amp;nbsp;B. Cursorposition verändern) sollten mit Hilfe der [[AVR-Tutorial:_LCD#Welche_Befehle_versteht_das_LCD.3F|Befehlscodeliste]] nicht schwer zu realisieren sein. Einfach den Code in temp laden, lcd_command aufrufen und ggf. eine Pause einfügen.&amp;lt;br&amp;gt; &lt;br /&gt;
Natürlich kann man die LCD-Ansteuerung auch an einen anderen Port des Mikrocontrollers &amp;quot;verschieben&amp;quot;: Wenn das LCD z.&amp;amp;nbsp;B. an Port B angeschlossen ist, dann reicht es, im Programm alle &amp;quot;PORTD&amp;quot; durch &amp;quot;PORTB&amp;quot; und &amp;quot;DDRD&amp;quot; durch &amp;quot;DDRB&amp;quot; zu ersetzen.&amp;lt;br&amp;gt; &lt;br /&gt;
Wer eine höhere Taktfrequenz als 4 MHz verwendet, der sollte daran denken, die Dauer der Verzögerungsschleifen anzupassen.&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
&lt;br /&gt;
Ein Programm, das diese Routinen zur Anzeige von Text verwendet, kann z.&amp;amp;nbsp;B. so aussehen (die Datei lcd-routines.asm muss sich im gleichen Verzeichnis befinden). Nach der Initialisierung wird zuerst der Displayinhalt gelöscht. Um dem LCD ein Zeichen zu schicken, lädt man es in temp1 und ruft die Routine &amp;quot;lcd_data&amp;quot; auf. Das folgende Beispiel zeigt das Wort &amp;quot;Test&amp;quot; auf dem LCD an. &lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/sourcecode/tutorial/lcd-test.asm Download lcd-test.asm] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; .def definiert ein Synonym (Namen) für ein µC Register&lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPL, temp1&lt;br /&gt;
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPH, temp1&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, 0xFF    ; Port D = Ausgang&lt;br /&gt;
           out DDRD, temp1&lt;br /&gt;
&lt;br /&gt;
           rcall lcd_init     ; Display initialisieren&lt;br /&gt;
           rcall lcd_clear    ; Display löschen&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, &#039;T&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, &#039;e&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           &lt;br /&gt;
           ldi temp1, &#039;s&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, &#039;t&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
           rjmp loop&lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;            ; LCD-Routinen werden hier eingefügt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für längere Texte ist die Methode, jedes Zeichen einzeln in das Register zu laden und &amp;quot;lcd_data&amp;quot; aufzurufen natürlich nicht sehr praktisch. Dazu später aber mehr.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden in Register immer irgendwelche Zahlenwerte geladen, aber in diesem Programm kommt plötzlich die Anweisung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ldi temp1, &#039;T&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vor. Wie ist diese zu verstehen? Passiert hier etwas grundlegend anderes als beim Laden einer Zahl in ein Register?&lt;br /&gt;
&lt;br /&gt;
Die Antwort darauf lautet: Nein. Auch hier wird letztendlich nur eine Zahl in ein Register geladen. Der Schlüssel zum Verständnis beruht darauf, dass zum LCD, so wie zu allen Ausgabegeräten, für die Ausgabe von Texten immer nur Zahlen übertragen werden, sog. Codes. Zum Beispiel könnte man vereinbaren, dass ein LCD, wenn es den Ausgabecode 65 erhält, ein &#039;A&#039; anzeigt, bei einem Ausgabecode von 66 ein &#039;B&#039; usw. Naturgemäß gibt es daher viele verschiedene Code-Buchstaben Zuordnungen. Damit hier etwas Ordnung in das potentielle Chaos kommt, hat man sich bereits in der Steinzeit der Programmierung auf bestimmte Codetabellen geeinigt, von denen die verbreitetste sicherlich die ASCII-Zuordnung ist.&lt;br /&gt;
&lt;br /&gt;
==ASCII==&lt;br /&gt;
&lt;br /&gt;
ASCII steht für &#039;&#039;American Standard Code for Information Interchange&#039;&#039; und ist ein standardisierter Code zur Zeichenumsetzung. Die Codetabelle sieht hexadezimal dabei wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!   ||x0||x1||x2||x3||x4||x5||x6||x7||x8||x9||xA||xB||xC||xD||xE||xF&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 0x&lt;br /&gt;
|NUL||SOH||STX||ETX||EOT||ENQ||ACK||BEL||BS||HT||LF||VT||FF||CR||SO||SI&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 1x&lt;br /&gt;
|DLE||DC1||DC2||DC3||DC4||NAK||SYN||ETB||CAN||EM||SUB||ESC||FS||GS||RS||US&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 2x&lt;br /&gt;
|SP||!||&amp;quot;||#||$||%||&amp;amp;||&#039;||(||)||*||+||,||-||.||/&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 3x&lt;br /&gt;
|0||1||2||3||4||5||6||7||8||9||:||;||&amp;lt;||=||&amp;gt;||?&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 4x&lt;br /&gt;
|@||A||B||C||D||E||F||G||H||I||J||K||L||M||N||O&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 5x&lt;br /&gt;
|P||Q||R||S||T||U||V||W||X||Y||Z||[||\||]||^||_&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 6x&lt;br /&gt;
|`||a||b||c||d||e||f||g||h||i||j||k||l||m||n||o&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 7x&lt;br /&gt;
|p||q||r||s||t||u||v||w||x||y||z||{|| &amp;amp;#124; ||}||~||DEL&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ersten beiden Zeilen enthalten die Codes für einige Steuerzeichen, ihre vollständige Beschreibung würde hier zu weit führen. Das Zeichen &#039;&#039;&#039;SP&#039;&#039;&#039; steht für ein &#039;&#039;Space&#039;&#039;, also ein Leerzeichen. &#039;&#039;&#039;BS&#039;&#039;&#039; steht für &#039;&#039;Backspace&#039;&#039;, also ein Zeichen zurück. &#039;&#039;&#039;DEL&#039;&#039;&#039; steht für &#039;&#039;Delete&#039;&#039;, also das Löschen eines Zeichens. &#039;&#039;&#039;CR&#039;&#039;&#039; steht für &#039;&#039;Carriage Return&#039;&#039;, also wörtlich: der Wagenrücklauf (einer Schreibmaschine), während &#039;&#039;&#039;LF&#039;&#039;&#039; für &#039;&#039;Line feed&#039;&#039;, also einen Zeilenvorschub steht.&lt;br /&gt;
&lt;br /&gt;
Der Assembler kennt diese Codetabelle und ersetzt die Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ldi temp1, &#039;T&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
durch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ldi temp1, $54&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
was letztendlich auch der Lesbarkeit des Programmes zugute kommt. Funktional besteht kein Unterschied zwischen den beiden Anweisungen. Beide bewirken, dass das Register temp1 mit dem Bitmuster 01010100 ( = hexadezimal 54, = dezimal 84 oder eben der ASCII Code für &#039;&#039;&#039;T&#039;&#039;&#039;) geladen wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das LCD wiederrum kennt diese Code-Tabelle ebenfalls und wenn es über den Datenbus die Codezahl $54 zur Anzeige empfängt, dann schreibt es ein &#039;&#039;&#039;T&#039;&#039;&#039; an die aktuelle Cursorposition. Genauer gesagt, weiss das LCD nichts von einem &#039;&#039;&#039;T&#039;&#039;&#039;. Es sieht einfach in seinen internen Tabellen nach, welche Pixel beim Empfang der Codezahl $54 auf schwarz zu setzen sind. &#039;Zufällig&#039; sind das genau jene Pixel, die für uns Menschen ein &#039;&#039;&#039;T&#039;&#039;&#039; ergeben.&lt;br /&gt;
&lt;br /&gt;
==Welche Befehle versteht das LCD?==&lt;br /&gt;
&lt;br /&gt;
Auf dem LCD arbeitet ein Controller vom Typ HD44780. Dieser Kontroller versteht eine Reihe von Befehlen, die allesamt mittels lcd_command gesendet werden können. Ein Kommando ist dabei nichts anderes als ein Befehlsbyte, in dem die verschiedenen Bits verschiedene Bedeutungen haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! Bitwert   || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  0&lt;br /&gt;
||dieses Bit muss 0 sein&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
||dieses Bit muss 1 sein&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  x&lt;br /&gt;
||der Zustand dieses Bits ist egal&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | sonstige Buchstaben&lt;br /&gt;
||das Bit muss je nach gewünschter Funktionalität gesetzt werden.&amp;lt;br /&amp;gt;Die mögliche Funktionalität des jeweiligen Bits geht aus der Befehlsbeschreibung hervor.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Das Kommando &#039;ON/OFF Control&#039; soll benutzt werden, um das Display einzuschalten, der Cursor soll eingeschaltet werden und der Cursor soll blinken.&lt;br /&gt;
Das Befehlsbyte ist so aufgebaut:&lt;br /&gt;
   0b00001dcb&lt;br /&gt;
Aus der Befehlsbeschreibung entnimmt man:&lt;br /&gt;
* Display ein bedeutet, dass an der Bitposition d eine 1 stehen muss.&amp;lt;br&amp;gt;&lt;br /&gt;
* Cursor ein bedeutet, dass an der Bitposition c ein 1 stehen muss.&amp;lt;br&amp;gt;&lt;br /&gt;
* Cursor blinken bedeutet, dass an der Bitposition b eine 1 stehen muss.&amp;lt;br&amp;gt;&lt;br /&gt;
Das dafür zu übertragende Befehlsbyte hat also die Gestalt 0b00001111 oder in hexadezimaler Schreibweise $0F.&lt;br /&gt;
&lt;br /&gt;
===Clear display: 0b00000001===&lt;br /&gt;
&lt;br /&gt;
Die Anzeige wird gelöscht und der Ausgabecursor kehrt an die Home Position (links, erste Zeile) zurück.&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 1.64ms&lt;br /&gt;
&lt;br /&gt;
===Cursor home: 0b0000001x===&lt;br /&gt;
&lt;br /&gt;
Der Cursor kehrt an die Home Position (links, erste Zeile) zurück. Ein verschobenes Display wird auf die Grundeinstellung zurückgesetzt.&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs bis 1.64ms&lt;br /&gt;
&lt;br /&gt;
===Entry mode: 0b000001is===&lt;br /&gt;
&lt;br /&gt;
Legt die Cursor Richtung sowie eine mögliche Verschiebung des Displays fest&lt;br /&gt;
* i = 1, Cursorposition bei Ausgabe eines Zeichens erhöhen&lt;br /&gt;
* i = 0, Cursorposition bei Ausgabe eines Zeichens vermindern&lt;br /&gt;
* s = 1, Display wird gescrollt, wenn der Cursor das Ende/Anfang, je nach Einstellung von i, erreicht hat.&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===On/off control: 0b00001dcb===&lt;br /&gt;
&lt;br /&gt;
Display insgesamt ein/ausschalten; den Cursor ein/ausschalten; den Cursor auf blinken schalten/blinken aus. Wenn das Display ausgeschaltet wird, geht der Inhalt des Displays nicht verloren. Der vorher angezeigte Text wird nach wiedereinschalten erneut angezeigt.&lt;br /&gt;
Ist der Cursor eingeschaltet, aber Blinken ausgeschaltet, so wird der Cursor als Cursorzeile in Pixelzeile 8 dargestellt. Ist Blinken eingeschaltet, wird der Cursor als blinkendes ausgefülltes Rechteck dargestellt, welches abwechselnd mit dem Buchstaben an dieser Stelle angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
* d = 0, Display aus&lt;br /&gt;
* d = 1, Display ein&lt;br /&gt;
* c = 0, Cursor aus&lt;br /&gt;
* c = 1, Cursor ein&lt;br /&gt;
* b = 0, Cursor blinken aus&lt;br /&gt;
* b = 1, Cursor blinken ein&lt;br /&gt;
 &lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Cursor/Scrollen: 0b0001srxx===&lt;br /&gt;
&lt;br /&gt;
Bewegt den Cursor oder scrollt das Display um eine Position entweder nach rechts oder nach links.&lt;br /&gt;
&lt;br /&gt;
* s = 1, Display scrollen&lt;br /&gt;
* s = 0, Cursor bewegen&lt;br /&gt;
* r = 1, nach rechts&lt;br /&gt;
* r = 0, nach links &lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Konfiguration: 0b001dnfxx===&lt;br /&gt;
&lt;br /&gt;
Einstellen der Interface Art, Modus, Font&lt;br /&gt;
* d = 0, 4-Bit Interface&lt;br /&gt;
* d = 1, 8-Bit Interface&lt;br /&gt;
* n = 0, 1 zeilig&lt;br /&gt;
* n = 1, 2 zeilig&lt;br /&gt;
* f = 0, 5x7 Pixel&lt;br /&gt;
* f = 1, 5x11 Pixel&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Character RAM Address Set: 0b01aaaaaa===&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando werden maximal 8 selbst definierte Zeichen definiert. Dazu wird der Character RAM Zeiger auf den Anfang des Character Generator (CG) RAM gesetzt und das Zeichen durch die Ausgabe von 8 Byte definiert. Der Adresszeiger wird nach Ausgabe jeder Pixelspalte (8 Bit) vom LCD selbst erhöht. Nach Beendigung der Zeichendefinition muss die Schreibposition explizit mit dem Kommando &amp;quot;Display RAM Address Set&amp;quot; wieder in den DD-RAM Bereich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
aaaaaa 6-bit CG RAM Adresse&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Display RAM Address Set: 0b1aaaaaaa===&lt;br /&gt;
&lt;br /&gt;
Den Cursor neu positionieren. Display Data (DD) Ram ist vom Character Generator (CG) Ram unabhängig. Der Adresszeiger wird bei Ausgabe eines Zeichens ins DD Ram automatisch erhöht. Das Display verhält sich so, als ob eine Zeile immer aus 40 logischen Zeichen besteht, von der, je nach konkretem Displaytyp (16 Zeichen, 20 Zeichen) immer nur ein Teil sichtbar ist.&lt;br /&gt;
&lt;br /&gt;
aaaaaaa 7-bit DD RAM Adresse. Auf 2-zeiligen Displays (und den meisten 16x1 Displays), kann die Adressangabe wie folgt interpretiert werden:&lt;br /&gt;
&lt;br /&gt;
1laaaaaa&lt;br /&gt;
* l = Zeilennummer (0 oder 1)&lt;br /&gt;
* a = 6-Bit Spaltennummer&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&lt;br /&gt;
 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0&lt;br /&gt;
 --- --- --- --- --- --- --- ---&lt;br /&gt;
  1   A   A   A   A   A   A   A &lt;br /&gt;
&lt;br /&gt;
Setzt die DDRAM Adresse:&lt;br /&gt;
&lt;br /&gt;
Wenn N = 0 (1 line display)&lt;br /&gt;
    AAAAAAA = &amp;quot;00h&amp;quot; - &amp;quot;4Fh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn N = 1 (2 line display) ((1x16))&lt;br /&gt;
    AAAAAAA = &amp;quot;00h&amp;quot; - &amp;quot;27h&amp;quot; Zeile 1. (0x80) &lt;br /&gt;
    AAAAAAA = &amp;quot;40h&amp;quot; - &amp;quot;67h&amp;quot; Zeile 2. (0xC0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
==Einschub: Code aufräumen==&lt;br /&gt;
&lt;br /&gt;
Es wird Zeit, sich einmal etwas kritisch mit den bisher geschriebenen Funktionen auseinander zu setzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Portnamen aus dem Code herausziehen===&lt;br /&gt;
&lt;br /&gt;
Wenn wir die LCD-Funktionen einmal genauer betrachten, dann fällt sofort auf, dass über die Funktionen verstreut immer wieder das &#039;&#039;&#039;PORTD&#039;&#039;&#039; sowie einzelne Zahlen für die Pins an diesem Port auftauchen. Wenn das LCD an einem anderen Port betrieben werden soll, oder sich die Pin-Belegung ändert, dann muss an all diesen Stellen eine Anpassung vorgenommen werden. Dabei darf keine einzige Stelle übersehen werden, ansonsten würden die LCD-Funktionen nicht oder nicht vollständig funktionieren.&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit, dem vorzubeugen, ist es, diese immer gleichbleibenden Dinge an den Anfang der LCD-Funktionen vorzuziehen. Anstelle von PORTD wird dann im Code ein anderer Name benutzt, den man frei vergeben kann. Dem Assembler wird nur noch mitgeteilt, das dieser Name für PORTD steht. Muss das LCD an einen anderen Port angeschlossen werden, so wird nur diese Zurodnung geändert und der Assembler passt dann im restlichen Code alle davon abhängigen Anweisungen an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
;;                 LCD-Routinen                ;;&lt;br /&gt;
;;                 ============                ;;&lt;br /&gt;
;;              (c)andreas-s@web.de            ;;&lt;br /&gt;
;;                                             ;;&lt;br /&gt;
;; 4bit-Interface                              ;;&lt;br /&gt;
;; DB4-DB7:       PD0-PD3                      ;;&lt;br /&gt;
;; RS:            PD4                          ;;&lt;br /&gt;
;; E:             PD5                          ;;&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
 &lt;br /&gt;
; .equ definiert ein Symbol und dessen Wert&lt;br /&gt;
.equ LCD_PORT = PORTD&lt;br /&gt;
.equ LCD_DDR  = DDRD&lt;br /&gt;
.equ PIN_E    = 5&lt;br /&gt;
.equ PIN_RS   = 4&lt;br /&gt;
&lt;br /&gt;
 ;sendet ein Datenbyte an das LCD&lt;br /&gt;
lcd_data:&lt;br /&gt;
           mov temp2, temp1             ; &amp;quot;Sicherungskopie&amp;quot; für&lt;br /&gt;
                                        ; die Übertragung des 2.Nibbles&lt;br /&gt;
           swap temp1                   ; Vertauschen&lt;br /&gt;
           andi temp1, 0b00001111       ; oberes Nibble auf Null setzen&lt;br /&gt;
           sbr temp1, 1&amp;lt;&amp;lt;PIN_RS         ; entspricht 0b00010000&lt;br /&gt;
           out LCD_PORT, temp1          ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
                                        ; 2. Nibble, kein swap da es schon&lt;br /&gt;
                                        ; an der richtigen stelle ist&lt;br /&gt;
           andi temp2, 0b00001111       ; obere Hälfte auf Null setzen &lt;br /&gt;
           sbr temp2, 1&amp;lt;&amp;lt;PIN_RS         ; entspricht 0b00010000&lt;br /&gt;
           out LCD_PORT, temp2          ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
           rcall delay50us              ; Delay-Routine aufrufen&lt;br /&gt;
           ret                          ; zurück zum Hauptprogramm&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 ; sendet einen Befehl an das LCD&lt;br /&gt;
&lt;br /&gt;
lcd_command:                            ; wie lcd_data, nur RS=0&lt;br /&gt;
           mov temp2, temp1&lt;br /&gt;
           swap temp1&lt;br /&gt;
           andi temp1, 0b00001111&lt;br /&gt;
           out LCD_PORT, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           andi temp2, 0b00001111&lt;br /&gt;
           out LCD_PORT, temp2&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay50us&lt;br /&gt;
           ret&lt;br /&gt;
 &lt;br /&gt;
 ; erzeugt den Enable-Puls&lt;br /&gt;
lcd_enable:&lt;br /&gt;
           sbi LCD_PORT, PIN_E          ; Enable high&lt;br /&gt;
           nop                          ; 3 Taktzyklen warten&lt;br /&gt;
           nop&lt;br /&gt;
           nop&lt;br /&gt;
           cbi LCD_PORT, PIN_E          ; Enable wieder low&lt;br /&gt;
           ret                          ; Und wieder zurück                     &lt;br /&gt;
 &lt;br /&gt;
 ; Pause nach jeder Übertragung&lt;br /&gt;
delay50us:                              ; 50µs Pause&lt;br /&gt;
           ldi  temp1, $42&lt;br /&gt;
delay50us_:dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
 &lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause&lt;br /&gt;
           ldi  temp1, $21&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
 &lt;br /&gt;
 ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden&lt;br /&gt;
lcd_init:&lt;br /&gt;
           ldi   temp1, 0xFF            ; alle Pins am Ausgabeport auf Ausgang&lt;br /&gt;
           out   LCD_DDR, temp1&lt;br /&gt;
&lt;br /&gt;
           ldi   temp3,6&lt;br /&gt;
powerupwait:&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           dec   temp3&lt;br /&gt;
           brne  powerupwait&lt;br /&gt;
           ldi   temp1,    0b00000011   ; muss 3mal hintereinander gesendet&lt;br /&gt;
           out   LCD_PORT, temp1        ; werden zur Initialisierung&lt;br /&gt;
           rcall lcd_enable             ; 1&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; 2&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; und 3!&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi   temp1, 0b00000010      ; 4bit-Modus einstellen&lt;br /&gt;
           out   LCD_PORT, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi   temp1, 0b00101000      ; 4 Bit, 2 Zeilen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi   temp1, 0b00001100      ; Display on, Cursor off&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi   temp1, 0b00000100      ; endlich fertig&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ret&lt;br /&gt;
 &lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           ldi   temp1, 0b00000001      ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; Sendet den Befehl: Cursor Home&lt;br /&gt;
lcd_home:&lt;br /&gt;
           ldi   temp1, 0b00000010      ; Cursor Home&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;&#039;.equ&#039;&#039;&#039; werden mit dem Assembler Textersetzungen vereinbart. Der Assembler ersetzt alle Vorkomnisse des Quelltextes durch den zu ersetzenden Text. Dadurch ist es z.&amp;amp;nbsp;B. möglich, alle Vorkommnisse von &#039;&#039;&#039;PORTD&#039;&#039;&#039; durch &#039;&#039;&#039;LCD_PORT&#039;&#039;&#039; auszutauschen. Wird das LCD an einen anderen Port, z.&amp;amp;nbsp;B. &#039;&#039;&#039;PORTB&#039;&#039;&#039; gelegt, dann genügt es, die Zeilen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.equ LCD_PORT = PORTD&lt;br /&gt;
.equ LCD_DDR  = DDRD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
durch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.equ LCD_PORT = PORTB&lt;br /&gt;
.equ LCD_DDR  = DDRB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
zu ersetzen. Der Assembler sorgt dann dafür, dass diese Portänderung an den relevanten Stellen im Code über die Textersetzungen einfließt. Selbiges natürlich mit der Pin-Zuordnung.&lt;br /&gt;
&lt;br /&gt;
===Registerbenutzung===&lt;br /&gt;
&lt;br /&gt;
Bei diesen Funktionen mussten einige Register des Prozessors benutzt werden, um darin Zwischenergebnisse zu speichern bzw. zu bearbeiten.&lt;br /&gt;
&lt;br /&gt;
Beachtet werden muss dabei natürlich, dass es zu keinen Überschneidungen kommt. Solange nur jede Funktion jeweils für sich betrachtet wird, ist das kein Problem. In 20 oder 30 Code-Zeilen kann man gut verfolgen, welches Register wofür benutzt wird. Schwieriger wird es, wenn Funktionen wiederum andere Funktionen aufrufen, die ihrerseits wieder Funktionen aufrufen usw. Jede dieser Funktionen benutzt einige Register und mit zunehmender Programmgröße wird es immer schwieriger, zu verfolgen, welches Register zu welchem Zeitpunkt wofür benutzt wird.&lt;br /&gt;
&lt;br /&gt;
Speziell bei Basisfunktionen wie diesen LCD-Funktionen, ist es daher oft ratsam, dafür zu sorgen, dass jede Funktion die Register wieder in dem Zustand hinterlässt, indem sie sie auch vorgefunden hat. Wir benötigen dazu wieder den Stack, auf dem die Registerinhalte bei Betreten einer Funktion zwischengespeichert werden und von dem die Register bei Verlassen einer Funktion wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
Nehmen wir die Funktion&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           ldi   temp1, 0b00000001      ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Funktion verändert das Register temp1. Um das Register abzusichern, schreiben wir die Funktion um:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           push  temp1                  ; temp1 auf dem Stack sichern&lt;br /&gt;
           ldi   temp1, 0b00000001      ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           pop   temp1                  ; temp1 vom Stack wiederherstellen&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am besten hält man sich an die Regel: Jede Funktion ist dafür zuständig, die Register zu sichern und wieder herzustellen, die sie auch selbst verändert. &#039;&#039;&#039;lcd_clear&#039;&#039;&#039; ruft die Funktionen &#039;&#039;&#039;lcd_command&#039;&#039;&#039; und &#039;&#039;&#039;delay5ms&#039;&#039;&#039; auf. Wenn diese Funktionen selbst wieder Register verändern (und das tun sie), so ist es die Aufgabe dieser Funktionen, sich um die Sicherung und das Wiederherstellen der entsprechenden Register zu kümmern. &#039;&#039;&#039;lcd_clear&#039;&#039;&#039; sollte sich nicht darum kümmern müssen. Auf diese Weise ist das Schlimmste, das einem passieren kann, dass ein paar Register unnütz gesichert und wiederhergestellt werden. Das kostet zwar etwas Rechenzeit und etwas Speicherplatz auf dem Stack, ist aber immer noch besser als das andere Extrem: Nach einem Funktionsaufruf haben einige Register nicht mehr den Wert, den sie haben sollten, und das Programm rechnet mit falschen Zahlen weiter.&lt;br /&gt;
&lt;br /&gt;
===Lass den Assembler rechnen===&lt;br /&gt;
Betrachtet man den Code genauer, so fallen einige konstante Zahlenwerte auf (Das vorangestellte $ kennzeichnet die Zahl als Hexadezimalzahl):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
delay50us:                              ; 50µs Pause&lt;br /&gt;
           ldi  temp1, $42&lt;br /&gt;
delay50us_:&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Code benötigt eine Warteschleife, die mindestens 50µs dauert. Die beiden Befehle innerhalb der Schleife benötigen 3 Takte: 1 Takt für den &#039;&#039;&#039;dec&#039;&#039;&#039; und der &#039;&#039;&#039;brne&#039;&#039;&#039; benötigt 2 Takte, wenn die Bedingung zutrifft, der Branch also genommen wird. Bei 4 Mhz werden also 4000000 / 3 * 50 / 1000000 = 66.6 Durchläufe durch die Schleife benötigt, um eine Verzögerungszeit von 50µs (0.000050 Sekunden) zu erreichen, hexadezimal ausgedrückt: $42.&lt;br /&gt;
&lt;br /&gt;
Der springende Punkt ist: Bei anderen Taktfrequenzen müsste man nun jedesmal diese Berechnung machen und den entsprechenden Zahlenwert einsetzen. Das kann aber der Assembler genausogut erledigen. Am Anfang des Codes wird ein Eintrag definiert, der die Taktfrequenz festlegt. Traditionell heißt dieser Eintrag &amp;lt;i&amp;gt;XTAL&amp;lt;/i&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.equ XTAL  = 4000000&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
delay50us:                              ; 50µs Pause&lt;br /&gt;
           ldi  temp1, ( XTAL * 50 / 3 ) / 1000000&lt;br /&gt;
delay50us_:&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An einer anderen Codestelle gibt es weitere derartige magische Zahlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause&lt;br /&gt;
           ldi  temp1, $21&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was geht hier vor?&lt;br /&gt;
Die innere Schleife benötigt wieder 3 Takte pro Durchlauf. Bei $C9 = 201 Durchläufen werden also 201 * 3 = 603 Takte verbraucht. In der äußeren Schleife werden pro Durchlauf also 603 + 1 + 2 = 606 Takte verbraucht und einmal 605 Takte (weil der brne nicht genommen wird). Da die äußere Schleife $21 = 33 mal wiederholt wird, werden 32 * 606 + 605 = 19997 Takte verbraucht. Noch 1 Takt mehr für den allerersten ldi und 4 Takte für den ret, macht 20002 Takte. Bei 4Mhz benötigt der Prozessor 20002 / 4000000 = 0.0050005 Sekunden, also rund 5 ms. Die 7. nachkommastelle kann man an dieser Stelle getrost ignorieren. Vor allen Dingen auch deshalb, weil auch der Quarz nicht exakt 4000000 Schwingungen in der Sekunde durchführen wird.&lt;br /&gt;
Wird der Wiederholwert für die innere Schleife bei $C9 belassen, so werden 4000000 / 607 * 5 / 1000 Wiederholungen der äusseren Schleife benötigt. (Die Berechnung wurde hier etwas vereinfacht, die nicht berücksichtigten Takte fallen zeitmässig nicht weiter ins Gewicht bzw. wurden dadurch berücksichtigt, dass mit 607 anstelle von 606 gerechnet wird). Auch diese Berechnung kann wieder der Assembler übernehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause&lt;br /&gt;
           ldi  temp1, ( XTAL * 5 / 607 ) / 1000&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein kleines Problem kann bei der Verwendung dieses Verfahrens entstehen: Bei hohen Taktfrequenzen und großen Wartezeiten kann der berechnete Wert größer als 255 werden und man bekommt die Fehlermeldung &amp;quot;Operand(s) out of range&amp;quot; beim Assemblieren. Dieser Fall tritt zum Beispiel für obige Konstruktion bei einer Taktfrequenz von 16 MHz ein (genauer gesagt ab 15,3 MHz), während darunter XTAL beliebig geändert werden kann. Als einfachste Lösung bietet es sich an, die Zahl der Takte pro Schleifendurchlauf durch das Einfügen von &#039;&#039;&#039;nop&#039;&#039;&#039; zu erhöhen und die Berechnungsvorschrift anzupassen.&lt;br /&gt;
&lt;br /&gt;
== Ausgabe eines konstanten Textes ==&lt;br /&gt;
&lt;br /&gt;
Weiter oben wurde schon einmal ein Text ausgegeben. Dies geschah durch Ausgabe von einzelnen Zeichen. Das können wir auch anders machen. Wir können den Text im Speicher ablegen und eine Funktion schreiben, die die einzelnen Zeichen aus dem Speicher liest und aus gibt. Dabei stellt sich Frage: Woher &#039;weiß&#039; die Funktion eigentlich, wie lang der Text ist? Die Antwort darauf lautet: Sie kann es nicht wissen. Wir müssen irgendwelche Vereinbarungen treffen, woran die Funktion erkennen kann, dass der Text zu Ende ist. Im Wesentlichen werden dazu 2 Methoden benutzt:&lt;br /&gt;
* Der Text enthält ein spezielles Zeichen, welches das Ende des Textes markiert&lt;br /&gt;
* Wir speichern nicht nur den Text selbst, sondern auch die Länge des Textes&lt;br /&gt;
Mit einer der beiden Methoden ist es der Textausgabefunktion dann ein Leichtes, den Text vollständig auszugeben.&lt;br /&gt;
&lt;br /&gt;
Wir werden uns im Weiteren dafür entscheiden, ein spezielles Zeichen, eine 0 (den Wert 0, nicht das Zeichen &#039;0&#039;), dafür zu benutzen. Die Ausgabefunktionen werden dann etwas einfacher, als wenn bei der Ausgabe die Anzahl der bereits ausgegebenen Zeichen mitgezählt werden muss.&lt;br /&gt;
&lt;br /&gt;
Den Text selbst speichern wir im Flash-Speicher, also dort, wo auch das Programm gespeichert ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Einen konstanten Text aus dem Flash Speicher&lt;br /&gt;
 ; ausgeben. Der Text wird mit einer 0 beendet&lt;br /&gt;
lcd_flash_string:&lt;br /&gt;
           push  temp1&lt;br /&gt;
           push  ZH&lt;br /&gt;
           push  ZL&lt;br /&gt;
&lt;br /&gt;
lcd_flash_string_1:&lt;br /&gt;
           lpm   temp1, Z+&lt;br /&gt;
           cpi   temp1, 0&lt;br /&gt;
           breq  lcd_flash_string_2&lt;br /&gt;
           rcall  lcd_data&lt;br /&gt;
           rjmp  lcd_flash_string_1&lt;br /&gt;
&lt;br /&gt;
lcd_flash_string_2:&lt;br /&gt;
           pop   ZL&lt;br /&gt;
           pop   ZH&lt;br /&gt;
           pop   temp1&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Funktion benutzt den Befehl &#039;&#039;&#039;lpm&#039;&#039;&#039;, um das jeweils nächste Zeichen aus dem Flash Speicher in ein Register zur Weiterverarbeitung zu laden. Dazu wird der sog. &#039;&#039;&#039;Z-Pointer&#039;&#039;&#039; benutzt. So nennt man das Registerpaar &#039;&#039;&#039;R30&#039;&#039;&#039; und &#039;&#039;&#039;R31&#039;&#039;&#039;. Nach jedem Ladevorgang wird dabei durch den Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           lpm   temp1, Z+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
dieser Z-Pointer um 1 erhöht. Mittels &#039;&#039;&#039;cpi&#039;&#039;&#039; wird das in das Register &#039;&#039;&#039;temp1&#039;&#039;&#039; geladene Zeichen mit 0 verglichen. &#039;&#039;&#039;cpi&#039;&#039;&#039; vergleicht die beiden Zahlen und merkt sich das Ergebnis in einem speziellen Register in Form von Status Bits. &#039;&#039;&#039;cpi&#039;&#039;&#039; zieht dabei ganz einfach die beiden Zahlen voneinander ab. Sind sie gleich, so kommt da als Ergebnis 0 heraus und &#039;&#039;&#039;cpi&#039;&#039;&#039; setzt daher konsequenter Weise das Zero-Flag, das anzeigt, dass die vorhergegangene Operation eine 0 als Ergebnis hatte.&#039;&#039;&#039;breq&#039;&#039;&#039; wertet diese Status-Bits aus. Wenn die vorhergegangene Operation ein 0-Ergebnis hatte, das Zero-Flag also gesetzt ist, dann wird ein Sprung zum angegebenen Label durchgeführt. In Summe bewirkt also die Sequenz&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           cpi   temp1, 0&lt;br /&gt;
           breq  lcd_flash_string_2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
dass das gelesene Zeichen mit 0 verglichen wird und falls das gelesene&lt;br /&gt;
Zeichen tatsächlich 0 war, an der Stelle lcd_flash_string_2 weiter gemacht wird. Im anderen Fall wird die bereits geschriebene Funktion &#039;&#039;&#039;lcd_data&#039;&#039;&#039; aufgerufen, welche das Zeichen ausgibt. &#039;&#039;&#039;lcd_data&#039;&#039;&#039; erwartet dabei das Zeichen im Register &#039;&#039;&#039;temp1&#039;&#039;&#039;, genau in dem Register, in welches wir vorher mittels &#039;&#039;&#039;lpm&#039;&#039;&#039; das Zeichen geladen hatten.&lt;br /&gt;
&lt;br /&gt;
Das verwendende Programm sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPL, temp1&lt;br /&gt;
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPH, temp1&lt;br /&gt;
 &lt;br /&gt;
           rcall lcd_init              ; Display initialisieren&lt;br /&gt;
           rcall lcd_clear             ; Display löschen&lt;br /&gt;
 &lt;br /&gt;
           ldi ZL, LOW(text*2)         ; Adresse des Strings in den&lt;br /&gt;
           ldi ZH, HIGH(text*2)        ; Z-Pointer laden&lt;br /&gt;
&lt;br /&gt;
           rcall lcd_flash_string      ; Unterprogramm gibt String aus der&lt;br /&gt;
                                       ; durch den Z-Pointer adressiert wird&lt;br /&gt;
loop:&lt;br /&gt;
           rjmp loop&lt;br /&gt;
&lt;br /&gt;
text:&lt;br /&gt;
           .db &amp;quot;Test&amp;quot;,0                ; Stringkonstante, durch eine 0&lt;br /&gt;
                                       ; abgeschlossen  &lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;            ; LCD Funktionen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genaueres über die Verwendung unterschiedlicher Speicher findet sich im Kapitel [[AVR-Tutorial:_Speicher|Speicher]]&lt;br /&gt;
&lt;br /&gt;
==Zahlen ausgeben==&lt;br /&gt;
Um Zahlen, die beispielsweise in einem Register gespeichert sind, ausgeben zu können, ist es notwendig sich eine Textrepräsentierung der Zahl zu generieren. Die Zahl 123 wird also in den Text &amp;quot;123&amp;quot; umgewandelt welcher dann ausgegeben wird. Aus praktischen Gründen wird allerdings der Text nicht vollständig generiert (man müsste ihn ja irgendwo zwischenspeichern) sondern die einzelnen Buchstaben werden sofort ausgegeben, sobald sie bekannt sind.&lt;br /&gt;
&lt;br /&gt;
===Dezimal ausgeben===&lt;br /&gt;
Das Prinzip der Umwandlung ist einfach. Um herauszufinden wieviele Hunderter in der Zahl 123 enthalten sind, genügt es in einer Schleife immer wieder 100 von der Zahl abzuziehen und mitzuzählen wie oft dies gelang, bevor das Ergebnis negativ wurde. In diesem Fall lautet die Antwort: 1 mal, denn 123 - 100 macht 23. Versucht man erneut 100 anzuziehen, so ergibt sich eine negative Zahl.&lt;br /&gt;
Also muss eine &#039;1&#039; ausgeben werden. Die verbleibenden 23 werden weiter behandelt, indem festgestellt wird wieviele Zehner darin enthalten sind. Auch hier wiederum: In einer Schleife solange 10 abziehen, bis das Ergebnis negativ wurde. Konkret geht das 2 mal gut, also muss das nächste auszugebende Zeichen ein &#039;2&#039; sein. Damit verbleiben noch die Einer, welche direkt in das entsprechende Zeichen umgewandelt werden können. In Summe hat man also an das Display die Zeichen &#039;1&#039; &#039;2&#039; &#039;3&#039; ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 8 Bit Zahl ohne Vorzeichen ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_number:&lt;br /&gt;
           push  temp1            ; die Funktion verändert temp1 und temp2,&lt;br /&gt;
           push  temp2            ; also sichern wir den Inhalt, um ihn am Ende&lt;br /&gt;
                                  ; wieder herstellen zu können&lt;br /&gt;
&lt;br /&gt;
           mov   temp2, temp1     ; das Register temp1 frei machen&lt;br /&gt;
                                  ; abzählen wieviele Hunderter&lt;br /&gt;
                                  ; in der Zahl enthalten sind&lt;br /&gt;
;** Hunderter ** &lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1     ; temp1 mit ASCII &#039;0&#039;-1 vorladen&lt;br /&gt;
lcd_number_1:&lt;br /&gt;
           inc   temp1            ; ASCII erhöhen (somit ist nach dem ersten&lt;br /&gt;
                                  ; Durchlauf eine &#039;0&#039; in temp1)&lt;br /&gt;
           subi  temp2, 100       ; 100 abziehen&lt;br /&gt;
           brcc  lcd_number_1     ; ist dadurch kein Unterlauf entstanden?&lt;br /&gt;
                                  ; nein, dann zurück zu lcd_number_1&lt;br /&gt;
           subi  temp2, -100      ; 100 wieder dazuzählen, da die&lt;br /&gt;
                                  ; vorherhgehende Schleife 100 zuviel&lt;br /&gt;
                                  ; abgezogen hat&lt;br /&gt;
           rcall lcd_data         ; die Hunderterstelle ausgeben&lt;br /&gt;
&lt;br /&gt;
;** Zehner  **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1     ; temp1 mit ASCII &#039;0&#039;-1 vorladen&lt;br /&gt;
lcd_number_2:&lt;br /&gt;
           inc   temp1            ; ASCII erhöhen (somit ist nach dem ersten&lt;br /&gt;
                                  ; Durchlauf eine &#039;0&#039; in temp1)&lt;br /&gt;
           subi  temp2, 10        ; 10 abziehen&lt;br /&gt;
           brcc  lcd_number_2     ; ist dadurch kein Unterlauf enstanden?&lt;br /&gt;
                                  ; nein, dann zurück zu lcd_number_2&lt;br /&gt;
           subi  temp2, -10       ; 10 wieder dazuzählen, da die&lt;br /&gt;
                                  ; vorherhgehende Schleife 10 zuviel&lt;br /&gt;
                                  ; abgezogen hat&lt;br /&gt;
           rcall lcd_data         ; die Zehnerstelle ausgeben&lt;br /&gt;
 &lt;br /&gt;
;** Einer **        &lt;br /&gt;
           ldi   temp1, &#039;0&#039;       ; die Zahl in temp2 ist jetzt im Bereich&lt;br /&gt;
           add   temp1, temp2     ; 0 bis 9. Einfach nur den ASCII Code für&lt;br /&gt;
           rcall lcd_data         ; &#039;0&#039; dazu addieren und wir erhalten dierekt&lt;br /&gt;
                                  ; den ASCII Code für die Ziffer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           pop   temp2            ; den gesicherten Inhalt von temp2 und temp1&lt;br /&gt;
           pop   temp1            ; wieder herstellen&lt;br /&gt;
           ret                    ; und zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachte: Diese Funktion benutzt wiederrum die Funktion &#039;&#039;&#039;lcd_data&#039;&#039;&#039;. Anders als bei den bisherigen Aufrufen ist &#039;&#039;&#039;lcd_number&#039;&#039;&#039; aber darauf angewiesen, dass &#039;&#039;&#039;lcd_data&#039;&#039;&#039; das Register &#039;&#039;&#039;temp2&#039;&#039;&#039; unangetastet lässt. Falls sie es noch nicht getan haben, dann ist das jetzt die perfekte Gelegenheit, &#039;&#039;&#039;lcd_data&#039;&#039;&#039; mit den entsprechenden &#039;&#039;&#039;push&#039;&#039;&#039; und &#039;&#039;&#039;pop&#039;&#039;&#039; Befehlen zu versehen. Sie sollten dies unbedingt zur Übung selbst machen. Am Ende muß die Funktion dann wie diese hier aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ;sendet ein Datenbyte an das LCD&lt;br /&gt;
lcd_data:&lt;br /&gt;
           push  temp2&lt;br /&gt;
           mov   temp2, temp1           ; &amp;quot;Sicherungskopie&amp;quot; für&lt;br /&gt;
                                        ; die Übertragung des 2.Nibbles&lt;br /&gt;
           swap  temp1                  ; Vertauschen&lt;br /&gt;
           andi  temp1, 0b00001111      ; oberes Nibble auf Null setzen&lt;br /&gt;
           sbr   temp1, 1&amp;lt;&amp;lt;PIN_RS       ; entspricht 0b00010000&lt;br /&gt;
           out   LCD_PORT, temp1        ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
                                        ; 2. Nibble, kein swap da es schon&lt;br /&gt;
                                        ; an der richtigen stelle ist&lt;br /&gt;
           andi  temp2, 0b00001111      ; obere Hälfte auf Null setzen &lt;br /&gt;
           sbr   temp2, 1&amp;lt;&amp;lt;PIN_RS       ; entspricht 0b00010000&lt;br /&gt;
           out   LCD_PORT, temp2        ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
           rcall delay50us              ; Delay-Routine aufrufen&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           ret                          ; zurück zum Hauptprogramm&lt;br /&gt;
 &lt;br /&gt;
 ; sendet einen Befehl an das LCD&lt;br /&gt;
lcd_command:                            ; wie lcd_data, nur ohne RS zu setzen&lt;br /&gt;
           push  temp2&lt;br /&gt;
           mov   temp2, temp1&lt;br /&gt;
           swap  temp1&lt;br /&gt;
           andi  temp1, 0b00001111&lt;br /&gt;
           out   LCD_PORT, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           andi  temp2, 0b00001111&lt;br /&gt;
           out   LCD_PORT, temp2&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay50us&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kurz zur Funktionsweise der Funktion &#039;&#039;&#039;lcd_number&#039;&#039;&#039;: Die Zahl in einem Register bewegt sich im Wertebereich 0 bis 255. Um herauszufinden, wie die Hunderterstelle lautet, zieht die Funktion einfach in einer Schleife immer wieder 100 von der Schleife ab, bis bei der Subtraktion ein Unterlauf, angezeigt durch das Setzen des Carry-Bits bei der Subtraktion, entsteht. Die Anzahl wird im Register &#039;&#039;&#039;temp1&#039;&#039;&#039; mitgezählt. Da dieses Register mit dem ASCII Code von &#039;0&#039; initialisiert wurde, und dieser ASCII Code bei jedem Schleifendurchlauf um 1 erhöht wird, können wir das Register &#039;&#039;&#039;temp1&#039;&#039;&#039; direkt zur Ausgabe des Zeichens für die Hunderterstelle durch die Funktion &#039;&#039;&#039;lcd_data&#039;&#039;&#039; benutzen. Völlig analog funktioniert auch die Ausgabe der Zehnerstelle.&lt;br /&gt;
&lt;br /&gt;
===Unterdrückung von führenden Nullen===&lt;br /&gt;
&lt;br /&gt;
Diese Funktion gibt jede Zahl im Register &#039;&#039;&#039;temp1&#039;&#039;&#039; immer mit 3 Stellen aus. Führende Nullen werden nicht unterdrückt. Möchte man dies ändern, so ist das ganz leicht möglich: Vor Ausgabe der Hunderterstelle muss lediglich überprüft werden, ob die Entsprechende Ausgabe eine &#039;0&#039; wäre. Ist sie das, so wird die Ausgabe übersprungen. Ist es allerdings eine Zahl 1..9, so muss sie der Zehner Stelle signalisieren, daß eine Prüfung auf eine &#039;0&#039; nicht stattfinden darf. Und dazu wird das T-Flag im SREG genutzt. Lediglich in der Einerstelle wird jede Ziffer wie errechnet ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ...&lt;br /&gt;
                                  ; die Hunderterstelle ausgeben, wenn&lt;br /&gt;
                                  ; sie nicht &#039;0&#039; ist&lt;br /&gt;
           clt                    ; T-Flag löschen&lt;br /&gt;
           cpi   temp1, &#039;0&#039;&lt;br /&gt;
           breq  lcd_number_1a&lt;br /&gt;
           rcall lcd_data         ; die Hunderterstelle ausgeben&lt;br /&gt;
           set                    ; T-Flag im SREG setzen da 100er Stelle eine&lt;br /&gt;
                                  ; 1..9 war&lt;br /&gt;
&lt;br /&gt;
lcd_number_1a:&lt;br /&gt;
           ...&lt;br /&gt;
&lt;br /&gt;
           ...&lt;br /&gt;
           brts  lcd_number_2a    ; Test auf &#039;0&#039; überspringen, da 100er eine&lt;br /&gt;
                                  ; 1..9 war (unbedingt anzeigen&lt;br /&gt;
                                  ; auch wenn der Zehner eine &#039;0&#039; ist)&lt;br /&gt;
           cpi   temp1, &#039;0&#039;       ; ansonsten Test auf &#039;0&#039;&lt;br /&gt;
           breq  lcd_number_2b&lt;br /&gt;
lcd_number_2a:        &lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
lcd_number_2b:&lt;br /&gt;
           ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Verfahren, die einzelnen Stellen durch Subtraktion zu bestimmen, ist bei kleinen Zahlen eine durchaus gängige Alternative. Vor allem dann, wenn keine hardwaremäßige Unterstützung für Multiplikation und Division zur Verfügung steht. Ansonsten könnte man die die einzelnen Ziffern auch durch Division bestimmen. Das Prinzip ist folgendes (beispielhaft an der Zahl 52783 gezeigt)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   52783 / 10          -&amp;gt; 5278&lt;br /&gt;
   52783 - 5278 * 10   -&amp;gt;          3&lt;br /&gt;
&lt;br /&gt;
   5278 / 10           -&amp;gt; 527&lt;br /&gt;
   5278 - 527 * 10     -&amp;gt;          8&lt;br /&gt;
&lt;br /&gt;
   527 / 10            -&amp;gt; 52&lt;br /&gt;
   527 - 52 * 10       -&amp;gt;          7&lt;br /&gt;
&lt;br /&gt;
   52 / 10             -&amp;gt; 5&lt;br /&gt;
   52 - 5 * 10         -&amp;gt;          2&lt;br /&gt;
&lt;br /&gt;
   5 / 10              -&amp;gt; 0&lt;br /&gt;
   5 - 0 * 10          -&amp;gt;          5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Prinzip ist also die Restbildung bei einer fortgesetzten Division durch 10, wobei die einzelnen Ziffern in umgekehrter Reihenfolge ihrer Wertigkeit entstehen. Dadurch hat man aber ein Problem: Damit die Zeichen in der richtigen Reihenfolge ausgegeben werden können, muß man sie meistens zwischenspeichern um sie in der richtigen Reihenfole ausgeben zu können. Wird die Zahl in einem Feld von immer gleicher Größe ausgegeben, dann kann man auch die Zahl von rechts nach links ausgeben (bei einem LCD ist das möglich).&lt;br /&gt;
&lt;br /&gt;
===Hexadezimal ausgeben===&lt;br /&gt;
&lt;br /&gt;
Zu guter letzt hier noch eine Funktion, die eine Zahl aus dem Register &#039;&#039;&#039;temp1&#039;&#039;&#039; in hexadezimaler Form ausgibt. Die Funktion weist keine Besonderheiten auf und sollte unmittelbar verständlich sein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 8 Bit Zahl ohne Vorzeichen hexadezimal ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_number_hex:&lt;br /&gt;
           swap  temp1&lt;br /&gt;
           rcall lcd_number_hex_digit&lt;br /&gt;
           swap  temp1&lt;br /&gt;
&lt;br /&gt;
lcd_number_hex_digit:&lt;br /&gt;
           push  temp1&lt;br /&gt;
&lt;br /&gt;
           andi  temp1, $0F&lt;br /&gt;
           cpi   temp1, 10&lt;br /&gt;
           brlt  lcd_number_hex_digit_1&lt;br /&gt;
           subi  temp1, -( &#039;A&#039; - &#039;9&#039; - 1 ) ; es wird subi mit negativer&lt;br /&gt;
                                           ; Konstante verwendet,&lt;br /&gt;
                                           ; weil es kein addi gibt&lt;br /&gt;
lcd_number_hex_digit_1:&lt;br /&gt;
           subi  temp1, -&#039;0&#039;               ; ditto&lt;br /&gt;
           rcall  lcd_data&lt;br /&gt;
           &lt;br /&gt;
           pop   temp1&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Binär ausgeben===&lt;br /&gt;
Um die Sache komplett zu machen; Hier eine Routine mit der man eine 8 Bit-Zahl binär auf das LC-Display ausgeben kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 8 Bit Zahl ohne Vorzeichen binär ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
&lt;br /&gt;
; eine Zahl aus dem Register temp1 binär ausgeben&lt;br /&gt;
lcd_number_bit:&lt;br /&gt;
	   push temp1		  ; temp1 gesichert&lt;br /&gt;
           push temp2&lt;br /&gt;
	   push temp3&lt;br /&gt;
&lt;br /&gt;
	   mov temp2, temp1;&lt;br /&gt;
&lt;br /&gt;
	   ldi temp3, 8;      ; 8 Bits werden ausgelesen&lt;br /&gt;
lcd_number_loop:           &lt;br /&gt;
	   dec temp3;&lt;br /&gt;
	   rol temp2;         ; Datenbits ins Carry geschoben ...&lt;br /&gt;
	   brcc lcd_number_bit_carryset_0; &lt;br /&gt;
	   brcs lcd_number_bit_carryset_1;&lt;br /&gt;
           rjmp lcd_number_loop;&lt;br /&gt;
&lt;br /&gt;
lcd_number_bit_carryset_0:	 &lt;br /&gt;
	   ldi temp1, &#039;0&#039;     ; Bit low ausgeben&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
	   tst temp3;&lt;br /&gt;
	   breq lcd_number_ende;&lt;br /&gt;
	   rjmp lcd_number_loop;&lt;br /&gt;
&lt;br /&gt;
lcd_number_bit_carryset_1:&lt;br /&gt;
           ldi temp1, &#039;1&#039;     ; Bit high ausgeben&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           tst temp3;&lt;br /&gt;
	   breq lcd_number_ende;&lt;br /&gt;
	   rjmp lcd_number_loop;&lt;br /&gt;
&lt;br /&gt;
lcd_number_ende:&lt;br /&gt;
	   pop temp3&lt;br /&gt;
	   pop temp2&lt;br /&gt;
	   pop temp1&lt;br /&gt;
	   ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eine 16-Bit Zahl aus einem Registerpärchen ausgeben===&lt;br /&gt;
&lt;br /&gt;
Um eine 16 Bit Zahl auszugeben wird wieder das bewährte Schema benutzt die einzelnen Stellen durch Subtraktion abzuzählen. Da es sich hierbei allerdings um eine 16 Bit Zahl handelt, müssen die Subtraktionen als 16-Bit Arithmetik ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 16 Bit Zahl ohne Vorzeichen ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp2 (low Byte) / temp3 (high Byte)&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_number16:&lt;br /&gt;
           push  temp1&lt;br /&gt;
           push  temp2&lt;br /&gt;
           push  temp3&lt;br /&gt;
&lt;br /&gt;
; ** Zehntausender **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number1:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, low(10000)&lt;br /&gt;
           sbci  temp3, high(10000)&lt;br /&gt;
           brcc  lcd_number1&lt;br /&gt;
           subi  temp2, low(-10000)&lt;br /&gt;
           sbci  temp3, high(-10000)&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Tausender **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number2:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, low(1000)&lt;br /&gt;
           sbci  temp3, high(1000)&lt;br /&gt;
           brcc  lcd_number2&lt;br /&gt;
           subi  temp2, low(-1000)&lt;br /&gt;
           sbci  temp3, high(-1000)&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Hunderter **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number3:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, low(100)&lt;br /&gt;
           sbci  temp3, high(100)&lt;br /&gt;
           brcc  lcd_number3&lt;br /&gt;
           subi  temp2, -100             ; + 100 High-Byte nicht mehr erforderlich&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Zehner **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number4:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, 10&lt;br /&gt;
           brcc  lcd_number4&lt;br /&gt;
           subi  temp2, -10&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Einer **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;&lt;br /&gt;
           add   temp1, temp2&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Stack aufräumen **&lt;br /&gt;
           pop   temp3&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           pop   temp1&lt;br /&gt;
&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eine BCD Zahl ausgeben===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            BCD Zahl in temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_bcd:&lt;br /&gt;
           push  temp2&lt;br /&gt;
          &lt;br /&gt;
           mov   temp2, temp1           ; temp1 sichern&lt;br /&gt;
           swap  temp1                  ; oberes mit unterem Nibble tauschen&lt;br /&gt;
           andi  temp1, 0b00001111      ; und &amp;quot;oberes&amp;quot; ausmaskieren&lt;br /&gt;
           subi  temp1, -0x30           ; in ASCII umrechnen&lt;br /&gt;
           rcall lcd_data               ; und ausgeben&lt;br /&gt;
           mov   temp1, temp2           ; ... danach unteres&lt;br /&gt;
           andi  temp1, 0b00001111&lt;br /&gt;
           subi  temp1, -0x30&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           mov   temp1, temp2           ; temp1 rekonstruieren&lt;br /&gt;
&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           ret &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Benutzerdefinierte Zeichen ==&lt;br /&gt;
[[Bild:LCD_Character_Grid.png | framed | right| Zeichenraster für 1 Zeichen]]&lt;br /&gt;
&lt;br /&gt;
Das LCD erlaubt für spezielle Zeichen, welche sich nicht im Zeichensatz finden, eigene Zeichen zu definieren. Dazu werden die ersten 8 ASCII Codes reserviert, auf denen sich laut ASCII Tabelle spezielle Steuerzeichen befinden, die normalerweise keine sichtbare Anzeige hervorrufen sondern zur Steuerung von angeschlossenen Geräten dienen. Da diese Zeichen auf einem LCD keine Rolle spielen, können diese Zeichen benutzt werden um sich selbst Sonderzeichen zu erzeugen, die für die jeweilige Anwendung massgeschneidert sind.&lt;br /&gt;
&lt;br /&gt;
Das LCD stellt für jedes Zeichen eine 8*5 Matrix zur Verfügung. Um sich selbst massgeschneiderte Zeichen zu erstellen, ist es am einfachsten sich zunächst auf einem Stück karriertem Papier zu erstellen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:BellCharacter.png | framed | right| Zeichenraster für ein Glockensymbol]]&lt;br /&gt;
&lt;br /&gt;
In diesem Raster markiert man sich dann diejenigen Pixel, die im fertigen Zeichen dunkel erscheinen sollen. Als Beispiel sei hier ein Glockensymbol gezeichnet, welches in einer Telefonapplikation zb als Kennzeichnung für einen Anruf dienen könnte.&lt;br /&gt;
&lt;br /&gt;
Eine Zeile in diesem Zeichen repräsentiert ein an das LCD zu übergebendes Byte, wobei nur die Bits 0 bis 4 relevant sind. Gesetzte Pixel stellen ein 1 Bit dar, nicht gesetzte Pixel sind ein 0-Bit. Das niederwertigste Bit einer Zeile befindet sich rechts. Auf diese Art wird jede Zeile in eine Binärzahl übersetzt, und 8 Bytes repräsentieren ein komplettes Zeichen. Am Beispiel des Glockensymboles: Die 8 Bytes, welches das Symbol repräsentiern, lauten: 0x00, 0x04, 0x0A, 0x0A, 0x0A, 0x1F, 0x04, 0x00,&lt;br /&gt;
&lt;br /&gt;
Dem LCD wird die neue Definition übertragen, indem man dem LCD die &#039;Schreibposition&#039; mittels des Kommandos &#039;&#039;Character RAM Address Set&#039;&#039; in den Zeichensatzgenerator verschiebt. Danach werden die 8 Bytes ganz normal als Daten ausgegeben, die das LCD damit in seine Zeichensatztabelle schreibt.&lt;br /&gt;
&lt;br /&gt;
Durch die Wahl der Speicheradresse definiert man, welches Zeichen (0 bis 7) man eigentlich durch eine eigene Definition ersetzen will.&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! ASCII Code || Zeichensatzadresse&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x10&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x18&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x20&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0x30&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x38&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Definition des Zeichens, muss die Schreibposition wieder explizit in den DDRAM-Bereich gesetzt werden.&lt;br /&gt;
Danach kann ein entsprechendes Zeichen mit dem definierten ASCII Code ausgegeben werden, wobei das LCD die von uns definierte Pixelform zur Anzeige benutzt.&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen natürlich erstmal die Zeichen definiert werden.&lt;br /&gt;
Dieses geschieht einmalig durch den Aufruf der Routine &amp;quot;lcd_load_user_chars&amp;quot;&lt;br /&gt;
unmittelbar nach der Initialisierung des LCD-Displays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           rcall lcd_init              ; Display initialisieren&lt;br /&gt;
           rcall lcd_load_user_chars   ; User Zeichen in das Display laden&lt;br /&gt;
           rcall lcd_clear             ; Display löschen&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch diesen Aufruf werden die im Flash definierten Zeichen in den&lt;br /&gt;
GC-Ram übertragen. Diese Zeichen werden ab Adresse 0 im GC-Ram&lt;br /&gt;
gespeichert und sind danach wie jedes andere Zeichen nutzbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           ldi   temp1, 0              ; Ausgabe des User-Char &amp;quot;A&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 6              ; Ausgabe des User-Char &amp;quot;G&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 5              ; Ausgabe des User-Char &amp;quot;E&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 4              ; Ausgabe des User-Char &amp;quot;M&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 3              ; Ausgabe des User-Char &amp;quot;-&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 2              ; Ausgabe des User-Char &amp;quot;R&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 1              ; Ausgabe des User-Char &amp;quot;V&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 0              ; Ausgabe des User-Char &amp;quot;A&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte der Schriftzug &amp;quot;AVR-MEGA&amp;quot;&lt;br /&gt;
verkehrt herum (180 Grad gedreht) erscheinen.&lt;br /&gt;
&lt;br /&gt;
Es fehlt natürlich noch die Laderoutine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Lädt User Zeichen in den GC-Ram des LCD bis Tabellenende (0xFF)&lt;br /&gt;
; gelesen wird. (max. 8 Zeichen können geladen werden)&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            -   &lt;br /&gt;
; veränderte Register: temp1, temp2, temp3, zh, zl&lt;br /&gt;
; Bemerkung:           ist einmalig nach lcd_init aufzurufen&lt;br /&gt;
;       &lt;br /&gt;
&lt;br /&gt;
lcd_load_user_chars:&lt;br /&gt;
        ldi    zl, LOW (ldc_user_char * 2) ; Adresse der Zeichentabelle&lt;br /&gt;
        ldi    zh, HIGH(ldc_user_char * 2) ; in den Z-Pointer laden&lt;br /&gt;
        clr    temp3                       ; aktuelles Zeichen = 0 &lt;br /&gt;
&lt;br /&gt;
lcd_load_user_chars_2:&lt;br /&gt;
        clr    temp2                       ; Linienzähler = 0&lt;br /&gt;
&lt;br /&gt;
lcd_load_user_chars_1:&lt;br /&gt;
        ldi    temp1, 0b01000000           ; Kommando:    0b01aaalll&lt;br /&gt;
        add    temp1, temp3                ; + akt. Zeichen  (aaa)&lt;br /&gt;
        add    temp1, temp2                ; + akt. Linie       (lll)&lt;br /&gt;
        rcall  lcd_command                 ; Kommando schreiben&lt;br /&gt;
&lt;br /&gt;
        lpm    temp1, Z+                   ; Zeichenline laden &lt;br /&gt;
        rcall  lcd_data                    ; ... und ausgeben&lt;br /&gt;
&lt;br /&gt;
        ldi    temp1, 0b01001000           ; Kommando:    0b01aa1lll         &lt;br /&gt;
        add    temp1, temp3                ; + akt. Zeichen  (aaa)       &lt;br /&gt;
        add    temp1, temp2                ; + akt. Linie       (lll)&lt;br /&gt;
        rcall  lcd_command&lt;br /&gt;
&lt;br /&gt;
        lpm    temp1, Z+                   ; Zeichenline laden&lt;br /&gt;
        rcall  lcd_data                    ; ... und ausgeben &lt;br /&gt;
        &lt;br /&gt;
        inc    temp2                       ; Linienzähler + 1&lt;br /&gt;
        cpi    temp2, 8                    ; 8 Linien fertig?&lt;br /&gt;
        brne   lcd_load_user_chars_1       ; nein, dann nächste Linie &lt;br /&gt;
		&lt;br /&gt;
        subi   temp3, -0x10                ; zwei Zeichen weiter (addi 0x10)&lt;br /&gt;
        lpm    temp1, Z                    ; nächste Linie laden&lt;br /&gt;
        cpi    temp1, 0xFF                 ; Tabellenende erreicht? &lt;br /&gt;
        brne   lcd_load_user_chars_2       ; nein, dann die nächsten&lt;br /&gt;
                                           ; zwei Zeichen&lt;br /&gt;
        ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... und die Zeichendefinition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
ldc_user_char:&lt;br /&gt;
                              ;    Zeichen &lt;br /&gt;
                              ;   0       1&lt;br /&gt;
       .db 0b10001, 0b00100   ; @   @ ,   @&lt;br /&gt;
       .db 0b10001, 0b01010   ; @   @ ,  @ @&lt;br /&gt;
       .db 0b11111, 0b10001   ; @@@@@ , @   @&lt;br /&gt;
       .db 0b10001, 0b10001   ; @   @ , @   @&lt;br /&gt;
       .db 0b10001, 0b10001   ; @   @ , @   @&lt;br /&gt;
       .db 0b10001, 0b10001   ; @   @ , @   @&lt;br /&gt;
       .db 0b01110, 0b10001   ;  @@@  , @   @&lt;br /&gt;
       .db 0b00000, 0b00000   ;       , &lt;br /&gt;
&lt;br /&gt;
                              ;    Zeichen&lt;br /&gt;
                              ;   2       3&lt;br /&gt;
       .db 0b10001, 0b00000   ; @   @ , &lt;br /&gt;
       .db 0b01001, 0b00000   ;  @  @ , &lt;br /&gt;
       .db 0b00101, 0b00000   ;   @ @ , &lt;br /&gt;
       .db 0b11111, 0b11111   ; @@@@@ , @@@@@ &lt;br /&gt;
       .db 0b10001, 0b00000   ; @   @ , &lt;br /&gt;
       .db 0b10001, 0b00000   ; @   @ , &lt;br /&gt;
       .db 0b01111, 0b00000   ;  @@@@ , &lt;br /&gt;
       .db 0b00000, 0b00000   ;       ,  &lt;br /&gt;
&lt;br /&gt;
                              ;    Zeichen&lt;br /&gt;
                              ;   4       5&lt;br /&gt;
       .db 0b10001, 0b11111   ; @   @ , @@@@@  &lt;br /&gt;
       .db 0b10001, 0b00001   ; @   @ ,     @&lt;br /&gt;
       .db 0b10001, 0b00001   ; @   @ ,     @&lt;br /&gt;
       .db 0b10001, 0b01111   ; @   @ ,  @@@@ &lt;br /&gt;
       .db 0b10101, 0b00001   ; @ @ @ ,     @&lt;br /&gt;
       .db 0b11011, 0b00001   ; @@ @@ ,     @&lt;br /&gt;
       .db 0b10001, 0b11111   ; @   @ , @@@@@&lt;br /&gt;
       .db 0b00000, 0b00000   ;       ,  &lt;br /&gt;
&lt;br /&gt;
                              ;    Zeichen&lt;br /&gt;
                              ;   6       7&lt;br /&gt;
       .db 0b11110, 0b11111   ; @@@@  , @@@@@  &lt;br /&gt;
       .db 0b10001, 0b01010   ; @   @ ,  @ @ &lt;br /&gt;
       .db 0b10001, 0b00100   ; @   @ ,   @&lt;br /&gt;
       .db 0b11101, 0b01110   ; @@@ @ ,  @@@&lt;br /&gt;
       .db 0b00001, 0b00100   ;     @ ,   @&lt;br /&gt;
       .db 0b10001, 0b01010   ; @   @ ,  @ @&lt;br /&gt;
       .db 0b01110, 0b11111   ;  @@@  , @@@@@&lt;br /&gt;
       .db 0b00000, 0b00000   ;       ,  &lt;br /&gt;
&lt;br /&gt;
       ; End of Tab&lt;br /&gt;
       .db 0xFF, 0xFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Der überarbeitete, komplette Code==&lt;br /&gt;
&lt;br /&gt;
Hier also die komplett überarbeitete Version der LCD Funktionen.&lt;br /&gt;
&lt;br /&gt;
Die für die Benutzung relevanten Funktionen&lt;br /&gt;
* &#039;&#039;&#039;lcd_init&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_clear&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_home&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_data&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_command&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_flash_string&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_number&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_number_hex&#039;&#039;&#039;&lt;br /&gt;
sind so ausgeführt, dass sie kein Register (ausser dem Statusregister &#039;&#039;&#039;SREG&#039;&#039;&#039;) verändern. Die bei manchen Funktionen notwendige Argumente werden immer im Register &#039;&#039;&#039;temp1&#039;&#039;&#039; übergeben, wobei &#039;&#039;&#039;temp1&#039;&#039;&#039; vom Usercode definiert werden muss.&lt;br /&gt;
&lt;br /&gt;
[[Media:lcd-routines.asm|Download lcd-routines.asm]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Stack|&lt;br /&gt;
zurücklink=AVR-Tutorial: Stack|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Interrupts|&lt;br /&gt;
vorlink=AVR-Tutorial: Interrupts}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial|LCD]]&lt;br /&gt;
[[Category:LCD]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_LCD&amp;diff=88296</id>
		<title>AVR-Tutorial: LCD</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_LCD&amp;diff=88296"/>
		<updated>2015-04-13T18:52:08Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Das LCD und sein Controller */ Nicht alle LCD-Controller verkraften negative Spannungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kaum ein elektronisches Gerät kommt heutzutage noch ohne ein LCD daher. Ist doch auch praktisch, Informationen im Klartext anzeigen zu können, ohne irgendwelche LEDs blinken zu lassen. Kein Wunder also, dass die häufigste Frage in Mikrocontroller-Foren ist: &amp;quot;Wie kann ich ein LCD anschließen?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Das LCD und sein Controller==&lt;br /&gt;
&lt;br /&gt;
Die meisten Text-LCDs verwenden den Controller [[HD44780|&#039;&#039;&#039;HD44780&#039;&#039;&#039;]] oder einen kompatiblen (z.&amp;amp;nbsp;B. KS0070) und haben 14 oder 16 Pins.&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Pinbelegung ist meist (Ausnahme z.&amp;amp;nbsp;B. TC1602E (Pollin 120420): V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt; und V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; vertauscht) folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ACHTUNG: Es gibt Displays mit abweichender Anschluss-Belegung, falscher Anschluss kann zur Zerstörung führen! Daher immer das zugehörige Datenblatt zu Rate ziehen!&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Einzelheiten unter [http://www.mikrocontroller.net/articles/HD44780 Artikel zum Controller HD44780]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! Pin # || Bezeichnung || Funktion&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; (selten: V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt;)&lt;br /&gt;
||  GND (selten: +5 V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  2&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt; (selten: V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt;)&lt;br /&gt;
||  +5 V (selten: GND)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  3&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt;, V0, V5&lt;br /&gt;
||  Kontrastspannung (-5 V / 0 V bis 5 V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  4&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  RS&lt;br /&gt;
||  Register Select (0=Befehl/Status 1=Daten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  5&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  RW&lt;br /&gt;
||  1=Read 0=Write&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  6&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  E&lt;br /&gt;
||  0=Disable 1=Enable&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  7&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB0&lt;br /&gt;
||  Datenbit 0&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  8&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB1&lt;br /&gt;
||  Datenbit 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  9&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB2&lt;br /&gt;
||  Datenbit 2&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  10&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB3&lt;br /&gt;
||  Datenbit 3&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  11&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB4&lt;br /&gt;
||  Datenbit 4&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  12&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB5&lt;br /&gt;
||  Datenbit 5&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  13&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB6&lt;br /&gt;
||  Datenbit 6&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  14&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  DB7&lt;br /&gt;
||  Datenbit 7&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  15&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  A&lt;br /&gt;
||  LED-Beleuchtung, meist Anode&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  16&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  K&lt;br /&gt;
||  LED-Beleuchtung, meist Kathode&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Unbedingt von der richtigen Seite zu zählen anfangen! Meistens ist das Pin1-Pad eckig oder daneben eine kleine 1 auf der LCD-Platine, ansonsten im Datenblatt nachschauen.&lt;br /&gt;
&lt;br /&gt;
Bei der DIL-Version (2x7, 2x8 Kontakte) auch darauf achten, auf welcher Platinen-Seite der Stecker montiert wird: auf der falschen (meist hinteren) Seite sind dann die Flachbandleitungen 1 und 2, 3 und 4  usw. vertauscht. Das kann man kompensieren, indem man es auf der anderen Kabelseite genauso permutiert oder es auf dem Layout bewusst so legt (Stecker auf der Bottom-Seite plazieren). Man kann es NICHT kompensieren, indem man das Flachbandkabel auf der anderen Seite in den Stecker führt.&lt;br /&gt;
&lt;br /&gt;
Bei LCDs mit 16-poligem Anschluss sind die beiden letzten Pins für die Hintergrundbeleuchtung reserviert. Hier unbedingt das Datenblatt zu Rate ziehen. Die beiden Anschlüsse sind je nach Hersteller verdreht beschaltet. Falls kein Datenblatt vorliegt, kann man mit einem Durchgangsprüfer feststellen, welcher Anschluss mit Masse (GND) verbunden ist.&lt;br /&gt;
&lt;br /&gt;
V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; wird ganz einfach an GND angeschlossen und V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;=V&amp;lt;sub&amp;gt;DD&amp;lt;/sub&amp;gt; an +5 V. V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt; = V0 = V5 kann man testweise auch an GND legen. Wenn das LCD dann zu dunkel sein sollte, muss man ein 10k&amp;amp;Omega;-Potentiometer zwischen GND und 5 V schalten, mit dem Schleifer an V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt;. Meist kann man den +5 V-Anschluss am Poti weglassen, da im Display ein Pull-up-Widerstand ist:&lt;br /&gt;
&lt;br /&gt;
[[Bild:LCD_Vee.gif|framed|center| Gewinnung der Kontrastspannung]]&lt;br /&gt;
&lt;br /&gt;
Wenn der Kontrast zu schwach sein sollte (z.B. bei tiefen Temperaturen oder bei Betrieb mit 3.3V), kann man anstelle von GND eine negative Spannung ans Kontrast-Poti legen. Diese kann bis -5 V gehen und kann leicht aus einem Timerpin des µC, einem Widerstand, zwei Dioden und zwei Kondensatoren erzeugt werden. So wird auch ein digital einstellbarer Kontrast mittels PWM ermöglicht. ACHTUNG: Es gibt jedoch auch Displaycontroller wie den Epson SED1278, die zwar Software-kompatibel sind, aber keine negativen Kontrastspannung verkraften. Wird der Kontrast also bei negativer Spannung schlechter oder geht das Display ganz aus, ist davon auszugehen, dass der Controller diesen Betriebsmodus nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei verschiedene Möglichkeiten zur Ansteuerung eines solchen Displays: den &#039;&#039;&#039;8-Bit-&#039;&#039;&#039; und den &#039;&#039;&#039;4-Bit-&#039;&#039;&#039;Modus.&lt;br /&gt;
* Für den &#039;&#039;&#039;8-Bit-Modus&#039;&#039;&#039; werden (wie der Name schon sagt) alle acht Datenleitungen zur Ansteuerung verwendet, somit kann durch einen Zugriff immer ein ganzes Byte übertragen werden.&lt;br /&gt;
* Der &#039;&#039;&#039;4-Bit-Modus&#039;&#039;&#039; verwendet nur die oberen vier Datenleitungen (&#039;&#039;&#039;DB4-DB7&#039;&#039;&#039;). Um ein Byte zu übertragen, braucht man somit zwei Zugriffe, wobei zuerst das höherwertige &#039;&#039;&#039;&amp;quot;Nibble&amp;quot;&#039;&#039;&#039; (= 4 Bits), also Bit 4 bis Bit 7 übertragen wird und dann das niederwertige, also Bit 0 bis Bit 3. Die unteren Datenleitungen des LCDs, die beim Lesezyklus Ausgänge sind, lässt man offen (siehe Datasheets, z.&amp;amp;nbsp;B. vom KS0070).&lt;br /&gt;
&lt;br /&gt;
Der 4-Bit-Modus hat den Vorteil, dass man 4 IO-Pins weniger benötigt als beim 8-Bit-Modus. 6 bzw. 7 Pins (eines Portes) reichen aus.&lt;br /&gt;
&lt;br /&gt;
Neben den vier Datenleitungen (DB4, DB5, DB6 und DB7) werden noch die Anschlüsse &#039;&#039;&#039;RS&#039;&#039;&#039;, &#039;&#039;&#039;RW&#039;&#039;&#039; und &#039;&#039;&#039;E&#039;&#039;&#039; benötigt. &lt;br /&gt;
&lt;br /&gt;
* Über &#039;&#039;&#039;RS&#039;&#039;&#039; wird ausgewählt, ob man einen Befehl oder ein Datenbyte an das LCD schicken möchte. Beim Schreiben gilt: ist RS Low, dann wird das ankommende Byte als Befehl interpretiert; Ist RS high, wird das Byte auf dem LCD angezeigt (genauer: ins Data-Register geschrieben, kann auch für den CG bestimmt sein). &lt;br /&gt;
* &#039;&#039;&#039;RW&#039;&#039;&#039; legt fest, ob geschrieben oder gelesen werden soll. High bedeutet lesen, low bedeutet schreiben. Wenn man RW auf lesen einstellt und RS auf Befehl, dann kann man das &#039;&#039;&#039;Busy-Flag&#039;&#039;&#039; an DB7 lesen, das anzeigt, ob das LCD den vorhergehenden Befehl fertig verarbeitet hat. Ist RS auf Daten eingestellt, dann kann man z.&amp;amp;nbsp;B. den Inhalt des Displays lesen - was jedoch nur in den wenigsten Fällen Sinn macht. Deshalb kann man RW dauerhaft auf low lassen (= an GND anschließen), so dass man noch ein IO-Pin am Controller einspart. Der Nachteil ist, dass man dann das Busy-Flag nicht lesen kann, weswegen man nach jedem Befehl ca. 50 µs (beim Return Home 2 ms, beim Clear Display 20 ms) warten sollte, um dem LCD Zeit zum Ausführen des Befehls zu geben. Dummerweise schwankt die Ausführungszeit von Display zu Display und ist auch von der Betriebsspannung abhängig. Für professionellere Sachen also lieber den IO-Pin opfern und Busy abfragen.&lt;br /&gt;
* Der &#039;&#039;&#039;E&#039;&#039;&#039; Anschluss schließlich signalisiert dem LCD, dass die übrigen Datenleitungen jetzt korrekte Pegel angenommen haben und es die gewünschten Daten von den Datenleitungen bzw. Kommandos von den Datenleitungen übernehmen kann. Beim Lesen gibt das Display die Daten / Status so lange aus, wie E high ist. Beim Schreiben übernimmt das Display die Daten mit der fallenden Flanke.&lt;br /&gt;
&lt;br /&gt;
== Anschluss an den Controller ==&lt;br /&gt;
&lt;br /&gt;
Jetzt, da wir wissen, welche Anschlüsse das LCD benötigt, können wir das LCD mit dem Mikrocontroller verbinden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ACHTUNG: Es gibt Displays mit abweichender Anschluss-Belegung (z. B. TC1602E (Pollin 120420): Vdd und Vss vertauscht), falscher Anschluss kann zur Zerstörung führen! Daher immer das zugehörige Datenblatt zu Rate ziehen.&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Einzelheiten unter [http://www.mikrocontroller.net/articles/HD44780 Artikel zum Controller HD44780]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!Pinnummer&amp;lt;BR&amp;gt;LCD || Bezeichnung || Anschluss&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |1 || V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; || GND (beim TC1602E: V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |2 || V&amp;lt;sub&amp;gt;CC&amp;lt;/sub&amp;gt; || +5 V (beim TC1602E: Gnd)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3 || V&amp;lt;sub&amp;gt;EE&amp;lt;/sub&amp;gt; || GND , [[Potentiometer | Poti]] oder [[Pulsweitenmodulation | PWM]] am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |4 || RS || PD4 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |5 || RW || GND &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |6 || E || PD5 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |7 || DB0 || nicht angeschlossen &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |8 || DB1 || nicht angeschlossen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |9 || DB2 || nicht angeschlossen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |10 || DB3 || nicht angeschlossen&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |11 || DB4 || PD0 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |12 || DB5 || PD1 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |13 || DB6 || PD2 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |14 || DB7 || PD3 am AVR&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |15 || A || Vorsicht! Meistens nicht direkt an +5 V abschließbar,&amp;lt;br /&amp;gt; sondern nur über einen Vorwiderstand, der an die Daten&amp;lt;br /&amp;gt;der Hintergrundbeleuchtung angepasst werden muss.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |16 || K || GND&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok. Alles ist verbunden. Wenn man jetzt den Strom einschaltet, sollten ein oder zwei schwarze Balken auf dem Display angezeigt werden. &lt;br /&gt;
&lt;br /&gt;
Doch wie bekommt man jetzt die Befehle und Daten in das Display? Dazu muss das LCD initialisiert werden und man muss Befehle (Commands) und seine Daten an das LCD senden. Weil die Initialisierung ein Spezialfall der Übertragung von Befehlen ist, im Folgenden zunächst die Erklärung für die Übertragung von Werten an das LCD.&lt;br /&gt;
&lt;br /&gt;
== Ansteuerung des LCDs im 4-Bit-Modus ==&lt;br /&gt;
&lt;br /&gt;
Um ein Byte zu übertragen, muss man es erstmal in die beiden Nibbles zerlegen, die getrennt übertragen werden. Da das obere Nibble (Bit 4 - Bit 7) als erstes übertragen wird, die 4 Datenleitungen jedoch an die vier unteren Bits des Port D angeschlossen sind, muss man die beiden Nibbles des zu übertragenden Bytes erstmal vertauschen. Der AVR kennt dazu praktischerweise einen eigenen Befehl: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           swap r16               ; vertauscht die beiden Nibbles von r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus 0b00100101 wird so z.&amp;amp;nbsp;B. 0b01010010. &lt;br /&gt;
&lt;br /&gt;
Jetzt sind die Bits für die erste Phase der Übertragung an der richtigen Stelle. Trotzdem wollen wir das Ergebnis nicht einfach so mit &#039;&#039;&#039;out PORTD, r16&#039;&#039;&#039; an den Port geben. Um die Hälfte des Bytes, die jetzt nicht an die Datenleitungen des LCDs gegeben wird auf null zu setzen, verwendet man folgenden Befehl: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           andi r16, 0b00001111   ; Nur die vier unteren (mit 1 markierten)&lt;br /&gt;
                                  ; Bits werden übernommen, alle anderen werden null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also: Das obere Nibble wird erst mit dem unteren vertauscht, damit es unten ist. Dann wird das obere (das wir jetzt noch nicht brauchen) auf null gesetzt. &lt;br /&gt;
&lt;br /&gt;
Jetzt müssen wir dem LCD noch mitteilen, ob wir Daten oder Befehle senden wollen. Das machen wir, indem wir das Bit, an dem RS angeschlossen ist (PD4), auf 0 (Befehl senden) oder auf 1 (Daten senden) setzen. Um ein Bit in einem normalen Register zu setzen, gibt es den Befehl sbr (Set Bits in Register). Dieser Befehl unterscheidet sich jedoch von sbi (das nur für IO-Register gilt) dadurch, dass man nicht die Nummer des zu setzenden Bits angibt, sondern eine Bitmaske. Das geht so: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           sbr r16, 0b00010000     ; Bit 4 setzen, alle anderen Bits bleiben gleich&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RS ist an PD4 angeschlossen. Wenn wir r16 an den Port D ausgeben, ist RS jetzt also high und das LCD erwartet Daten anstatt von Befehlen. &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis können wir jetzt endlich direkt an den Port D übergeben: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           out PORTD, r16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich muss vorher der Port D auf Ausgang geschaltet werden, indem man 0xFF ins Datenrichtungsregister DDRD schreibt. &lt;br /&gt;
&lt;br /&gt;
Um dem LCD zu signalisieren, dass es das an den Datenleitungen anliegende Nibble übernehmen kann, wird die E-Leitung (Enable, an PD5 angeschlossen) auf high und kurz darauf wieder auf low gesetzt. Ein Puls an dieser Leitung teilt also dem LCD mit, das die restlichen Leitungen jetzt ihren vom Programm gewollten Pegel eingenommen haben und gültig sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           sbi PORTD, 5              ; Enable high&lt;br /&gt;
           nop                       ; 3 Taktzyklen warten (&amp;quot;nop&amp;quot; = nichts tun)&lt;br /&gt;
           nop&lt;br /&gt;
           nop&lt;br /&gt;
           cbi PORTD, 5              ; Enable wieder low&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die eine Hälfte des Bytes wäre damit geschafft! Die andere Hälfte kommt direkt hinterher: Alles, was an der obenstehenden Vorgehensweise geändert werden muss, ist, das &amp;quot;swap&amp;quot; (Vertauschen der beiden Nibbles) wegzulassen.&lt;br /&gt;
&lt;br /&gt;
== Initialisierung des Displays ==&lt;br /&gt;
&lt;br /&gt;
Allerdings gibt es noch ein Problem. Wenn ein LCD eingeschaltet wird, dann läuft es zunächst im 8 Bit Modus. Irgendwie muss das Display initialisiert und auf den 4 Bit Modus umgeschaltet werden, und zwar nur mit den 4 zur Verfügung stehenden Datenleitungen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn es Probleme gibt, dann meistens an diesem Punkt. Die &amp;quot;kompatiblen&amp;quot; Kontroller sind gelegentlich doch nicht 100% identisch. Es lohnt sich, das Datenblatt (siehe Weblinks im Artikel [[LCD]]) genau zu lesen, in welcher Reihenfolge und mit welchen Abständen (Delays) die Initialisierungbefehle gesendet werden. Eine weitere Hilfe können Ansteuerungsbeispiele in Forenbeiträgen geben z.&amp;amp;nbsp;B.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/79609#664268 (A) KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
&lt;br /&gt;
=== Initialisierung für 4 Bit Modus ===&lt;br /&gt;
&lt;br /&gt;
Achtung: Im Folgenden sind alle Bytes aus Sicht des LCD-Kontrollers angegeben! Da LCD-seitig nur die Leitungen DB4 - DB7 verwendet werden, ist daher immer nur das höherwertige Nibble gültig. Durch die Art der Verschaltung (DB4 - DB7 wurde auf dem PORT an PD0 bis PD3 angeschlossen) ergibt sich eine Verschiebung, so dass das am Kontroller auszugebende Byte nibblemässig vertauscht ist!&lt;br /&gt;
&lt;br /&gt;
Die Sequenz, aus Sicht des Kontrollers, sieht so aus:&lt;br /&gt;
&lt;br /&gt;
* Nach dem Anlegen der Betriebsspannung muss eine Zeit von mindestens ca. 15ms gewartet werden, um dem LCD-Kontroller Zeit für seine eigene Initialisierung zu geben&lt;br /&gt;
* $3 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 4.1ms warten&lt;br /&gt;
* $3 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 100µs warten&lt;br /&gt;
* $3 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* $2 ins Steuerregister schreiben (RS = 0), dadurch wird auf 4 Bit Daten umgestellt&lt;br /&gt;
* Ab jetzt muss für die Übertragung eines Bytes jeweils zuerst das höherwertige Nibble und dann das niederwertige Nibble übertragen werden, wie oben beschrieben&lt;br /&gt;
* Mit dem Konfigurier-Befehl $20 das Display konfigurieren (4-Bit, 1 oder 2 Zeilen, 5x7 Format)&lt;br /&gt;
* Mit den restlichen Konfigurierbefehlen die Konfiguration vervollständigen: Display ein/aus, Cursor ein/aus, etc.&lt;br /&gt;
&lt;br /&gt;
Eine Begründung, warum die ersten Befehle dreifach geschickt werden sollen, findet sich [http://www.mikrocontroller.net/topic/158983#1508510 im Forum].&lt;br /&gt;
&lt;br /&gt;
=== Initialisierung für 8 Bit Modus ===&lt;br /&gt;
&lt;br /&gt;
Der Vollständigkeit halber hier noch die notwendige Initialiserungssequenz für den 8 Bit Modus. Da hier die Daten komplett als 1 Byte übertragen werden können, sind einige Klimmzüge wie im 4 Bit Modus nicht notwendig. Begründung für die anfänglichen Wiederholungen siehe oben.&lt;br /&gt;
&lt;br /&gt;
* Nach dem Anlegen der Betriebsspannung muss eine Zeit von mindestens ca. 15ms gewartet werden, um dem LCD-Kontroller Zeit für seine eigene Initialisierung zu geben&lt;br /&gt;
* $30 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 4.1ms warten&lt;br /&gt;
* $30 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mindestens 100µs warten&lt;br /&gt;
* $30 ins Steuerregister schreiben (RS = 0)&lt;br /&gt;
* Mit dem Konfigurier-Befehl 0x30 das Display konfigurieren (8-Bit, 1 oder 2 Zeilen, 5x7 Format)&lt;br /&gt;
* Mit den restlichen Konfigurierbefehlen die Konfiguration vervollständigen: Display ein/aus, Cursor ein/aus, etc.&lt;br /&gt;
&lt;br /&gt;
== Routinen zur LCD-Ansteuerung im 4-Bit-Modus ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden werden die bisherigen Grundroutinen zur LCD-Ansteuerung im 4-Bit-Modus zusammengefasst und kommentiert. Die darin enthaltenen Symbole (temp1, PORTD,...) müssen in einem dazugehörenden Hauptprogramm definiert werden. Dies wird nächsten Abschnitt &#039;&#039;Anwendung&#039;&#039; weiter erklärt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
;;                 LCD-Routinen                ;;&lt;br /&gt;
;;                 ============                ;;&lt;br /&gt;
;;              (c)andreas-s@web.de            ;;&lt;br /&gt;
;;                                             ;;&lt;br /&gt;
;; 4bit-Interface                              ;;&lt;br /&gt;
;; DB4-DB7:       PD0-PD3                      ;;&lt;br /&gt;
;; RS:            PD4                          ;;&lt;br /&gt;
;; E:             PD5                          ;;&lt;br /&gt;
;;                                             ;;&lt;br /&gt;
;; Takt:          4 MHz                        ;;&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ;sendet ein Datenbyte an das LCD&lt;br /&gt;
lcd_data:&lt;br /&gt;
           mov temp2, temp1             ; &amp;quot;Sicherungskopie&amp;quot; für&lt;br /&gt;
                                        ; die Übertragung des 2.Nibbles&lt;br /&gt;
           swap temp1                   ; Vertauschen&lt;br /&gt;
           andi temp1, 0b00001111       ; oberes Nibble auf Null setzen&lt;br /&gt;
           sbr temp1, 1&amp;lt;&amp;lt;4              ; entspricht 0b00010000 (Anm.1)&lt;br /&gt;
           out PORTD, temp1             ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
                                        ; 2. Nibble, kein swap da es schon&lt;br /&gt;
                                        ; an der richtigen stelle ist&lt;br /&gt;
           andi temp2, 0b00001111       ; obere Hälfte auf Null setzen &lt;br /&gt;
           sbr temp2, 1&amp;lt;&amp;lt;4              ; entspricht 0b00010000&lt;br /&gt;
           out PORTD, temp2             ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
           rcall delay50us              ; Delay-Routine aufrufen&lt;br /&gt;
           ret                          ; zurück zum Hauptprogramm&lt;br /&gt;
&lt;br /&gt;
 ; sendet einen Befehl an das LCD&lt;br /&gt;
lcd_command:                            ; wie lcd_data, nur RS=0&lt;br /&gt;
           mov temp2, temp1&lt;br /&gt;
           swap temp1&lt;br /&gt;
           andi temp1, 0b00001111&lt;br /&gt;
           out PORTD, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           andi temp2, 0b00001111&lt;br /&gt;
           out PORTD, temp2&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay50us&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; erzeugt den Enable-Puls&lt;br /&gt;
 ;&lt;br /&gt;
 ; Bei höherem Takt (&amp;gt;= 8 MHz) kann es notwendig sein, &lt;br /&gt;
 ; vor dem Enable High 1-2 Wartetakte (nop) einzufügen. &lt;br /&gt;
 ; Siehe dazu http://www.mikrocontroller.net/topic/81974#685882&lt;br /&gt;
lcd_enable:&lt;br /&gt;
           sbi PORTD, 5                 ; Enable high&lt;br /&gt;
           nop                          ; mindestens 3 Taktzyklen warten&lt;br /&gt;
           nop&lt;br /&gt;
           nop&lt;br /&gt;
           cbi PORTD, 5                 ; Enable wieder low&lt;br /&gt;
           ret                          ; Und wieder zurück                     &lt;br /&gt;
&lt;br /&gt;
 ; Pause nach jeder Übertragung&lt;br /&gt;
delay50us:                              ; 50µs Pause (bei 4 MHz)&lt;br /&gt;
           ldi  temp1, $42&lt;br /&gt;
delay50us_:dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause (bei 4 MHz)&lt;br /&gt;
           ldi  temp1, $21&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&lt;br /&gt;
 ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden&lt;br /&gt;
lcd_init:&lt;br /&gt;
           ldi  temp3,50&lt;br /&gt;
powerupwait:&lt;br /&gt;
           rcall  delay5ms&lt;br /&gt;
           dec  temp3&lt;br /&gt;
           brne powerupwait&lt;br /&gt;
           ldi temp1, 0b00000011        ; muss 3mal hintereinander gesendet&lt;br /&gt;
           out PORTD, temp1             ; werden zur Initialisierung&lt;br /&gt;
           rcall lcd_enable             ; 1&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; 2&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; und 3!&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi temp1, 0b00000010        ; 4bit-Modus einstellen&lt;br /&gt;
           out PORTD, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi temp1, 0b00101000        ; 4Bit / 2 Zeilen / 5x8&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi temp1, 0b00001100        ; Display ein / Cursor aus / kein Blinken&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi temp1, 0b00000100        ; inkrement / kein Scrollen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           ldi temp1, 0b00000001   ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; Sendet den Befehl: Cursor Home&lt;br /&gt;
lcd_home:&lt;br /&gt;
           ldi temp1, 0b00000010   ; Cursor Home&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anm.1: Siehe [[Bitmanipulation]]&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen (wie z.&amp;amp;nbsp;B. Cursorposition verändern) sollten mit Hilfe der [[AVR-Tutorial:_LCD#Welche_Befehle_versteht_das_LCD.3F|Befehlscodeliste]] nicht schwer zu realisieren sein. Einfach den Code in temp laden, lcd_command aufrufen und ggf. eine Pause einfügen.&amp;lt;br&amp;gt; &lt;br /&gt;
Natürlich kann man die LCD-Ansteuerung auch an einen anderen Port des Mikrocontrollers &amp;quot;verschieben&amp;quot;: Wenn das LCD z.&amp;amp;nbsp;B. an Port B angeschlossen ist, dann reicht es, im Programm alle &amp;quot;PORTD&amp;quot; durch &amp;quot;PORTB&amp;quot; und &amp;quot;DDRD&amp;quot; durch &amp;quot;DDRB&amp;quot; zu ersetzen.&amp;lt;br&amp;gt; &lt;br /&gt;
Wer eine höhere Taktfrequenz als 4 MHz verwendet, der sollte daran denken, die Dauer der Verzögerungsschleifen anzupassen.&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
&lt;br /&gt;
Ein Programm, das diese Routinen zur Anzeige von Text verwendet, kann z.&amp;amp;nbsp;B. so aussehen (die Datei lcd-routines.asm muss sich im gleichen Verzeichnis befinden). Nach der Initialisierung wird zuerst der Displayinhalt gelöscht. Um dem LCD ein Zeichen zu schicken, lädt man es in temp1 und ruft die Routine &amp;quot;lcd_data&amp;quot; auf. Das folgende Beispiel zeigt das Wort &amp;quot;Test&amp;quot; auf dem LCD an. &lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/sourcecode/tutorial/lcd-test.asm Download lcd-test.asm] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; .def definiert ein Synonym (Namen) für ein µC Register&lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPL, temp1&lt;br /&gt;
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPH, temp1&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, 0xFF    ; Port D = Ausgang&lt;br /&gt;
           out DDRD, temp1&lt;br /&gt;
&lt;br /&gt;
           rcall lcd_init     ; Display initialisieren&lt;br /&gt;
           rcall lcd_clear    ; Display löschen&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, &#039;T&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, &#039;e&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           &lt;br /&gt;
           ldi temp1, &#039;s&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
           ldi temp1, &#039;t&#039;     ; Zeichen anzeigen&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
           rjmp loop&lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;            ; LCD-Routinen werden hier eingefügt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für längere Texte ist die Methode, jedes Zeichen einzeln in das Register zu laden und &amp;quot;lcd_data&amp;quot; aufzurufen natürlich nicht sehr praktisch. Dazu später aber mehr.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden in Register immer irgendwelche Zahlenwerte geladen, aber in diesem Programm kommt plötzlich die Anweisung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ldi temp1, &#039;T&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
vor. Wie ist diese zu verstehen? Passiert hier etwas grundlegend anderes als beim Laden einer Zahl in ein Register?&lt;br /&gt;
&lt;br /&gt;
Die Antwort darauf lautet: Nein. Auch hier wird letztendlich nur eine Zahl in ein Register geladen. Der Schlüssel zum Verständnis beruht darauf, dass zum LCD, so wie zu allen Ausgabegeräten, für die Ausgabe von Texten immer nur Zahlen übertragen werden, sog. Codes. Zum Beispiel könnte man vereinbaren, dass ein LCD, wenn es den Ausgabecode 65 erhält, ein &#039;A&#039; anzeigt, bei einem Ausgabecode von 66 ein &#039;B&#039; usw. Naturgemäß gibt es daher viele verschiedene Code-Buchstaben Zuordnungen. Damit hier etwas Ordnung in das potentielle Chaos kommt, hat man sich bereits in der Steinzeit der Programmierung auf bestimmte Codetabellen geeinigt, von denen die verbreitetste sicherlich die ASCII-Zuordnung ist.&lt;br /&gt;
&lt;br /&gt;
==ASCII==&lt;br /&gt;
&lt;br /&gt;
ASCII steht für &#039;&#039;American Standard Code for Information Interchange&#039;&#039; und ist ein standardisierter Code zur Zeichenumsetzung. Die Codetabelle sieht hexadezimal dabei wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
!   ||x0||x1||x2||x3||x4||x5||x6||x7||x8||x9||xA||xB||xC||xD||xE||xF&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 0x&lt;br /&gt;
|NUL||SOH||STX||ETX||EOT||ENQ||ACK||BEL||BS||HT||LF||VT||FF||CR||SO||SI&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 1x&lt;br /&gt;
|DLE||DC1||DC2||DC3||DC4||NAK||SYN||ETB||CAN||EM||SUB||ESC||FS||GS||RS||US&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 2x&lt;br /&gt;
|SP||!||&amp;quot;||#||$||%||&amp;amp;||&#039;||(||)||*||+||,||-||.||/&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 3x&lt;br /&gt;
|0||1||2||3||4||5||6||7||8||9||:||;||&amp;lt;||=||&amp;gt;||?&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 4x&lt;br /&gt;
|@||A||B||C||D||E||F||G||H||I||J||K||L||M||N||O&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 5x&lt;br /&gt;
|P||Q||R||S||T||U||V||W||X||Y||Z||[||\||]||^||_&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 6x&lt;br /&gt;
|`||a||b||c||d||e||f||g||h||i||j||k||l||m||n||o&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color:#ffddcc&amp;quot;| 7x&lt;br /&gt;
|p||q||r||s||t||u||v||w||x||y||z||{|| &amp;amp;#124; ||}||~||DEL&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ersten beiden Zeilen enthalten die Codes für einige Steuerzeichen, ihre vollständige Beschreibung würde hier zu weit führen. Das Zeichen &#039;&#039;&#039;SP&#039;&#039;&#039; steht für ein &#039;&#039;Space&#039;&#039;, also ein Leerzeichen. &#039;&#039;&#039;BS&#039;&#039;&#039; steht für &#039;&#039;Backspace&#039;&#039;, also ein Zeichen zurück. &#039;&#039;&#039;DEL&#039;&#039;&#039; steht für &#039;&#039;Delete&#039;&#039;, also das Löschen eines Zeichens. &#039;&#039;&#039;CR&#039;&#039;&#039; steht für &#039;&#039;Carriage Return&#039;&#039;, also wörtlich: der Wagenrücklauf (einer Schreibmaschine), während &#039;&#039;&#039;LF&#039;&#039;&#039; für &#039;&#039;Line feed&#039;&#039;, also einen Zeilenvorschub steht.&lt;br /&gt;
&lt;br /&gt;
Der Assembler kennt diese Codetabelle und ersetzt die Zeile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ldi temp1, &#039;T&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
durch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ldi temp1, $54&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
was letztendlich auch der Lesbarkeit des Programmes zugute kommt. Funktional besteht kein Unterschied zwischen den beiden Anweisungen. Beide bewirken, dass das Register temp1 mit dem Bitmuster 01010100 ( = hexadezimal 54, = dezimal 84 oder eben der ASCII Code für &#039;&#039;&#039;T&#039;&#039;&#039;) geladen wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das LCD wiederrum kennt diese Code-Tabelle ebenfalls und wenn es über den Datenbus die Codezahl $54 zur Anzeige empfängt, dann schreibt es ein &#039;&#039;&#039;T&#039;&#039;&#039; an die aktuelle Cursorposition. Genauer gesagt, weiss das LCD nichts von einem &#039;&#039;&#039;T&#039;&#039;&#039;. Es sieht einfach in seinen internen Tabellen nach, welche Pixel beim Empfang der Codezahl $54 auf schwarz zu setzen sind. &#039;Zufällig&#039; sind das genau jene Pixel, die für uns Menschen ein &#039;&#039;&#039;T&#039;&#039;&#039; ergeben.&lt;br /&gt;
&lt;br /&gt;
==Welche Befehle versteht das LCD?==&lt;br /&gt;
&lt;br /&gt;
Auf dem LCD arbeitet ein Controller vom Typ HD44780. Dieser Kontroller versteht eine Reihe von Befehlen, die allesamt mittels lcd_command gesendet werden können. Ein Kommando ist dabei nichts anderes als ein Befehlsbyte, in dem die verschiedenen Bits verschiedene Bedeutungen haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! Bitwert   || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  0&lt;br /&gt;
||dieses Bit muss 0 sein&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  1&lt;br /&gt;
||dieses Bit muss 1 sein&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |  x&lt;br /&gt;
||der Zustand dieses Bits ist egal&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; | sonstige Buchstaben&lt;br /&gt;
||das Bit muss je nach gewünschter Funktionalität gesetzt werden.&amp;lt;br /&amp;gt;Die mögliche Funktionalität des jeweiligen Bits geht aus der Befehlsbeschreibung hervor.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: Das Kommando &#039;ON/OFF Control&#039; soll benutzt werden, um das Display einzuschalten, der Cursor soll eingeschaltet werden und der Cursor soll blinken.&lt;br /&gt;
Das Befehlsbyte ist so aufgebaut:&lt;br /&gt;
   0b00001dcb&lt;br /&gt;
Aus der Befehlsbeschreibung entnimmt man:&lt;br /&gt;
* Display ein bedeutet, dass an der Bitposition d eine 1 stehen muss.&amp;lt;br&amp;gt;&lt;br /&gt;
* Cursor ein bedeutet, dass an der Bitposition c ein 1 stehen muss.&amp;lt;br&amp;gt;&lt;br /&gt;
* Cursor blinken bedeutet, dass an der Bitposition b eine 1 stehen muss.&amp;lt;br&amp;gt;&lt;br /&gt;
Das dafür zu übertragende Befehlsbyte hat also die Gestalt 0b00001111 oder in hexadezimaler Schreibweise $0F.&lt;br /&gt;
&lt;br /&gt;
===Clear display: 0b00000001===&lt;br /&gt;
&lt;br /&gt;
Die Anzeige wird gelöscht und der Ausgabecursor kehrt an die Home Position (links, erste Zeile) zurück.&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 1.64ms&lt;br /&gt;
&lt;br /&gt;
===Cursor home: 0b0000001x===&lt;br /&gt;
&lt;br /&gt;
Der Cursor kehrt an die Home Position (links, erste Zeile) zurück. Ein verschobenes Display wird auf die Grundeinstellung zurückgesetzt.&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs bis 1.64ms&lt;br /&gt;
&lt;br /&gt;
===Entry mode: 0b000001is===&lt;br /&gt;
&lt;br /&gt;
Legt die Cursor Richtung sowie eine mögliche Verschiebung des Displays fest&lt;br /&gt;
* i = 1, Cursorposition bei Ausgabe eines Zeichens erhöhen&lt;br /&gt;
* i = 0, Cursorposition bei Ausgabe eines Zeichens vermindern&lt;br /&gt;
* s = 1, Display wird gescrollt, wenn der Cursor das Ende/Anfang, je nach Einstellung von i, erreicht hat.&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===On/off control: 0b00001dcb===&lt;br /&gt;
&lt;br /&gt;
Display insgesamt ein/ausschalten; den Cursor ein/ausschalten; den Cursor auf blinken schalten/blinken aus. Wenn das Display ausgeschaltet wird, geht der Inhalt des Displays nicht verloren. Der vorher angezeigte Text wird nach wiedereinschalten erneut angezeigt.&lt;br /&gt;
Ist der Cursor eingeschaltet, aber Blinken ausgeschaltet, so wird der Cursor als Cursorzeile in Pixelzeile 8 dargestellt. Ist Blinken eingeschaltet, wird der Cursor als blinkendes ausgefülltes Rechteck dargestellt, welches abwechselnd mit dem Buchstaben an dieser Stelle angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
* d = 0, Display aus&lt;br /&gt;
* d = 1, Display ein&lt;br /&gt;
* c = 0, Cursor aus&lt;br /&gt;
* c = 1, Cursor ein&lt;br /&gt;
* b = 0, Cursor blinken aus&lt;br /&gt;
* b = 1, Cursor blinken ein&lt;br /&gt;
 &lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Cursor/Scrollen: 0b0001srxx===&lt;br /&gt;
&lt;br /&gt;
Bewegt den Cursor oder scrollt das Display um eine Position entweder nach rechts oder nach links.&lt;br /&gt;
&lt;br /&gt;
* s = 1, Display scrollen&lt;br /&gt;
* s = 0, Cursor bewegen&lt;br /&gt;
* r = 1, nach rechts&lt;br /&gt;
* r = 0, nach links &lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Konfiguration: 0b001dnfxx===&lt;br /&gt;
&lt;br /&gt;
Einstellen der Interface Art, Modus, Font&lt;br /&gt;
* d = 0, 4-Bit Interface&lt;br /&gt;
* d = 1, 8-Bit Interface&lt;br /&gt;
* n = 0, 1 zeilig&lt;br /&gt;
* n = 1, 2 zeilig&lt;br /&gt;
* f = 0, 5x7 Pixel&lt;br /&gt;
* f = 1, 5x11 Pixel&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Character RAM Address Set: 0b01aaaaaa===&lt;br /&gt;
&lt;br /&gt;
Mit diesem Kommando werden maximal 8 selbst definierte Zeichen definiert. Dazu wird der Character RAM Zeiger auf den Anfang des Character Generator (CG) RAM gesetzt und das Zeichen durch die Ausgabe von 8 Byte definiert. Der Adresszeiger wird nach Ausgabe jeder Pixelspalte (8 Bit) vom LCD selbst erhöht. Nach Beendigung der Zeichendefinition muss die Schreibposition explizit mit dem Kommando &amp;quot;Display RAM Address Set&amp;quot; wieder in den DD-RAM Bereich gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
aaaaaa 6-bit CG RAM Adresse&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
===Display RAM Address Set: 0b1aaaaaaa===&lt;br /&gt;
&lt;br /&gt;
Den Cursor neu positionieren. Display Data (DD) Ram ist vom Character Generator (CG) Ram unabhängig. Der Adresszeiger wird bei Ausgabe eines Zeichens ins DD Ram automatisch erhöht. Das Display verhält sich so, als ob eine Zeile immer aus 40 logischen Zeichen besteht, von der, je nach konkretem Displaytyp (16 Zeichen, 20 Zeichen) immer nur ein Teil sichtbar ist.&lt;br /&gt;
&lt;br /&gt;
aaaaaaa 7-bit DD RAM Adresse. Auf 2-zeiligen Displays (und den meisten 16x1 Displays), kann die Adressangabe wie folgt interpretiert werden:&lt;br /&gt;
&lt;br /&gt;
1laaaaaa&lt;br /&gt;
* l = Zeilennummer (0 oder 1)&lt;br /&gt;
* a = 6-Bit Spaltennummer&lt;br /&gt;
&lt;br /&gt;
 --------------------------------&lt;br /&gt;
 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0&lt;br /&gt;
 --- --- --- --- --- --- --- ---&lt;br /&gt;
  1   A   A   A   A   A   A   A &lt;br /&gt;
&lt;br /&gt;
Setzt die DDRAM Adresse:&lt;br /&gt;
&lt;br /&gt;
Wenn N = 0 (1 line display)&lt;br /&gt;
    AAAAAAA = &amp;quot;00h&amp;quot; - &amp;quot;4Fh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Wenn N = 1 (2 line display) ((1x16))&lt;br /&gt;
    AAAAAAA = &amp;quot;00h&amp;quot; - &amp;quot;27h&amp;quot; Zeile 1. (0x80) &lt;br /&gt;
    AAAAAAA = &amp;quot;40h&amp;quot; - &amp;quot;67h&amp;quot; Zeile 2. (0xC0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ausführungszeit: 40µs&lt;br /&gt;
&lt;br /&gt;
==Einschub: Code aufräumen==&lt;br /&gt;
&lt;br /&gt;
Es wird Zeit, sich einmal etwas kritisch mit den bisher geschriebenen Funktionen auseinander zu setzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Portnamen aus dem Code herausziehen===&lt;br /&gt;
&lt;br /&gt;
Wenn wir die LCD-Funktionen einmal genauer betrachten, dann fällt sofort auf, dass über die Funktionen verstreut immer wieder das &#039;&#039;&#039;PORTD&#039;&#039;&#039; sowie einzelne Zahlen für die Pins an diesem Port auftauchen. Wenn das LCD an einem anderen Port betrieben werden soll, oder sich die Pin-Belegung ändert, dann muss an all diesen Stellen eine Anpassung vorgenommen werden. Dabei darf keine einzige Stelle übersehen werden, ansonsten würden die LCD-Funktionen nicht oder nicht vollständig funktionieren.&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit, dem vorzubeugen, ist es, diese immer gleichbleibenden Dinge an den Anfang der LCD-Funktionen vorzuziehen. Anstelle von PORTD wird dann im Code ein anderer Name benutzt, den man frei vergeben kann. Dem Assembler wird nur noch mitgeteilt, das dieser Name für PORTD steht. Muss das LCD an einen anderen Port angeschlossen werden, so wird nur diese Zurodnung geändert und der Assembler passt dann im restlichen Code alle davon abhängigen Anweisungen an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
;;                 LCD-Routinen                ;;&lt;br /&gt;
;;                 ============                ;;&lt;br /&gt;
;;              (c)andreas-s@web.de            ;;&lt;br /&gt;
;;                                             ;;&lt;br /&gt;
;; 4bit-Interface                              ;;&lt;br /&gt;
;; DB4-DB7:       PD0-PD3                      ;;&lt;br /&gt;
;; RS:            PD4                          ;;&lt;br /&gt;
;; E:             PD5                          ;;&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
 &lt;br /&gt;
; .equ definiert ein Symbol und dessen Wert&lt;br /&gt;
.equ LCD_PORT = PORTD&lt;br /&gt;
.equ LCD_DDR  = DDRD&lt;br /&gt;
.equ PIN_E    = 5&lt;br /&gt;
.equ PIN_RS   = 4&lt;br /&gt;
&lt;br /&gt;
 ;sendet ein Datenbyte an das LCD&lt;br /&gt;
lcd_data:&lt;br /&gt;
           mov temp2, temp1             ; &amp;quot;Sicherungskopie&amp;quot; für&lt;br /&gt;
                                        ; die Übertragung des 2.Nibbles&lt;br /&gt;
           swap temp1                   ; Vertauschen&lt;br /&gt;
           andi temp1, 0b00001111       ; oberes Nibble auf Null setzen&lt;br /&gt;
           sbr temp1, 1&amp;lt;&amp;lt;PIN_RS         ; entspricht 0b00010000&lt;br /&gt;
           out LCD_PORT, temp1          ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
                                        ; 2. Nibble, kein swap da es schon&lt;br /&gt;
                                        ; an der richtigen stelle ist&lt;br /&gt;
           andi temp2, 0b00001111       ; obere Hälfte auf Null setzen &lt;br /&gt;
           sbr temp2, 1&amp;lt;&amp;lt;PIN_RS         ; entspricht 0b00010000&lt;br /&gt;
           out LCD_PORT, temp2          ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
           rcall delay50us              ; Delay-Routine aufrufen&lt;br /&gt;
           ret                          ; zurück zum Hauptprogramm&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 ; sendet einen Befehl an das LCD&lt;br /&gt;
&lt;br /&gt;
lcd_command:                            ; wie lcd_data, nur RS=0&lt;br /&gt;
           mov temp2, temp1&lt;br /&gt;
           swap temp1&lt;br /&gt;
           andi temp1, 0b00001111&lt;br /&gt;
           out LCD_PORT, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           andi temp2, 0b00001111&lt;br /&gt;
           out LCD_PORT, temp2&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay50us&lt;br /&gt;
           ret&lt;br /&gt;
 &lt;br /&gt;
 ; erzeugt den Enable-Puls&lt;br /&gt;
lcd_enable:&lt;br /&gt;
           sbi LCD_PORT, PIN_E          ; Enable high&lt;br /&gt;
           nop                          ; 3 Taktzyklen warten&lt;br /&gt;
           nop&lt;br /&gt;
           nop&lt;br /&gt;
           cbi LCD_PORT, PIN_E          ; Enable wieder low&lt;br /&gt;
           ret                          ; Und wieder zurück                     &lt;br /&gt;
 &lt;br /&gt;
 ; Pause nach jeder Übertragung&lt;br /&gt;
delay50us:                              ; 50µs Pause&lt;br /&gt;
           ldi  temp1, $42&lt;br /&gt;
delay50us_:dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
 &lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause&lt;br /&gt;
           ldi  temp1, $21&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
 &lt;br /&gt;
 ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden&lt;br /&gt;
lcd_init:&lt;br /&gt;
           ldi   temp1, 0xFF            ; alle Pins am Ausgabeport auf Ausgang&lt;br /&gt;
           out   LCD_DDR, temp1&lt;br /&gt;
&lt;br /&gt;
           ldi   temp3,6&lt;br /&gt;
powerupwait:&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           dec   temp3&lt;br /&gt;
           brne  powerupwait&lt;br /&gt;
           ldi   temp1,    0b00000011   ; muss 3mal hintereinander gesendet&lt;br /&gt;
           out   LCD_PORT, temp1        ; werden zur Initialisierung&lt;br /&gt;
           rcall lcd_enable             ; 1&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; 2&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           rcall lcd_enable             ; und 3!&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi   temp1, 0b00000010      ; 4bit-Modus einstellen&lt;br /&gt;
           out   LCD_PORT, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ldi   temp1, 0b00101000      ; 4 Bit, 2 Zeilen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi   temp1, 0b00001100      ; Display on, Cursor off&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ldi   temp1, 0b00000100      ; endlich fertig&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           ret&lt;br /&gt;
 &lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           ldi   temp1, 0b00000001      ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&lt;br /&gt;
 ; Sendet den Befehl: Cursor Home&lt;br /&gt;
lcd_home:&lt;br /&gt;
           ldi   temp1, 0b00000010      ; Cursor Home&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;&#039;.equ&#039;&#039;&#039; werden mit dem Assembler Textersetzungen vereinbart. Der Assembler ersetzt alle Vorkomnisse des Quelltextes durch den zu ersetzenden Text. Dadurch ist es z.&amp;amp;nbsp;B. möglich, alle Vorkommnisse von &#039;&#039;&#039;PORTD&#039;&#039;&#039; durch &#039;&#039;&#039;LCD_PORT&#039;&#039;&#039; auszutauschen. Wird das LCD an einen anderen Port, z.&amp;amp;nbsp;B. &#039;&#039;&#039;PORTB&#039;&#039;&#039; gelegt, dann genügt es, die Zeilen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.equ LCD_PORT = PORTD&lt;br /&gt;
.equ LCD_DDR  = DDRD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
durch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.equ LCD_PORT = PORTB&lt;br /&gt;
.equ LCD_DDR  = DDRB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
zu ersetzen. Der Assembler sorgt dann dafür, dass diese Portänderung an den relevanten Stellen im Code über die Textersetzungen einfließt. Selbiges natürlich mit der Pin-Zuordnung.&lt;br /&gt;
&lt;br /&gt;
===Registerbenutzung===&lt;br /&gt;
&lt;br /&gt;
Bei diesen Funktionen mussten einige Register des Prozessors benutzt werden, um darin Zwischenergebnisse zu speichern bzw. zu bearbeiten.&lt;br /&gt;
&lt;br /&gt;
Beachtet werden muss dabei natürlich, dass es zu keinen Überschneidungen kommt. Solange nur jede Funktion jeweils für sich betrachtet wird, ist das kein Problem. In 20 oder 30 Code-Zeilen kann man gut verfolgen, welches Register wofür benutzt wird. Schwieriger wird es, wenn Funktionen wiederum andere Funktionen aufrufen, die ihrerseits wieder Funktionen aufrufen usw. Jede dieser Funktionen benutzt einige Register und mit zunehmender Programmgröße wird es immer schwieriger, zu verfolgen, welches Register zu welchem Zeitpunkt wofür benutzt wird.&lt;br /&gt;
&lt;br /&gt;
Speziell bei Basisfunktionen wie diesen LCD-Funktionen, ist es daher oft ratsam, dafür zu sorgen, dass jede Funktion die Register wieder in dem Zustand hinterlässt, indem sie sie auch vorgefunden hat. Wir benötigen dazu wieder den Stack, auf dem die Registerinhalte bei Betreten einer Funktion zwischengespeichert werden und von dem die Register bei Verlassen einer Funktion wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
Nehmen wir die Funktion&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           ldi   temp1, 0b00000001      ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Funktion verändert das Register temp1. Um das Register abzusichern, schreiben wir die Funktion um:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Sendet den Befehl zur Löschung des Displays&lt;br /&gt;
lcd_clear:&lt;br /&gt;
           push  temp1                  ; temp1 auf dem Stack sichern&lt;br /&gt;
           ldi   temp1, 0b00000001      ; Display löschen&lt;br /&gt;
           rcall lcd_command&lt;br /&gt;
           rcall delay5ms&lt;br /&gt;
           pop   temp1                  ; temp1 vom Stack wiederherstellen&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am besten hält man sich an die Regel: Jede Funktion ist dafür zuständig, die Register zu sichern und wieder herzustellen, die sie auch selbst verändert. &#039;&#039;&#039;lcd_clear&#039;&#039;&#039; ruft die Funktionen &#039;&#039;&#039;lcd_command&#039;&#039;&#039; und &#039;&#039;&#039;delay5ms&#039;&#039;&#039; auf. Wenn diese Funktionen selbst wieder Register verändern (und das tun sie), so ist es die Aufgabe dieser Funktionen, sich um die Sicherung und das Wiederherstellen der entsprechenden Register zu kümmern. &#039;&#039;&#039;lcd_clear&#039;&#039;&#039; sollte sich nicht darum kümmern müssen. Auf diese Weise ist das Schlimmste, das einem passieren kann, dass ein paar Register unnütz gesichert und wiederhergestellt werden. Das kostet zwar etwas Rechenzeit und etwas Speicherplatz auf dem Stack, ist aber immer noch besser als das andere Extrem: Nach einem Funktionsaufruf haben einige Register nicht mehr den Wert, den sie haben sollten, und das Programm rechnet mit falschen Zahlen weiter.&lt;br /&gt;
&lt;br /&gt;
===Lass den Assembler rechnen===&lt;br /&gt;
Betrachtet man den Code genauer, so fallen einige konstante Zahlenwerte auf (Das vorangestellte $ kennzeichnet die Zahl als Hexadezimalzahl):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
delay50us:                              ; 50µs Pause&lt;br /&gt;
           ldi  temp1, $42&lt;br /&gt;
delay50us_:&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Code benötigt eine Warteschleife, die mindestens 50µs dauert. Die beiden Befehle innerhalb der Schleife benötigen 3 Takte: 1 Takt für den &#039;&#039;&#039;dec&#039;&#039;&#039; und der &#039;&#039;&#039;brne&#039;&#039;&#039; benötigt 2 Takte, wenn die Bedingung zutrifft, der Branch also genommen wird. Bei 4 Mhz werden also 4000000 / 3 * 50 / 1000000 = 66.6 Durchläufe durch die Schleife benötigt, um eine Verzögerungszeit von 50µs (0.000050 Sekunden) zu erreichen, hexadezimal ausgedrückt: $42.&lt;br /&gt;
&lt;br /&gt;
Der springende Punkt ist: Bei anderen Taktfrequenzen müsste man nun jedesmal diese Berechnung machen und den entsprechenden Zahlenwert einsetzen. Das kann aber der Assembler genausogut erledigen. Am Anfang des Codes wird ein Eintrag definiert, der die Taktfrequenz festlegt. Traditionell heißt dieser Eintrag &amp;lt;i&amp;gt;XTAL&amp;lt;/i&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.equ XTAL  = 4000000&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
delay50us:                              ; 50µs Pause&lt;br /&gt;
           ldi  temp1, ( XTAL * 50 / 3 ) / 1000000&lt;br /&gt;
delay50us_:&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne delay50us_&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An einer anderen Codestelle gibt es weitere derartige magische Zahlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause&lt;br /&gt;
           ldi  temp1, $21&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was geht hier vor?&lt;br /&gt;
Die innere Schleife benötigt wieder 3 Takte pro Durchlauf. Bei $C9 = 201 Durchläufen werden also 201 * 3 = 603 Takte verbraucht. In der äußeren Schleife werden pro Durchlauf also 603 + 1 + 2 = 606 Takte verbraucht und einmal 605 Takte (weil der brne nicht genommen wird). Da die äußere Schleife $21 = 33 mal wiederholt wird, werden 32 * 606 + 605 = 19997 Takte verbraucht. Noch 1 Takt mehr für den allerersten ldi und 4 Takte für den ret, macht 20002 Takte. Bei 4Mhz benötigt der Prozessor 20002 / 4000000 = 0.0050005 Sekunden, also rund 5 ms. Die 7. nachkommastelle kann man an dieser Stelle getrost ignorieren. Vor allen Dingen auch deshalb, weil auch der Quarz nicht exakt 4000000 Schwingungen in der Sekunde durchführen wird.&lt;br /&gt;
Wird der Wiederholwert für die innere Schleife bei $C9 belassen, so werden 4000000 / 607 * 5 / 1000 Wiederholungen der äusseren Schleife benötigt. (Die Berechnung wurde hier etwas vereinfacht, die nicht berücksichtigten Takte fallen zeitmässig nicht weiter ins Gewicht bzw. wurden dadurch berücksichtigt, dass mit 607 anstelle von 606 gerechnet wird). Auch diese Berechnung kann wieder der Assembler übernehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Längere Pause für manche Befehle&lt;br /&gt;
delay5ms:                               ; 5ms Pause&lt;br /&gt;
           ldi  temp1, ( XTAL * 5 / 607 ) / 1000&lt;br /&gt;
WGLOOP0:   ldi  temp2, $C9&lt;br /&gt;
WGLOOP1:   dec  temp2&lt;br /&gt;
           brne WGLOOP1&lt;br /&gt;
           dec  temp1&lt;br /&gt;
           brne WGLOOP0&lt;br /&gt;
           ret                          ; wieder zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein kleines Problem kann bei der Verwendung dieses Verfahrens entstehen: Bei hohen Taktfrequenzen und großen Wartezeiten kann der berechnete Wert größer als 255 werden und man bekommt die Fehlermeldung &amp;quot;Operand(s) out of range&amp;quot; beim Assemblieren. Dieser Fall tritt zum Beispiel für obige Konstruktion bei einer Taktfrequenz von 16 MHz ein (genauer gesagt ab 15,3 MHz), während darunter XTAL beliebig geändert werden kann. Als einfachste Lösung bietet es sich an, die Zahl der Takte pro Schleifendurchlauf durch das Einfügen von &#039;&#039;&#039;nop&#039;&#039;&#039; zu erhöhen und die Berechnungsvorschrift anzupassen.&lt;br /&gt;
&lt;br /&gt;
== Ausgabe eines konstanten Textes ==&lt;br /&gt;
&lt;br /&gt;
Weiter oben wurde schon einmal ein Text ausgegeben. Dies geschah durch Ausgabe von einzelnen Zeichen. Das können wir auch anders machen. Wir können den Text im Speicher ablegen und eine Funktion schreiben, die die einzelnen Zeichen aus dem Speicher liest und aus gibt. Dabei stellt sich Frage: Woher &#039;weiß&#039; die Funktion eigentlich, wie lang der Text ist? Die Antwort darauf lautet: Sie kann es nicht wissen. Wir müssen irgendwelche Vereinbarungen treffen, woran die Funktion erkennen kann, dass der Text zu Ende ist. Im Wesentlichen werden dazu 2 Methoden benutzt:&lt;br /&gt;
* Der Text enthält ein spezielles Zeichen, welches das Ende des Textes markiert&lt;br /&gt;
* Wir speichern nicht nur den Text selbst, sondern auch die Länge des Textes&lt;br /&gt;
Mit einer der beiden Methoden ist es der Textausgabefunktion dann ein Leichtes, den Text vollständig auszugeben.&lt;br /&gt;
&lt;br /&gt;
Wir werden uns im Weiteren dafür entscheiden, ein spezielles Zeichen, eine 0 (den Wert 0, nicht das Zeichen &#039;0&#039;), dafür zu benutzen. Die Ausgabefunktionen werden dann etwas einfacher, als wenn bei der Ausgabe die Anzahl der bereits ausgegebenen Zeichen mitgezählt werden muss.&lt;br /&gt;
&lt;br /&gt;
Den Text selbst speichern wir im Flash-Speicher, also dort, wo auch das Programm gespeichert ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ; Einen konstanten Text aus dem Flash Speicher&lt;br /&gt;
 ; ausgeben. Der Text wird mit einer 0 beendet&lt;br /&gt;
lcd_flash_string:&lt;br /&gt;
           push  temp1&lt;br /&gt;
           push  ZH&lt;br /&gt;
           push  ZL&lt;br /&gt;
&lt;br /&gt;
lcd_flash_string_1:&lt;br /&gt;
           lpm   temp1, Z+&lt;br /&gt;
           cpi   temp1, 0&lt;br /&gt;
           breq  lcd_flash_string_2&lt;br /&gt;
           rcall  lcd_data&lt;br /&gt;
           rjmp  lcd_flash_string_1&lt;br /&gt;
&lt;br /&gt;
lcd_flash_string_2:&lt;br /&gt;
           pop   ZL&lt;br /&gt;
           pop   ZH&lt;br /&gt;
           pop   temp1&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Funktion benutzt den Befehl &#039;&#039;&#039;lpm&#039;&#039;&#039;, um das jeweils nächste Zeichen aus dem Flash Speicher in ein Register zur Weiterverarbeitung zu laden. Dazu wird der sog. &#039;&#039;&#039;Z-Pointer&#039;&#039;&#039; benutzt. So nennt man das Registerpaar &#039;&#039;&#039;R30&#039;&#039;&#039; und &#039;&#039;&#039;R31&#039;&#039;&#039;. Nach jedem Ladevorgang wird dabei durch den Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           lpm   temp1, Z+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
dieser Z-Pointer um 1 erhöht. Mittels &#039;&#039;&#039;cpi&#039;&#039;&#039; wird das in das Register &#039;&#039;&#039;temp1&#039;&#039;&#039; geladene Zeichen mit 0 verglichen. &#039;&#039;&#039;cpi&#039;&#039;&#039; vergleicht die beiden Zahlen und merkt sich das Ergebnis in einem speziellen Register in Form von Status Bits. &#039;&#039;&#039;cpi&#039;&#039;&#039; zieht dabei ganz einfach die beiden Zahlen voneinander ab. Sind sie gleich, so kommt da als Ergebnis 0 heraus und &#039;&#039;&#039;cpi&#039;&#039;&#039; setzt daher konsequenter Weise das Zero-Flag, das anzeigt, dass die vorhergegangene Operation eine 0 als Ergebnis hatte.&#039;&#039;&#039;breq&#039;&#039;&#039; wertet diese Status-Bits aus. Wenn die vorhergegangene Operation ein 0-Ergebnis hatte, das Zero-Flag also gesetzt ist, dann wird ein Sprung zum angegebenen Label durchgeführt. In Summe bewirkt also die Sequenz&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           cpi   temp1, 0&lt;br /&gt;
           breq  lcd_flash_string_2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
dass das gelesene Zeichen mit 0 verglichen wird und falls das gelesene&lt;br /&gt;
Zeichen tatsächlich 0 war, an der Stelle lcd_flash_string_2 weiter gemacht wird. Im anderen Fall wird die bereits geschriebene Funktion &#039;&#039;&#039;lcd_data&#039;&#039;&#039; aufgerufen, welche das Zeichen ausgibt. &#039;&#039;&#039;lcd_data&#039;&#039;&#039; erwartet dabei das Zeichen im Register &#039;&#039;&#039;temp1&#039;&#039;&#039;, genau in dem Register, in welches wir vorher mittels &#039;&#039;&#039;lpm&#039;&#039;&#039; das Zeichen geladen hatten.&lt;br /&gt;
&lt;br /&gt;
Das verwendende Programm sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
.def temp1 = r16&lt;br /&gt;
.def temp2 = r17&lt;br /&gt;
.def temp3 = r18&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPL, temp1&lt;br /&gt;
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse&lt;br /&gt;
           out SPH, temp1&lt;br /&gt;
 &lt;br /&gt;
           rcall lcd_init              ; Display initialisieren&lt;br /&gt;
           rcall lcd_clear             ; Display löschen&lt;br /&gt;
 &lt;br /&gt;
           ldi ZL, LOW(text*2)         ; Adresse des Strings in den&lt;br /&gt;
           ldi ZH, HIGH(text*2)        ; Z-Pointer laden&lt;br /&gt;
&lt;br /&gt;
           rcall lcd_flash_string      ; Unterprogramm gibt String aus der&lt;br /&gt;
                                       ; durch den Z-Pointer adressiert wird&lt;br /&gt;
loop:&lt;br /&gt;
           rjmp loop&lt;br /&gt;
&lt;br /&gt;
text:&lt;br /&gt;
           .db &amp;quot;Test&amp;quot;,0                ; Stringkonstante, durch eine 0&lt;br /&gt;
                                       ; abgeschlossen  &lt;br /&gt;
&lt;br /&gt;
.include &amp;quot;lcd-routines.asm&amp;quot;            ; LCD Funktionen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Genaueres über die Verwendung unterschiedlicher Speicher findet sich im Kapitel [[AVR-Tutorial:_Speicher|Speicher]]&lt;br /&gt;
&lt;br /&gt;
==Zahlen ausgeben==&lt;br /&gt;
Um Zahlen, die beispielsweise in einem Register gespeichert sind, ausgeben zu können, ist es notwendig sich eine Textrepräsentierung der Zahl zu generieren. Die Zahl 123 wird also in den Text &amp;quot;123&amp;quot; umgewandelt welcher dann ausgegeben wird. Aus praktischen Gründen wird allerdings der Text nicht vollständig generiert (man müsste ihn ja irgendwo zwischenspeichern) sondern die einzelnen Buchstaben werden sofort ausgegeben, sobald sie bekannt sind.&lt;br /&gt;
&lt;br /&gt;
===Dezimal ausgeben===&lt;br /&gt;
Das Prinzip der Umwandlung ist einfach. Um herauszufinden wieviele Hunderter in der Zahl 123 enthalten sind, genügt es in einer Schleife immer wieder 100 von der Zahl abzuziehen und mitzuzählen wie oft dies gelang, bevor das Ergebnis negativ wurde. In diesem Fall lautet die Antwort: 1 mal, denn 123 - 100 macht 23. Versucht man erneut 100 anzuziehen, so ergibt sich eine negative Zahl.&lt;br /&gt;
Also muss eine &#039;1&#039; ausgeben werden. Die verbleibenden 23 werden weiter behandelt, indem festgestellt wird wieviele Zehner darin enthalten sind. Auch hier wiederum: In einer Schleife solange 10 abziehen, bis das Ergebnis negativ wurde. Konkret geht das 2 mal gut, also muss das nächste auszugebende Zeichen ein &#039;2&#039; sein. Damit verbleiben noch die Einer, welche direkt in das entsprechende Zeichen umgewandelt werden können. In Summe hat man also an das Display die Zeichen &#039;1&#039; &#039;2&#039; &#039;3&#039; ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 8 Bit Zahl ohne Vorzeichen ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_number:&lt;br /&gt;
           push  temp1            ; die Funktion verändert temp1 und temp2,&lt;br /&gt;
           push  temp2            ; also sichern wir den Inhalt, um ihn am Ende&lt;br /&gt;
                                  ; wieder herstellen zu können&lt;br /&gt;
&lt;br /&gt;
           mov   temp2, temp1     ; das Register temp1 frei machen&lt;br /&gt;
                                  ; abzählen wieviele Hunderter&lt;br /&gt;
                                  ; in der Zahl enthalten sind&lt;br /&gt;
;** Hunderter ** &lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1     ; temp1 mit ASCII &#039;0&#039;-1 vorladen&lt;br /&gt;
lcd_number_1:&lt;br /&gt;
           inc   temp1            ; ASCII erhöhen (somit ist nach dem ersten&lt;br /&gt;
                                  ; Durchlauf eine &#039;0&#039; in temp1)&lt;br /&gt;
           subi  temp2, 100       ; 100 abziehen&lt;br /&gt;
           brcc  lcd_number_1     ; ist dadurch kein Unterlauf entstanden?&lt;br /&gt;
                                  ; nein, dann zurück zu lcd_number_1&lt;br /&gt;
           subi  temp2, -100      ; 100 wieder dazuzählen, da die&lt;br /&gt;
                                  ; vorherhgehende Schleife 100 zuviel&lt;br /&gt;
                                  ; abgezogen hat&lt;br /&gt;
           rcall lcd_data         ; die Hunderterstelle ausgeben&lt;br /&gt;
&lt;br /&gt;
;** Zehner  **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1     ; temp1 mit ASCII &#039;0&#039;-1 vorladen&lt;br /&gt;
lcd_number_2:&lt;br /&gt;
           inc   temp1            ; ASCII erhöhen (somit ist nach dem ersten&lt;br /&gt;
                                  ; Durchlauf eine &#039;0&#039; in temp1)&lt;br /&gt;
           subi  temp2, 10        ; 10 abziehen&lt;br /&gt;
           brcc  lcd_number_2     ; ist dadurch kein Unterlauf enstanden?&lt;br /&gt;
                                  ; nein, dann zurück zu lcd_number_2&lt;br /&gt;
           subi  temp2, -10       ; 10 wieder dazuzählen, da die&lt;br /&gt;
                                  ; vorherhgehende Schleife 10 zuviel&lt;br /&gt;
                                  ; abgezogen hat&lt;br /&gt;
           rcall lcd_data         ; die Zehnerstelle ausgeben&lt;br /&gt;
 &lt;br /&gt;
;** Einer **        &lt;br /&gt;
           ldi   temp1, &#039;0&#039;       ; die Zahl in temp2 ist jetzt im Bereich&lt;br /&gt;
           add   temp1, temp2     ; 0 bis 9. Einfach nur den ASCII Code für&lt;br /&gt;
           rcall lcd_data         ; &#039;0&#039; dazu addieren und wir erhalten dierekt&lt;br /&gt;
                                  ; den ASCII Code für die Ziffer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           pop   temp2            ; den gesicherten Inhalt von temp2 und temp1&lt;br /&gt;
           pop   temp1            ; wieder herstellen&lt;br /&gt;
           ret                    ; und zurück&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachte: Diese Funktion benutzt wiederrum die Funktion &#039;&#039;&#039;lcd_data&#039;&#039;&#039;. Anders als bei den bisherigen Aufrufen ist &#039;&#039;&#039;lcd_number&#039;&#039;&#039; aber darauf angewiesen, dass &#039;&#039;&#039;lcd_data&#039;&#039;&#039; das Register &#039;&#039;&#039;temp2&#039;&#039;&#039; unangetastet lässt. Falls sie es noch nicht getan haben, dann ist das jetzt die perfekte Gelegenheit, &#039;&#039;&#039;lcd_data&#039;&#039;&#039; mit den entsprechenden &#039;&#039;&#039;push&#039;&#039;&#039; und &#039;&#039;&#039;pop&#039;&#039;&#039; Befehlen zu versehen. Sie sollten dies unbedingt zur Übung selbst machen. Am Ende muß die Funktion dann wie diese hier aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
 ;sendet ein Datenbyte an das LCD&lt;br /&gt;
lcd_data:&lt;br /&gt;
           push  temp2&lt;br /&gt;
           mov   temp2, temp1           ; &amp;quot;Sicherungskopie&amp;quot; für&lt;br /&gt;
                                        ; die Übertragung des 2.Nibbles&lt;br /&gt;
           swap  temp1                  ; Vertauschen&lt;br /&gt;
           andi  temp1, 0b00001111      ; oberes Nibble auf Null setzen&lt;br /&gt;
           sbr   temp1, 1&amp;lt;&amp;lt;PIN_RS       ; entspricht 0b00010000&lt;br /&gt;
           out   LCD_PORT, temp1        ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
                                        ; 2. Nibble, kein swap da es schon&lt;br /&gt;
                                        ; an der richtigen stelle ist&lt;br /&gt;
           andi  temp2, 0b00001111      ; obere Hälfte auf Null setzen &lt;br /&gt;
           sbr   temp2, 1&amp;lt;&amp;lt;PIN_RS       ; entspricht 0b00010000&lt;br /&gt;
           out   LCD_PORT, temp2        ; ausgeben&lt;br /&gt;
           rcall lcd_enable             ; Enable-Routine aufrufen&lt;br /&gt;
           rcall delay50us              ; Delay-Routine aufrufen&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           ret                          ; zurück zum Hauptprogramm&lt;br /&gt;
 &lt;br /&gt;
 ; sendet einen Befehl an das LCD&lt;br /&gt;
lcd_command:                            ; wie lcd_data, nur ohne RS zu setzen&lt;br /&gt;
           push  temp2&lt;br /&gt;
           mov   temp2, temp1&lt;br /&gt;
           swap  temp1&lt;br /&gt;
           andi  temp1, 0b00001111&lt;br /&gt;
           out   LCD_PORT, temp1&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           andi  temp2, 0b00001111&lt;br /&gt;
           out   LCD_PORT, temp2&lt;br /&gt;
           rcall lcd_enable&lt;br /&gt;
           rcall delay50us&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kurz zur Funktionsweise der Funktion &#039;&#039;&#039;lcd_number&#039;&#039;&#039;: Die Zahl in einem Register bewegt sich im Wertebereich 0 bis 255. Um herauszufinden, wie die Hunderterstelle lautet, zieht die Funktion einfach in einer Schleife immer wieder 100 von der Schleife ab, bis bei der Subtraktion ein Unterlauf, angezeigt durch das Setzen des Carry-Bits bei der Subtraktion, entsteht. Die Anzahl wird im Register &#039;&#039;&#039;temp1&#039;&#039;&#039; mitgezählt. Da dieses Register mit dem ASCII Code von &#039;0&#039; initialisiert wurde, und dieser ASCII Code bei jedem Schleifendurchlauf um 1 erhöht wird, können wir das Register &#039;&#039;&#039;temp1&#039;&#039;&#039; direkt zur Ausgabe des Zeichens für die Hunderterstelle durch die Funktion &#039;&#039;&#039;lcd_data&#039;&#039;&#039; benutzen. Völlig analog funktioniert auch die Ausgabe der Zehnerstelle.&lt;br /&gt;
&lt;br /&gt;
===Unterdrückung von führenden Nullen===&lt;br /&gt;
&lt;br /&gt;
Diese Funktion gibt jede Zahl im Register &#039;&#039;&#039;temp1&#039;&#039;&#039; immer mit 3 Stellen aus. Führende Nullen werden nicht unterdrückt. Möchte man dies ändern, so ist das ganz leicht möglich: Vor Ausgabe der Hunderterstelle muss lediglich überprüft werden, ob die Entsprechende Ausgabe eine &#039;0&#039; wäre. Ist sie das, so wird die Ausgabe übersprungen. Ist es allerdings eine Zahl 1..9, so muss sie der Zehner Stelle signalisieren, daß eine Prüfung auf eine &#039;0&#039; nicht stattfinden darf. Und dazu wird das T-Flag im SREG genutzt. Lediglich in der Einerstelle wird jede Ziffer wie errechnet ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           ...&lt;br /&gt;
                                  ; die Hunderterstelle ausgeben, wenn&lt;br /&gt;
                                  ; sie nicht &#039;0&#039; ist&lt;br /&gt;
           clt                    ; T-Flag löschen&lt;br /&gt;
           cpi   temp1, &#039;0&#039;&lt;br /&gt;
           breq  lcd_number_1a&lt;br /&gt;
           rcall lcd_data         ; die Hunderterstelle ausgeben&lt;br /&gt;
           set                    ; T-Flag im SREG setzen da 100er Stelle eine&lt;br /&gt;
                                  ; 1..9 war&lt;br /&gt;
&lt;br /&gt;
lcd_number_1a:&lt;br /&gt;
           ...&lt;br /&gt;
&lt;br /&gt;
           ...&lt;br /&gt;
           brts  lcd_number_2a    ; Test auf &#039;0&#039; überspringen, da 100er eine&lt;br /&gt;
                                  ; 1..9 war (unbedingt anzeigen&lt;br /&gt;
                                  ; auch wenn der Zehner eine &#039;0&#039; ist)&lt;br /&gt;
           cpi   temp1, &#039;0&#039;       ; ansonsten Test auf &#039;0&#039;&lt;br /&gt;
           breq  lcd_number_2b&lt;br /&gt;
lcd_number_2a:        &lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
lcd_number_2b:&lt;br /&gt;
           ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Verfahren, die einzelnen Stellen durch Subtraktion zu bestimmen, ist bei kleinen Zahlen eine durchaus gängige Alternative. Vor allem dann, wenn keine hardwaremäßige Unterstützung für Multiplikation und Division zur Verfügung steht. Ansonsten könnte man die die einzelnen Ziffern auch durch Division bestimmen. Das Prinzip ist folgendes (beispielhaft an der Zahl 52783 gezeigt)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   52783 / 10          -&amp;gt; 5278&lt;br /&gt;
   52783 - 5278 * 10   -&amp;gt;          3&lt;br /&gt;
&lt;br /&gt;
   5278 / 10           -&amp;gt; 527&lt;br /&gt;
   5278 - 527 * 10     -&amp;gt;          8&lt;br /&gt;
&lt;br /&gt;
   527 / 10            -&amp;gt; 52&lt;br /&gt;
   527 - 52 * 10       -&amp;gt;          7&lt;br /&gt;
&lt;br /&gt;
   52 / 10             -&amp;gt; 5&lt;br /&gt;
   52 - 5 * 10         -&amp;gt;          2&lt;br /&gt;
&lt;br /&gt;
   5 / 10              -&amp;gt; 0&lt;br /&gt;
   5 - 0 * 10          -&amp;gt;          5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Prinzip ist also die Restbildung bei einer fortgesetzten Division durch 10, wobei die einzelnen Ziffern in umgekehrter Reihenfolge ihrer Wertigkeit entstehen. Dadurch hat man aber ein Problem: Damit die Zeichen in der richtigen Reihenfolge ausgegeben werden können, muß man sie meistens zwischenspeichern um sie in der richtigen Reihenfole ausgeben zu können. Wird die Zahl in einem Feld von immer gleicher Größe ausgegeben, dann kann man auch die Zahl von rechts nach links ausgeben (bei einem LCD ist das möglich).&lt;br /&gt;
&lt;br /&gt;
===Hexadezimal ausgeben===&lt;br /&gt;
&lt;br /&gt;
Zu guter letzt hier noch eine Funktion, die eine Zahl aus dem Register &#039;&#039;&#039;temp1&#039;&#039;&#039; in hexadezimaler Form ausgibt. Die Funktion weist keine Besonderheiten auf und sollte unmittelbar verständlich sein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 8 Bit Zahl ohne Vorzeichen hexadezimal ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_number_hex:&lt;br /&gt;
           swap  temp1&lt;br /&gt;
           rcall lcd_number_hex_digit&lt;br /&gt;
           swap  temp1&lt;br /&gt;
&lt;br /&gt;
lcd_number_hex_digit:&lt;br /&gt;
           push  temp1&lt;br /&gt;
&lt;br /&gt;
           andi  temp1, $0F&lt;br /&gt;
           cpi   temp1, 10&lt;br /&gt;
           brlt  lcd_number_hex_digit_1&lt;br /&gt;
           subi  temp1, -( &#039;A&#039; - &#039;9&#039; - 1 ) ; es wird subi mit negativer&lt;br /&gt;
                                           ; Konstante verwendet,&lt;br /&gt;
                                           ; weil es kein addi gibt&lt;br /&gt;
lcd_number_hex_digit_1:&lt;br /&gt;
           subi  temp1, -&#039;0&#039;               ; ditto&lt;br /&gt;
           rcall  lcd_data&lt;br /&gt;
           &lt;br /&gt;
           pop   temp1&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Binär ausgeben===&lt;br /&gt;
Um die Sache komplett zu machen; Hier eine Routine mit der man eine 8 Bit-Zahl binär auf das LC-Display ausgeben kann:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 8 Bit Zahl ohne Vorzeichen binär ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
&lt;br /&gt;
; eine Zahl aus dem Register temp1 binär ausgeben&lt;br /&gt;
lcd_number_bit:&lt;br /&gt;
	   push temp1		  ; temp1 gesichert&lt;br /&gt;
           push temp2&lt;br /&gt;
	   push temp3&lt;br /&gt;
&lt;br /&gt;
	   mov temp2, temp1;&lt;br /&gt;
&lt;br /&gt;
	   ldi temp3, 8;      ; 8 Bits werden ausgelesen&lt;br /&gt;
lcd_number_loop:           &lt;br /&gt;
	   dec temp3;&lt;br /&gt;
	   rol temp2;         ; Datenbits ins Carry geschoben ...&lt;br /&gt;
	   brcc lcd_number_bit_carryset_0; &lt;br /&gt;
	   brcs lcd_number_bit_carryset_1;&lt;br /&gt;
           rjmp lcd_number_loop;&lt;br /&gt;
&lt;br /&gt;
lcd_number_bit_carryset_0:	 &lt;br /&gt;
	   ldi temp1, &#039;0&#039;     ; Bit low ausgeben&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
	   tst temp3;&lt;br /&gt;
	   breq lcd_number_ende;&lt;br /&gt;
	   rjmp lcd_number_loop;&lt;br /&gt;
&lt;br /&gt;
lcd_number_bit_carryset_1:&lt;br /&gt;
           ldi temp1, &#039;1&#039;     ; Bit high ausgeben&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           tst temp3;&lt;br /&gt;
	   breq lcd_number_ende;&lt;br /&gt;
	   rjmp lcd_number_loop;&lt;br /&gt;
&lt;br /&gt;
lcd_number_ende:&lt;br /&gt;
	   pop temp3&lt;br /&gt;
	   pop temp2&lt;br /&gt;
	   pop temp1&lt;br /&gt;
	   ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eine 16-Bit Zahl aus einem Registerpärchen ausgeben===&lt;br /&gt;
&lt;br /&gt;
Um eine 16 Bit Zahl auszugeben wird wieder das bewährte Schema benutzt die einzelnen Stellen durch Subtraktion abzuzählen. Da es sich hierbei allerdings um eine 16 Bit Zahl handelt, müssen die Subtraktionen als 16-Bit Arithmetik ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Eine 16 Bit Zahl ohne Vorzeichen ausgeben&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            Zahl im Register temp2 (low Byte) / temp3 (high Byte)&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_number16:&lt;br /&gt;
           push  temp1&lt;br /&gt;
           push  temp2&lt;br /&gt;
           push  temp3&lt;br /&gt;
&lt;br /&gt;
; ** Zehntausender **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number1:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, low(10000)&lt;br /&gt;
           sbci  temp3, high(10000)&lt;br /&gt;
           brcc  lcd_number1&lt;br /&gt;
           subi  temp2, low(-10000)&lt;br /&gt;
           sbci  temp3, high(-10000)&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Tausender **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number2:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, low(1000)&lt;br /&gt;
           sbci  temp3, high(1000)&lt;br /&gt;
           brcc  lcd_number2&lt;br /&gt;
           subi  temp2, low(-1000)&lt;br /&gt;
           sbci  temp3, high(-1000)&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Hunderter **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number3:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, low(100)&lt;br /&gt;
           sbci  temp3, high(100)&lt;br /&gt;
           brcc  lcd_number3&lt;br /&gt;
           subi  temp2, -100             ; + 100 High-Byte nicht mehr erforderlich&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Zehner **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;-1&lt;br /&gt;
lcd_number4:&lt;br /&gt;
           inc   temp1&lt;br /&gt;
           subi  temp2, 10&lt;br /&gt;
           brcc  lcd_number4&lt;br /&gt;
           subi  temp2, -10&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Einer **&lt;br /&gt;
           ldi   temp1, &#039;0&#039;&lt;br /&gt;
           add   temp1, temp2&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
&lt;br /&gt;
; ** Stack aufräumen **&lt;br /&gt;
           pop   temp3&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           pop   temp1&lt;br /&gt;
&lt;br /&gt;
           ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eine BCD Zahl ausgeben===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            BCD Zahl in temp1&lt;br /&gt;
; veränderte Register: keine&lt;br /&gt;
;&lt;br /&gt;
lcd_bcd:&lt;br /&gt;
           push  temp2&lt;br /&gt;
          &lt;br /&gt;
           mov   temp2, temp1           ; temp1 sichern&lt;br /&gt;
           swap  temp1                  ; oberes mit unterem Nibble tauschen&lt;br /&gt;
           andi  temp1, 0b00001111      ; und &amp;quot;oberes&amp;quot; ausmaskieren&lt;br /&gt;
           subi  temp1, -0x30           ; in ASCII umrechnen&lt;br /&gt;
           rcall lcd_data               ; und ausgeben&lt;br /&gt;
           mov   temp1, temp2           ; ... danach unteres&lt;br /&gt;
           andi  temp1, 0b00001111&lt;br /&gt;
           subi  temp1, -0x30&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           mov   temp1, temp2           ; temp1 rekonstruieren&lt;br /&gt;
&lt;br /&gt;
           pop   temp2&lt;br /&gt;
           ret &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Benutzerdefinierte Zeichen ==&lt;br /&gt;
[[Bild:LCD_Character_Grid.png | framed | right| Zeichenraster für 1 Zeichen]]&lt;br /&gt;
&lt;br /&gt;
Das LCD erlaubt für spezielle Zeichen, welche sich nicht im Zeichensatz finden, eigene Zeichen zu definieren. Dazu werden die ersten 8 ASCII Codes reserviert, auf denen sich laut ASCII Tabelle spezielle Steuerzeichen befinden, die normalerweise keine sichtbare Anzeige hervorrufen sondern zur Steuerung von angeschlossenen Geräten dienen. Da diese Zeichen auf einem LCD keine Rolle spielen, können diese Zeichen benutzt werden um sich selbst Sonderzeichen zu erzeugen, die für die jeweilige Anwendung massgeschneidert sind.&lt;br /&gt;
&lt;br /&gt;
Das LCD stellt für jedes Zeichen eine 8*5 Matrix zur Verfügung. Um sich selbst massgeschneiderte Zeichen zu erstellen, ist es am einfachsten sich zunächst auf einem Stück karriertem Papier zu erstellen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:BellCharacter.png | framed | right| Zeichenraster für ein Glockensymbol]]&lt;br /&gt;
&lt;br /&gt;
In diesem Raster markiert man sich dann diejenigen Pixel, die im fertigen Zeichen dunkel erscheinen sollen. Als Beispiel sei hier ein Glockensymbol gezeichnet, welches in einer Telefonapplikation zb als Kennzeichnung für einen Anruf dienen könnte.&lt;br /&gt;
&lt;br /&gt;
Eine Zeile in diesem Zeichen repräsentiert ein an das LCD zu übergebendes Byte, wobei nur die Bits 0 bis 4 relevant sind. Gesetzte Pixel stellen ein 1 Bit dar, nicht gesetzte Pixel sind ein 0-Bit. Das niederwertigste Bit einer Zeile befindet sich rechts. Auf diese Art wird jede Zeile in eine Binärzahl übersetzt, und 8 Bytes repräsentieren ein komplettes Zeichen. Am Beispiel des Glockensymboles: Die 8 Bytes, welches das Symbol repräsentiern, lauten: 0x00, 0x04, 0x0A, 0x0A, 0x0A, 0x1F, 0x04, 0x00,&lt;br /&gt;
&lt;br /&gt;
Dem LCD wird die neue Definition übertragen, indem man dem LCD die &#039;Schreibposition&#039; mittels des Kommandos &#039;&#039;Character RAM Address Set&#039;&#039; in den Zeichensatzgenerator verschiebt. Danach werden die 8 Bytes ganz normal als Daten ausgegeben, die das LCD damit in seine Zeichensatztabelle schreibt.&lt;br /&gt;
&lt;br /&gt;
Durch die Wahl der Speicheradresse definiert man, welches Zeichen (0 bis 7) man eigentlich durch eine eigene Definition ersetzen will.&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! ASCII Code || Zeichensatzadresse&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x10&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x18&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x20&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0x30&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x38&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Definition des Zeichens, muss die Schreibposition wieder explizit in den DDRAM-Bereich gesetzt werden.&lt;br /&gt;
Danach kann ein entsprechendes Zeichen mit dem definierten ASCII Code ausgegeben werden, wobei das LCD die von uns definierte Pixelform zur Anzeige benutzt.&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen natürlich erstmal die Zeichen definiert werden.&lt;br /&gt;
Dieses geschieht einmalig durch den Aufruf der Routine &amp;quot;lcd_load_user_chars&amp;quot;&lt;br /&gt;
unmittelbar nach der Initialisierung des LCD-Displays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           rcall lcd_init              ; Display initialisieren&lt;br /&gt;
           rcall lcd_load_user_chars   ; User Zeichen in das Display laden&lt;br /&gt;
           rcall lcd_clear             ; Display löschen&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch diesen Aufruf werden die im Flash definierten Zeichen in den&lt;br /&gt;
GC-Ram übertragen. Diese Zeichen werden ab Adresse 0 im GC-Ram&lt;br /&gt;
gespeichert und sind danach wie jedes andere Zeichen nutzbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           ldi   temp1, 0              ; Ausgabe des User-Char &amp;quot;A&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 6              ; Ausgabe des User-Char &amp;quot;G&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 5              ; Ausgabe des User-Char &amp;quot;E&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 4              ; Ausgabe des User-Char &amp;quot;M&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 3              ; Ausgabe des User-Char &amp;quot;-&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 2              ; Ausgabe des User-Char &amp;quot;R&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 1              ; Ausgabe des User-Char &amp;quot;V&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           ldi   temp1, 0              ; Ausgabe des User-Char &amp;quot;A&amp;quot;&lt;br /&gt;
           rcall lcd_data&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte der Schriftzug &amp;quot;AVR-MEGA&amp;quot;&lt;br /&gt;
verkehrt herum (180 Grad gedreht) erscheinen.&lt;br /&gt;
&lt;br /&gt;
Es fehlt natürlich noch die Laderoutine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
;**********************************************************************&lt;br /&gt;
;&lt;br /&gt;
; Lädt User Zeichen in den GC-Ram des LCD bis Tabellenende (0xFF)&lt;br /&gt;
; gelesen wird. (max. 8 Zeichen können geladen werden)&lt;br /&gt;
;&lt;br /&gt;
; Übergabe:            -   &lt;br /&gt;
; veränderte Register: temp1, temp2, temp3, zh, zl&lt;br /&gt;
; Bemerkung:           ist einmalig nach lcd_init aufzurufen&lt;br /&gt;
;       &lt;br /&gt;
&lt;br /&gt;
lcd_load_user_chars:&lt;br /&gt;
        ldi    zl, LOW (ldc_user_char * 2) ; Adresse der Zeichentabelle&lt;br /&gt;
        ldi    zh, HIGH(ldc_user_char * 2) ; in den Z-Pointer laden&lt;br /&gt;
        clr    temp3                       ; aktuelles Zeichen = 0 &lt;br /&gt;
&lt;br /&gt;
lcd_load_user_chars_2:&lt;br /&gt;
        clr    temp2                       ; Linienzähler = 0&lt;br /&gt;
&lt;br /&gt;
lcd_load_user_chars_1:&lt;br /&gt;
        ldi    temp1, 0b01000000           ; Kommando:    0b01aaalll&lt;br /&gt;
        add    temp1, temp3                ; + akt. Zeichen  (aaa)&lt;br /&gt;
        add    temp1, temp2                ; + akt. Linie       (lll)&lt;br /&gt;
        rcall  lcd_command                 ; Kommando schreiben&lt;br /&gt;
&lt;br /&gt;
        lpm    temp1, Z+                   ; Zeichenline laden &lt;br /&gt;
        rcall  lcd_data                    ; ... und ausgeben&lt;br /&gt;
&lt;br /&gt;
        ldi    temp1, 0b01001000           ; Kommando:    0b01aa1lll         &lt;br /&gt;
        add    temp1, temp3                ; + akt. Zeichen  (aaa)       &lt;br /&gt;
        add    temp1, temp2                ; + akt. Linie       (lll)&lt;br /&gt;
        rcall  lcd_command&lt;br /&gt;
&lt;br /&gt;
        lpm    temp1, Z+                   ; Zeichenline laden&lt;br /&gt;
        rcall  lcd_data                    ; ... und ausgeben &lt;br /&gt;
        &lt;br /&gt;
        inc    temp2                       ; Linienzähler + 1&lt;br /&gt;
        cpi    temp2, 8                    ; 8 Linien fertig?&lt;br /&gt;
        brne   lcd_load_user_chars_1       ; nein, dann nächste Linie &lt;br /&gt;
		&lt;br /&gt;
        subi   temp3, -0x10                ; zwei Zeichen weiter (addi 0x10)&lt;br /&gt;
        lpm    temp1, Z                    ; nächste Linie laden&lt;br /&gt;
        cpi    temp1, 0xFF                 ; Tabellenende erreicht? &lt;br /&gt;
        brne   lcd_load_user_chars_2       ; nein, dann die nächsten&lt;br /&gt;
                                           ; zwei Zeichen&lt;br /&gt;
        ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... und die Zeichendefinition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
ldc_user_char:&lt;br /&gt;
                              ;    Zeichen &lt;br /&gt;
                              ;   0       1&lt;br /&gt;
       .db 0b10001, 0b00100   ; @   @ ,   @&lt;br /&gt;
       .db 0b10001, 0b01010   ; @   @ ,  @ @&lt;br /&gt;
       .db 0b11111, 0b10001   ; @@@@@ , @   @&lt;br /&gt;
       .db 0b10001, 0b10001   ; @   @ , @   @&lt;br /&gt;
       .db 0b10001, 0b10001   ; @   @ , @   @&lt;br /&gt;
       .db 0b10001, 0b10001   ; @   @ , @   @&lt;br /&gt;
       .db 0b01110, 0b10001   ;  @@@  , @   @&lt;br /&gt;
       .db 0b00000, 0b00000   ;       , &lt;br /&gt;
&lt;br /&gt;
                              ;    Zeichen&lt;br /&gt;
                              ;   2       3&lt;br /&gt;
       .db 0b10001, 0b00000   ; @   @ , &lt;br /&gt;
       .db 0b01001, 0b00000   ;  @  @ , &lt;br /&gt;
       .db 0b00101, 0b00000   ;   @ @ , &lt;br /&gt;
       .db 0b11111, 0b11111   ; @@@@@ , @@@@@ &lt;br /&gt;
       .db 0b10001, 0b00000   ; @   @ , &lt;br /&gt;
       .db 0b10001, 0b00000   ; @   @ , &lt;br /&gt;
       .db 0b01111, 0b00000   ;  @@@@ , &lt;br /&gt;
       .db 0b00000, 0b00000   ;       ,  &lt;br /&gt;
&lt;br /&gt;
                              ;    Zeichen&lt;br /&gt;
                              ;   4       5&lt;br /&gt;
       .db 0b10001, 0b11111   ; @   @ , @@@@@  &lt;br /&gt;
       .db 0b10001, 0b00001   ; @   @ ,     @&lt;br /&gt;
       .db 0b10001, 0b00001   ; @   @ ,     @&lt;br /&gt;
       .db 0b10001, 0b01111   ; @   @ ,  @@@@ &lt;br /&gt;
       .db 0b10101, 0b00001   ; @ @ @ ,     @&lt;br /&gt;
       .db 0b11011, 0b00001   ; @@ @@ ,     @&lt;br /&gt;
       .db 0b10001, 0b11111   ; @   @ , @@@@@&lt;br /&gt;
       .db 0b00000, 0b00000   ;       ,  &lt;br /&gt;
&lt;br /&gt;
                              ;    Zeichen&lt;br /&gt;
                              ;   6       7&lt;br /&gt;
       .db 0b11110, 0b11111   ; @@@@  , @@@@@  &lt;br /&gt;
       .db 0b10001, 0b01010   ; @   @ ,  @ @ &lt;br /&gt;
       .db 0b10001, 0b00100   ; @   @ ,   @&lt;br /&gt;
       .db 0b11101, 0b01110   ; @@@ @ ,  @@@&lt;br /&gt;
       .db 0b00001, 0b00100   ;     @ ,   @&lt;br /&gt;
       .db 0b10001, 0b01010   ; @   @ ,  @ @&lt;br /&gt;
       .db 0b01110, 0b11111   ;  @@@  , @@@@@&lt;br /&gt;
       .db 0b00000, 0b00000   ;       ,  &lt;br /&gt;
&lt;br /&gt;
       ; End of Tab&lt;br /&gt;
       .db 0xFF, 0xFF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Der überarbeitete, komplette Code==&lt;br /&gt;
&lt;br /&gt;
Hier also die komplett überarbeitete Version der LCD Funktionen.&lt;br /&gt;
&lt;br /&gt;
Die für die Benutzung relevanten Funktionen&lt;br /&gt;
* &#039;&#039;&#039;lcd_init&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_clear&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_home&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_data&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_command&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_flash_string&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_number&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;lcd_number_hex&#039;&#039;&#039;&lt;br /&gt;
sind so ausgeführt, dass sie kein Register (ausser dem Statusregister &#039;&#039;&#039;SREG&#039;&#039;&#039;) verändern. Die bei manchen Funktionen notwendige Argumente werden immer im Register &#039;&#039;&#039;temp1&#039;&#039;&#039; übergeben, wobei &#039;&#039;&#039;temp1&#039;&#039;&#039; vom Usercode definiert werden muss.&lt;br /&gt;
&lt;br /&gt;
[[Media:lcd-routines.asm|Download lcd-routines.asm]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Stack|&lt;br /&gt;
zurücklink=AVR-Tutorial: Stack|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Interrupts|&lt;br /&gt;
vorlink=AVR-Tutorial: Interrupts}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial|LCD]]&lt;br /&gt;
[[Category:LCD]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LED-%22Birnen%22&amp;diff=87608</id>
		<title>LED-&quot;Birnen&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LED-%22Birnen%22&amp;diff=87608"/>
		<updated>2015-03-01T23:41:42Z</updated>

		<summary type="html">&lt;p&gt;R2d2: Änderung 87604 von 2A02:1205:C694:F2F0:CD12:D812:B872:C53A (Diskussion) rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Beitrag beschreibt Aufbau und Funktion von [[LED]]-basierten Leuchtmitteln (LED-Lampen), umgangssprachlich auch manchmal als &#039;&#039;&#039;&amp;quot;LED-Birnen&amp;quot;&#039;&#039;&#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Immer häufiger werden neben Kompaktleuchtstofflampen (Quecksilberdampf-Niederdrucklampe) auch LED-Lampen als Ersatz für die herkömmlichen Glühfadenlampen (&amp;quot;Glühbirnen&amp;quot;) verwendet. Dabei existieren kostengünstige Versionen mit Gruppen aneinander gereihter Standard-LEDs, sowie Ausführungen, die gezielt in Form  klassischer Glühfadenbirnen gestaltet sind und für 230V optimierte Halbleiter enthalten.&lt;br /&gt;
&lt;br /&gt;
== Vergleich mit anderen Leuchtmitteln ==&lt;br /&gt;
Auf den Packungen der Hersteller sind sowohl bei Kompaktleuchtstofflampen, als auch bei LED-Birnen sehr optimistische Werte für die Lebensdauer und die Helligkeit angegeben. Diese sind mit Vorsicht zu geniessen und ausdrücklich als Werbeaussage aufzufassen:&lt;br /&gt;
&lt;br /&gt;
=== Lebensdauervergleich===&lt;br /&gt;
Kompaktleuchtstofflampen werden gerne mit bis zu 10.000h - LED-Lampen sogar mit bis zu 50.000h angegeben. In der Praxis zeigt sich aber, daß diese Werte nicht einmal von 10% der Lampen erreicht werden. Ein Großteil ist bereits vor Ablauf der halben Periode defekt - nicht wenige sogar schon nach 10% der angegebenen Zeit!&lt;br /&gt;
&lt;br /&gt;
Real sollte man davon ausgehen, dass einfache LED-Lampen ca 1000h-5000h leuchten, bevor die Elektronik defekt geht- bessere Lampen halten etwa das 2-3fache an Zeit.&lt;br /&gt;
&lt;br /&gt;
=== Leistungsvergleich===&lt;br /&gt;
Bei der Leistung werden oft subjektive Empfindungen des Menschen, wie die spektale Empfindlichkeit in die gemessenen Spektren eingerechnet und speziell bei den Leuchtstoffröhren die Alterung verschwiegen, um in Lampen mit wenigen Watt eine gewaltige subjektive Leuchtwirkung hineinzurechnen.&lt;br /&gt;
&lt;br /&gt;
Grob gesagt, sollte man bei ESL und besonders bei LED-Lampen 20%-40% auf die Leistung zugeben, um sie mit einer Glühbirne vergleichen zu können.&lt;br /&gt;
&lt;br /&gt;
=== Farbwiedergabe- und Lichtfarbenvergleich ===&lt;br /&gt;
LEDs haben ihre eindeutige Stärke in farbigem Licht. Während Glühleuchtmittel höchst energiezehrend gefiltert werden müssen erreicht man die gewünschte Lichtfarbe bei einer LED durch Auswahl der Leuchtfarbe der LED selbst.&lt;br /&gt;
&lt;br /&gt;
=== Vor- und Nachteile der LED-Lampen ===&lt;br /&gt;
&lt;br /&gt;
LED-Lampen haben einige Vorteile gegenüber den Kompaktleuchtstofflampen und vor allem gegenüber den Glühfadenlampen: &lt;br /&gt;
&lt;br /&gt;
* Die Energieeffizienz ist in der Regel höher, als bei Kompaktleuchststofflampen&lt;br /&gt;
* Die Kosteneffizienz ist bei einfachen Ausführungen ähnlich gut&lt;br /&gt;
* Die Lichtfarbe bzw. Farbtemperatur der LED-Lampe ist flexibler und kann auf Wunsch der Glühfadenlampenfarbe besser angepasst werden. Dazu gibt es kaltweiße, warmweiße und auch farbige Ausführungen&lt;br /&gt;
* enthält keine leicht freisetzbaren Giftstoffe, wie Quecksilber&lt;br /&gt;
* erreicht bereits nach wenigen Millisekunden nach dem Einschalten die volle Leuchtkraft&lt;br /&gt;
* kann eine sehr lange Lebensdauer haben (meist &amp;gt;= 30000 Stunden)&lt;br /&gt;
&lt;br /&gt;
Jedoch gibt es auch einige Nachteile:&lt;br /&gt;
&lt;br /&gt;
* begrenzte Maximalleistung: LED-Lampen erreichen bei gleicher Grösse nicht dieselbe Helligkeit wie Kompaktleuchststofflampen&lt;br /&gt;
* hat einen grösseren Platzbedarf bei gleicher Leuchtkraft&lt;br /&gt;
* bei birnenähnlichen Designs und höheren Leistungen höherer Preis &lt;br /&gt;
* enthält schwer zu recycelnde Giftstoffe wie Arsenverbindungen&lt;br /&gt;
* Derzeit noch nicht in allen Elektrogeschäften verfügbar&lt;br /&gt;
* ähnlich wie bei ESLs befinden sich sehr viel billige Produkte am Markt, bei denen die Elektronik rasch kaputt geht&lt;br /&gt;
* schlechter Farbwiedergabeindex Ra=80-95 (Glühbirne als Referenz Ra=100)&lt;br /&gt;
&lt;br /&gt;
=== Kostenvergleich von Energiesparlampen ===&lt;br /&gt;
[[Datei:Kostenvergleich-led-esl-birnen.jpg|left|300px|Kostenvergleich]]&lt;br /&gt;
&lt;br /&gt;
Die Grafik zeigt 3 Fälle von Kostenrechnungen für konventionelle Glühlampen, Kompaktleuchtstofflampe (als ESL bezeichnet) und LED-Lampen.&lt;br /&gt;
&lt;br /&gt;
Berechnet werden jeweils die beiden Extremfälle einer Lampe mit niedrigem Preis und hoher Lebensdauer (günstiger Fall) und einer &amp;quot;Montagslampe&amp;quot;, die schnell kaputt geht, trotz hohen Preises. Daraus wird ein wahrscheinlichster Mittelwert (geometrische Mitte) - einmal für geringe und einmal für starke Nutzung gebildet.&lt;br /&gt;
&lt;br /&gt;
Aufgeführt ist auch die Unterscheidung der privaten und geschäftlichen Nutzung, bei der die Beschaffungs- und Wartungszeiten viel stärker zu Buche schlagen, da ein Angestellter bezahlt werden muss. Hier zeigt sich der Vorteil der langen Nutzungsdauer der LED-Lampen besonders deutlich.&lt;br /&gt;
&lt;br /&gt;
Es zeigt sich auch, dass Privatnutzer durchaus noch einen geringen Sparvorteil haben können, wenn sie auf LED-Lampen umrüsten.&lt;br /&gt;
&lt;br /&gt;
Excel für eigene Berechnungen: [http://www.mikrocontroller.net/wikifiles/0/09/Lampenrechner.xls Lampenvergleichsrechner]&lt;br /&gt;
&lt;br /&gt;
Externer Link auf Excel:&lt;br /&gt;
[http://shop.bioledex.de/files/BIOLEDEX-LED-Stromkosten-Rechner.xls Stromkostenrechner]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
== Bauformen ==&lt;br /&gt;
=== Hochvolt-LED-Lampen===&lt;br /&gt;
&lt;br /&gt;
=== Niederspannungs-LED-Lampen===&lt;br /&gt;
==== Halogenersatzlampen ====&lt;br /&gt;
Üblicherweise werden Niederspannungs-LED-Lampen an einem dezentralen Transformator betrieben, wie z.B mit 24V. Mit einer geeigneten Vorschaltung zur Spannungsherabsetzung im Lampengehäuse, sind sie auch indirekt an 230V-Netzen benutzbar.&lt;br /&gt;
&lt;br /&gt;
==== Betrieb von Standard-LEDs an 230V ====&lt;br /&gt;
[[Datei:led_230v.png|left|300px|230V-Vorschaltung]]&lt;br /&gt;
Mit der nebenstehenden Schaltung besteht die Möglichkeit, eine normale LED direkt an 230V anzuschließen. Diese Schaltung funktioniert so, dass die Spannung mittels Z-Dioden begrenzt wird; in diesem Fall auf 30V. Diese sind deshalb wichtig, weil die Gleichrichtdioden für hohen Frequenzanteile als Kapazität wirken und der Elko diese nicht aufnehmen kann, wodurch sie direkt auf die LEDs wirken würden. Gfs sollte dem Elko noch eine keramischer Kondensator beigefügt werden.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:Led an 220V.png|left|300px|230V-Schaltung]]&lt;br /&gt;
Statt eines Gleichrichters, kann auch eine Antiparallelschaltung von LEDs verwendet werden. Auch dabei werden beide Halbwellen genutzt. Die Ausfallwahrscheinlichkeit ist geringer, weil weniger Bauteile und vor allem kein Elko genutzt wird. Allerdings muss die Schaltung genau dimensioniert werden, d.h. die strombegrenzende Wirkung des Kondensators ist sehr wichtig. Daher werden zur Sicherheit einige in Serie geschaltet, um das Problem der Alterung oder Defektbildung zu minimieren. Die LEDs leuchten bei dieser Schaltungsform aber etwas dunkler als oben, weil kein konstanter Strom fliessen kann und man mit Rücksicht auf die Lebensdauer der LEDs nicht einfach die Spannung so erhöhen kann, dass der Effektivwert erreicht wird.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{warnung|Spannungen ab 60V sind lebensgefährlich!}}&lt;br /&gt;
&lt;br /&gt;
== Funktion einer LED-Lampe am Beispiel==&lt;br /&gt;
von [[Benutzer:Didi34]]&lt;br /&gt;
=== Aufbau ===&lt;br /&gt;
[[Datei:aufbau.JPG|left|300px]]&lt;br /&gt;
Ich beschreibe in diesem Beitrag den Aufbau eines 4W Philips LED-Leuchtmittels mit E-14 Sockel. Über dem LED-Chip befindet sich ein Glaskolben, der in den weißen Kunststoffsockel geklebt ist. Der Glaskolben ist aus Milchglas, dies dient als Diffusor. Um näher in die Lampe zu kommen, muss der Glaskolben abgenommen werden.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:sockel.JPG|left|300px]]&lt;br /&gt;
Nun sieht man den LED-Chip in der Mitte der Lampe. Über dem Chip befindet sich eine weitere Abdeckung, die abgenommen werden muss. &lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:chip_anschluss.JPG|left|300px]]&lt;br /&gt;
Auf dem nächsten Bild sieht man die Aluminium-Platine, worauf sich der LED-Chip befindet. Die beiden Drähte stellen die Versorgung der LED (300V Gleichspannung) dar. Die Platine besteht aus dem Basismaterial Aluminium, um eine bessere Kühlung zu erreichen.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Innenleben ===&lt;br /&gt;
[[Datei:platine_unten.jpg|left|300px]]&lt;br /&gt;
Im Inneren der LED-Lampe befindet sich folgende Platine:&lt;br /&gt;
&lt;br /&gt;
Man sieht nun auf der Platine eine kleine Gleichrichterschaltung. Die Anschlüsse Blau und Braun sind Neutralleiter(N) und Außenleiter(L1) unserer Energieversorgung mit 230V Wechselspannung.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:platine_oben.JPG|left|300px]]&lt;br /&gt;
&lt;br /&gt;
Die beiden Drähte Rot(+) und Schwarz(-) sind die Ausgänge der Schaltung. Sie führen eine Gleichspannung von 300V und werden direkt an der Aluminiumplatine der LED angeschlossen, da die LED für diese Spannung ausgelegt ist. Näheres zur Schaltung:&lt;br /&gt;
[http://www.mikrocontroller.net/articles/LED-Gl%C3%BChbirne#Schaltung/ Schaltung]&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==== LED-Chip ====&lt;br /&gt;
[[Datei:ledchip_dunkel.jpg|left|300px]]&lt;br /&gt;
Der LED-Chip besteht aus mehreren in Serie geschalteten LEDs. Die in Serie geschalteten LEDs sind um eine warm-weiße Farbe zu erreichen teils rot und teils weiß. Die LED ist für 300V DC ausgelegt. Auf dem LED-Chip befinden sich zwei weiße und zwei rote LED-Arrays. Die gelbe Schicht der weißen LEDs ist ein Phosphor (also ein Leuchtstoff) der aus dem blauen Licht der Kristalle weißes Licht macht.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ledchip_hell.jpg|left|300px]]&lt;br /&gt;
Eine weitere Ansicht des LED-Chips im Betrieb unter Spannung.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
==== Schaltung ====&lt;br /&gt;
[[Datei:netzteilschaltung.png|left|300px|Einfache Gleichrichterschaltung für LEDs]]&lt;br /&gt;
Für den Betieb an Netzspannung wird ein Kondensatornetzteil verwendet, welches aus 230V AC 300V DC macht. Die Schaltung ist mit 1A abgesichert. {{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Messung ===&lt;br /&gt;
[[Datei:messung.bmp|left|300px|Messung]]&lt;br /&gt;
Es wurde zwischen dem roten und schwarzen Ausgang der oben genannten Schaltung gemessen. CH1 roter Anschluss CH2 schwarzer Anschluss.&lt;br /&gt;
Die rote Linie am Oszillogramm ist Die Spannung zwischen den beiden Drähten (CH1-CH2).&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
{{warnung|Spannungen ab 60V sind lebensgefährlich!}}&lt;br /&gt;
&lt;br /&gt;
== Interne Links ==&lt;br /&gt;
* [[LED]]&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Leuchtdiode Wikipedia: LED]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Kompaktleuchtstofflampe Wikipedia: Kompaktleuchtstofflampe]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Glühlampe Wikipedia: Glühbirne ]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Kondensatornetzteil Wikipedia: Kondensatornetzteil]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Energiesparende Leuchtmittel Wikipedia: Energiesparende Leuchtmittel allgemein]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Konstantstromquelle_fuer_Power_LED&amp;diff=80969</id>
		<title>Konstantstromquelle fuer Power LED</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Konstantstromquelle_fuer_Power_LED&amp;diff=80969"/>
		<updated>2014-01-19T16:15:41Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Vereinfachte Schaltung für LEDs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeines ==&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von Leistungs-[[LED]]s sind normalerweise getaktete [[Konstantstromquelle##Konstantstromquelle_mit_Schaltregler | Stromregler]] erforderlich. Als Leistungs-LEDs bezeichnet man im Allgemeinen Leuchtdioden mit &#039;&#039;&#039;1W&#039;&#039;&#039; oder mehr Leistung. Die Nennströme zum Betrieb liegen meist in den Klassen 300mA, 700mA und 1.2A. Abhängig von der jeweiligen [[LED#Durchlassspannung | Durchlaßspannung]] ergibt sich nicht exakt die angegebene Leistungen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der jeweils erlaubte maximale Strom ist dem LED-Datenblatt zu entnehmen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auch um verschiedene Helligkeiten bei verschiedenen LED-Typen und -Farben aneinander anzupassen, ist es erforderlich, den Strom anpassen zu können. Eine lineare [[Konstantstromquelle]] kann in dieser Leistungklasse zu hohen Wärmeverlusten führen, sofern nicht die Eingangsparameter genau dimensioniert werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Betrieb einer 1W-LED an 12V &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V = (U_{ges}-U_{Led}) \cdot I_{Led} = (12V-3,3V) \cdot 300mA = 2.6W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man verwendet also besser einen Schaltregler. Ein Schaltregler, dessen Ausgangsspannung - wie in diesem Fall - kleiner als die Eingangsspannung ist, heisst im englischen Sprachraum &amp;quot;Buck&amp;quot;-Regler. Es gibt spezielle Bausteine für den Betrieb von Power-LEDs. Diese sind auf die Anwendung mit LEDs spezialisiert, haben meist nur 5 Anschlüsse, sind aber teilweise noch recht schwierig erhältlich und teuer. Der Standard-Schaltregler-IC [[MC34063]] wurde bereits im Forum beschrieben. Hier wird eine Vereinfachung der Schaltung speziell für dessen Einsatz zur LED-Versorgung beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Standard-Buck-Reglerschaltung ==&lt;br /&gt;
&lt;br /&gt;
In der folgenden Schaltung wird der weit verbreitete IC [[MC34063]] eingesetzt, welcher allerdings nicht auf die Anwendung mit LEDs optimiert ist!&lt;br /&gt;
&lt;br /&gt;
[[Bild: Spannungsregler mit Buck-Regler.png|thumb|left|300px|Spannungsregler mit Buck-Regler]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Die Standardschaltung verwendet einige Bauteile, die für den Betrieb von LEDs nicht erforderlich sind. So ist es zum Betrieb von LED nicht erforderlich, den Strom vollkommen konstant zu halten. Eine schnelle, geringfügige Stromänderung (engl. Ripple) wird vom Auge nicht wahrgenommen und für die LED ist der mittlere Strom maßgeblich für die Helligkeit. Auch hier gilt: Ein Blick ins Datenblatt der LED ist unumgänglich, insbesondere wenn man im Grenzbereich von Temperatur und Leistung arbeitet!&lt;br /&gt;
&lt;br /&gt;
== Vereinfachte Schaltung für LEDs ==&lt;br /&gt;
&lt;br /&gt;
Diese reduzierten Anforderungen an die Konstanz des Ausgangsstroms  vereinfachen die Schaltung stark. Ausser dem IC selber und der LED werden hier nur sechs statt acht Bauteile verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild: Strom.png|thumb|left|300px|Vereinfachter Stromregler für LEDs]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Bei dieser Schaltung ist jedoch zu beachten, dass sie nicht ohne Last betrieben werden sollte. Zwischen Basis und Emitter des Ausgangstransistors liegt ein interner Widerstand von 100 Ohm, durch den Strom fließt so lange der Ausgangstransistor eingeschaltet ist. Da nie der Soll-Strom erreicht wird liegt die Einschaltdauer bei näherungsweise 100%. An 12V ergibt sich damit ein Strom von 120mA durch den Widerstand, entsprechend einer Leistung von 1,5W. Dies liegt deutlich über den zulässigen 1,25W (DIP) bzw. 625mW (SOIC). Auch im Normalbetreib kann die zulässige Verlustleistung bei hohem Duty-Cycle oder hoher Eingangsspannung schnell überschritten werden.&lt;br /&gt;
&lt;br /&gt;
== Fertigmodul ==&lt;br /&gt;
&lt;br /&gt;
Beim [http://www.mikrocontroller.net/user/show/Mexman Autor] sind komplette Module erhältlich, mit denen man eine oder zwei LEDs in Reihenschaltung an 12V Wechselspannung als Ersatz für Halogenlampen betreiben kann. Das unten gezeigte Modul betreibt 1W oder 3W-LEDs und ist für &#039;&#039;&#039;unter 3 EUR&#039;&#039;&#039; erhältlich. Es enthält zusätzlich einen Brückengleichrichter zum Betrieb an 12V Wechselspannung!&lt;br /&gt;
&lt;br /&gt;
[[Bild: Modul.jpg|thumb|left|334px|Minimodul zum Einbau in Halogenspots]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Bild: Modul.png|thumb|left|300px|Schaltung des Minimoduls]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Stromeinstellung ==&lt;br /&gt;
&lt;br /&gt;
Der strombestimmende Widerstand kann an den erforderlichen Ausgangsstrom angepasst werden. Der verwendete Schaltkreis hat einen Maximalstrom von 1.5A, er sollte aber nur für Power-LED mit 3W, also bis zu ca. 700mA Dauerstrom verwendet werden!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{out}=\frac{0.3}{R_S}&amp;lt;/math&amp;gt;&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Dimmung ==&lt;br /&gt;
&lt;br /&gt;
Der Stromregler wird nicht durch Ändern des LED-Stromes gedimmt. Das wäre zwar technisch möglich, wird aber normalerweise nicht angewendet. Stattdessen wird der gesamte Stromregler ein- und ausgeschaltet ([[PWM]]). Dafür verwendet der vorliegenden IC Pin 5, welches jedoch von der Platine abgehoben werden muss. Das PWM-Signal muss hier invertiert sein, d.h. bei einer Spannung kleiner als 1,25V ist die LED eingeschaltet und bei größer 1,25V ist sie ausgeschaltet. Damit kann das Signal direkt an einen Mikrocontroller angeschlossen werden. Ohne Gleichrichter wird an 12V Gleichspannung ein Wirkungsgrad von ca. 78% erreicht. Das ist für diese einfache, preiswerte Schaltung ziemlich gut.&lt;br /&gt;
&lt;br /&gt;
[[Bild: Power-LED_Stromquelle.png|thumb|left|300px|Minimale Schaltung für Gleichspannungsbetrieb]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil dieser etwas zweckentfremdeten Ansteuerung ist eine leichte Verzögerung beim Einschalten. Das folgende Oszillogramm zeigt diese mit ca. 10µs. Sie führt dazu, dass Einschaltphasen der [[PWM]] kleiner als 10µs die LED nicht einschaltet, das muss beim Auslegen der [[PWM]] berücksichtigt werden! Bei üblichen Ansteuerfrequenzen im Bereich von 100-300 Hz ist diese Verzögerung aber vernachlässigbar. Das Oszillogramm zeigt auch die Frequenz der Stromregelung mit ca. 100kHz&lt;br /&gt;
&lt;br /&gt;
[[Bild: 10us.png|thumb|left|351px|Einschaltverzögerung]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noch heller ==&lt;br /&gt;
Das 12V AC Modul kann problemlos bei geringerer Betriebsspannung am Fahrrad als Treiber fuer eine Power-LED benutzt werden. Es koennen sogar 3 LED in Reihe mit nur einem Modul betrieben werden! Allerdings reichen dann 12V als Betriebsspannung nicht mehr aus, schliesslich addieren sich ja alle drei Flussspannungen und bei 3 x Blau in Reihe sind das ja schon fast 12V!&lt;br /&gt;
Also: Betriebsspannung auf 20..24V DC oder 18V AC erhöhen!&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Mit dem oben gezeigten Modul kann man sehr günstig per Mikrokontroller Power-LEDs regeln. Die Bezugsquelle für die Module ist beim [http://www.mikrocontroller.net/user/show/Mexman Autor] erfragbar.&lt;br /&gt;
&lt;br /&gt;
Alternativ gibt es hier ein [[media:KSQ_PLED.zip | Archiv]] mit den Daten in Eagle-Format. Darin sind zwei Versionen enthalten. Einmal mit bedrahteten Bauelementen als einfache, einseitige Platine und einmal komplett in [[SMD]] mit zweiseitiger Bestückung für minimale Größe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Stückliste, Konstantstromquelle mit 300mA&amp;lt;br&amp;gt;mit Reichelt Bestellnummern&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || SMD || THT&lt;br /&gt;
|-&lt;br /&gt;
|C1 ||	Kondensator, 10µF, 35V || SMD TAN.10/35 || RAD 10/35&lt;br /&gt;
|-&lt;br /&gt;
|C2 ||	Kondensator, 330pF, 35V ||NPO-G1206 330P  || NPO-2,5 330P&lt;br /&gt;
|-&lt;br /&gt;
|D1 ||	Schottky-Diode, 1A, 40V || LL 5819 SMD || SB 140&lt;br /&gt;
|-&lt;br /&gt;
|L1 ||	Spule, 0,4A, 470µH || L-PIS4720 470µ || L-11P 470µ&lt;br /&gt;
|-&lt;br /&gt;
|R1 ||	Widerstand, 1Ω ||	SMD 1/4W 1,0 || METALL 1,00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.diodes.com/datasheets/ZXLD1350.pdf Datenblatt des ZETEX LED-Treiber ZXLD1350]&lt;br /&gt;
* [http://www.issi.com/WW/pdf/31LT3360.pdf IS31LT3360] Moderner LED-Treiber bis 40V/1,2A, hohe Schaltfrequenz -&amp;gt; kleine Drossel, preiswert, klein&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Konstantstromquelle#MC34063.2C_Step_Down Artikel zum MC34063] &lt;br /&gt;
* [http://www.datasheetcatalog.net/de/datasheets_pdf/M/C/3/4/MC34063.shtml Datenblatt des MC34063]&lt;br /&gt;
*[http://www.elektronikpraxis.vogel.de/index.cfm?pid=866&amp;amp;pk=316524&amp;amp;nl=1&amp;amp;cmp=nl-101 Selbe Prinzip von einem TI Ing]&lt;br /&gt;
*[http://www.led-treiber.de LED-Treiber] verschiedenster Art&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/250681?goto=2579128#2579128 Forumsbeitrag]: MC34063 mit externem MOSFET für deutlich mehr Strom&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Konstantstromquelle_fuer_Power_LED&amp;diff=80892</id>
		<title>Konstantstromquelle fuer Power LED</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Konstantstromquelle_fuer_Power_LED&amp;diff=80892"/>
		<updated>2014-01-16T21:51:04Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Links */ UTF8 Left-to-right mark entfernt. Jetzt sollte der Link gehen (getestet mit Opera)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeines ==&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von Leistungs-[[LED]]s sind normalerweise getaktete [[Konstantstromquelle##Konstantstromquelle_mit_Schaltregler | Stromregler]] erforderlich. Als Leistungs-LEDs bezeichnet man im Allgemeinen Leuchtdioden mit &#039;&#039;&#039;1W&#039;&#039;&#039; oder mehr Leistung. Die Nennströme zum Betrieb liegen meist in den Klassen 300mA, 700mA und 1.2A. Abhängig von der jeweiligen [[LED#Durchlassspannung | Durchlaßspannung]] ergibt sich nicht exakt die angegebene Leistungen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der jeweils erlaubte maximale Strom ist dem LED-Datenblatt zu entnehmen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auch um verschiedene Helligkeiten bei verschiedenen LED-Typen und -Farben aneinander anzupassen, ist es erforderlich, den Strom anpassen zu können. Eine lineare [[Konstantstromquelle]] kann in dieser Leistungklasse zu hohen Wärmeverlusten führen, sofern nicht die Eingangsparameter genau dimensioniert werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Betrieb einer 1W-LED an 12V &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V = (U_{ges}-U_{Led}) \cdot I_{Led} = (12V-3,3V) \cdot 300mA = 2.6W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man verwendet also besser einen Schaltregler. Ein Schaltregler, dessen Ausgangsspannung - wie in diesem Fall - kleiner als die Eingangsspannung ist, heisst im englischen Sprachraum &amp;quot;Buck&amp;quot;-Regler. Es gibt spezielle Bausteine für den Betrieb von Power-LEDs. Diese sind auf die Anwendung mit LEDs spezialisiert, haben meist nur 5 Anschlüsse, sind aber teilweise noch recht schwierig erhältlich und teuer. Der Standard-Schaltregler-IC [[MC34063]] wurde bereits im Forum beschrieben. Hier wird eine Vereinfachung der Schaltung speziell für dessen Einsatz zur LED-Versorgung beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Standard-Buck-Reglerschaltung ==&lt;br /&gt;
&lt;br /&gt;
In der folgenden Schaltung wird der weit verbreitete IC [[MC34063]] eingesetzt, welcher allerdings nicht auf die Anwendung mit LEDs optimiert ist!&lt;br /&gt;
&lt;br /&gt;
[[Bild: Spannungsregler mit Buck-Regler.png|thumb|left|300px|Spannungsregler mit Buck-Regler]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Die Standardschaltung verwendet einige Bauteile, die für den Betrieb von LEDs nicht erforderlich sind. So ist es zum Betrieb von LED nicht erforderlich, den Strom vollkommen konstant zu halten. Eine schnelle, geringfügige Stromänderung (engl. Ripple) wird vom Auge nicht wahrgenommen und für die LED ist der mittlere Strom maßgeblich für die Helligkeit. Auch hier gilt: Ein Blick ins Datenblatt der LED ist unumgänglich, insbesondere wenn man im Grenzbereich von Temperatur und Leistung arbeitet!&lt;br /&gt;
&lt;br /&gt;
== Vereinfachte Schaltung für LEDs ==&lt;br /&gt;
&lt;br /&gt;
Diese reduzierten Anforderungen an die Konstanz des Ausgangsstroms  vereinfachen die Schaltung stark. Ausser dem IC selber und der LED werden hier nur sechs statt acht Bauteile verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild: Strom.png|thumb|left|300px|Vereinfachter Stromregler für LEDs]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Fertigmodul ==&lt;br /&gt;
&lt;br /&gt;
Beim [http://www.mikrocontroller.net/user/show/Mexman Autor] sind komplette Module erhältlich, mit denen man eine oder zwei LEDs in Reihenschaltung an 12V Wechselspannung als Ersatz für Halogenlampen betreiben kann. Das unten gezeigte Modul betreibt 1W oder 3W-LEDs und ist für &#039;&#039;&#039;unter 3 EUR&#039;&#039;&#039; erhältlich. Es enthält zusätzlich einen Brückengleichrichter zum Betrieb an 12V Wechselspannung!&lt;br /&gt;
&lt;br /&gt;
[[Bild: Modul.jpg|thumb|left|334px|Minimodul zum Einbau in Halogenspots]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Bild: Modul.png|thumb|left|300px|Schaltung des Minimoduls]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Stromeinstellung ==&lt;br /&gt;
&lt;br /&gt;
Der strombestimmende Widerstand kann an den erforderlichen Ausgangsstrom angepasst werden. Der verwendete Schaltkreis hat einen Maximalstrom von 1.5A, er sollte aber nur für Power-LED mit 3W, also bis zu ca. 700mA Dauerstrom verwendet werden!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{out}=\frac{0.3}{R_S}&amp;lt;/math&amp;gt;&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Dimmung ==&lt;br /&gt;
&lt;br /&gt;
Der Stromregler wird nicht durch Ändern des LED-Stromes gedimmt. Das wäre zwar technisch möglich, wird aber normalerweise nicht angewendet. Stattdessen wird der gesamte Stromregler ein- und ausgeschaltet ([[PWM]]). Dafür verwendet der vorliegenden IC Pin 5, welches jedoch von der Platine abgehoben werden muss. Das PWM-Signal muss hier invertiert sein, d.h. bei einer Spannung kleiner als 1,25V ist die LED eingeschaltet und bei größer 1,25V ist sie ausgeschaltet. Damit kann das Signal direkt an einen Mikrocontroller angeschlossen werden. Ohne Gleichrichter wird an 12V Gleichspannung ein Wirkungsgrad von ca. 78% erreicht. Das ist für diese einfache, preiswerte Schaltung ziemlich gut.&lt;br /&gt;
&lt;br /&gt;
[[Bild: Power-LED_Stromquelle.png|thumb|left|300px|Minimale Schaltung für Gleichspannungsbetrieb]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil dieser etwas zweckentfremdeten Ansteuerung ist eine leichte Verzögerung beim Einschalten. Das folgende Oszillogramm zeigt diese mit ca. 10µs. Sie führt dazu, dass Einschaltphasen der [[PWM]] kleiner als 10µs die LED nicht einschaltet, das muss beim Auslegen der [[PWM]] berücksichtigt werden! Bei üblichen Ansteuerfrequenzen im Bereich von 100-300 Hz ist diese Verzögerung aber vernachlässigbar. Das Oszillogramm zeigt auch die Frequenz der Stromregelung mit ca. 100kHz&lt;br /&gt;
&lt;br /&gt;
[[Bild: 10us.png|thumb|left|351px|Einschaltverzögerung]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noch heller ==&lt;br /&gt;
Das 12V AC Modul kann problemlos bei geringerer Betriebsspannung am Fahrrad als Treiber fuer eine Power-LED benutzt werden. Es koennen sogar 3 LED in Reihe mit nur einem Modul betrieben werden! Allerdings reichen dann 12V als Betriebsspannung nicht mehr aus, schliesslich addieren sich ja alle drei Flussspannungen und bei 3 x Blau in Reihe sind das ja schon fast 12V!&lt;br /&gt;
Also: Betriebsspannung auf 20..24V DC oder 18V AC erhöhen!&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Mit dem oben gezeigten Modul kann man sehr günstig per Mikrokontroller Power-LEDs regeln. Die Bezugsquelle für die Module ist beim [http://www.mikrocontroller.net/user/show/Mexman Autor] erfragbar.&lt;br /&gt;
&lt;br /&gt;
Alternativ gibt es hier ein [[media:KSQ_PLED.zip | Archiv]] mit den Daten in Eagle-Format. Darin sind zwei Versionen enthalten. Einmal mit bedrahteten Bauelementen als einfache, einseitige Platine und einmal komplett in [[SMD]] mit zweiseitiger Bestückung für minimale Größe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Stückliste, Konstantstromquelle mit 300mA&amp;lt;br&amp;gt;mit Reichelt Bestellnummern&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || SMD || THT&lt;br /&gt;
|-&lt;br /&gt;
|C1 ||	Kondensator, 10µF, 35V || SMD TAN.10/35 || RAD 10/35&lt;br /&gt;
|-&lt;br /&gt;
|C2 ||	Kondensator, 330pF, 35V ||NPO-G1206 330P  || NPO-2,5 330P&lt;br /&gt;
|-&lt;br /&gt;
|D1 ||	Schottky-Diode, 1A, 40V || LL 5819 SMD || SB 140&lt;br /&gt;
|-&lt;br /&gt;
|L1 ||	Spule, 0,4A, 470µH || L-PIS4720 470µ || L-11P 470µ&lt;br /&gt;
|-&lt;br /&gt;
|R1 ||	Widerstand, 1Ω ||	SMD 1/4W 1,0 || METALL 1,00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.diodes.com/datasheets/ZXLD1350.pdf Datenblatt des ZETEX LED-Treiber ZXLD1350]&lt;br /&gt;
* [http://www.issi.com/WW/pdf/31LT3360.pdf IS31LT3360] Moderner LED-Treiber bis 40V/1,2A, hohe Schaltfrequenz -&amp;gt; kleine Drossel, preiswert, klein&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Konstantstromquelle#MC34063.2C_Step_Down Artikel zum MC34063] &lt;br /&gt;
* [http://www.datasheetcatalog.net/de/datasheets_pdf/M/C/3/4/MC34063.shtml Datenblatt des MC34063]&lt;br /&gt;
*[http://www.elektronikpraxis.vogel.de/index.cfm?pid=866&amp;amp;pk=316524&amp;amp;nl=1&amp;amp;cmp=nl-101 Selbe Prinzip von einem TI Ing]&lt;br /&gt;
*[http://www.led-treiber.de LED-Treiber] verschiedenster Art&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/250681?goto=2579128#2579128 Forumsbeitrag]: MC34063 mit externem MOSFET für deutlich mehr Strom&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Konstantstromquelle_fuer_Power_LED&amp;diff=80890</id>
		<title>Konstantstromquelle fuer Power LED</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Konstantstromquelle_fuer_Power_LED&amp;diff=80890"/>
		<updated>2014-01-16T21:38:56Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeines ==&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb von Leistungs-[[LED]]s sind normalerweise getaktete [[Konstantstromquelle##Konstantstromquelle_mit_Schaltregler | Stromregler]] erforderlich. Als Leistungs-LEDs bezeichnet man im Allgemeinen Leuchtdioden mit &#039;&#039;&#039;1W&#039;&#039;&#039; oder mehr Leistung. Die Nennströme zum Betrieb liegen meist in den Klassen 300mA, 700mA und 1.2A. Abhängig von der jeweiligen [[LED#Durchlassspannung | Durchlaßspannung]] ergibt sich nicht exakt die angegebene Leistungen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der jeweils erlaubte maximale Strom ist dem LED-Datenblatt zu entnehmen!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auch um verschiedene Helligkeiten bei verschiedenen LED-Typen und -Farben aneinander anzupassen, ist es erforderlich, den Strom anpassen zu können. Eine lineare [[Konstantstromquelle]] kann in dieser Leistungklasse zu hohen Wärmeverlusten führen, sofern nicht die Eingangsparameter genau dimensioniert werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Betrieb einer 1W-LED an 12V &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_V = (U_{ges}-U_{Led}) \cdot I_{Led} = (12V-3,3V) \cdot 300mA = 2.6W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man verwendet also besser einen Schaltregler. Ein Schaltregler, dessen Ausgangsspannung - wie in diesem Fall - kleiner als die Eingangsspannung ist, heisst im englischen Sprachraum &amp;quot;Buck&amp;quot;-Regler. Es gibt spezielle Bausteine für den Betrieb von Power-LEDs. Diese sind auf die Anwendung mit LEDs spezialisiert, haben meist nur 5 Anschlüsse, sind aber teilweise noch recht schwierig erhältlich und teuer. Der Standard-Schaltregler-IC [[MC34063]] wurde bereits im Forum beschrieben. Hier wird eine Vereinfachung der Schaltung speziell für dessen Einsatz zur LED-Versorgung beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Standard-Buck-Reglerschaltung ==&lt;br /&gt;
&lt;br /&gt;
In der folgenden Schaltung wird der weit verbreitete IC [[MC34063]] eingesetzt, welcher allerdings nicht auf die Anwendung mit LEDs optimiert ist!&lt;br /&gt;
&lt;br /&gt;
[[Bild: Spannungsregler mit Buck-Regler.png|thumb|left|300px|Spannungsregler mit Buck-Regler]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Die Standardschaltung verwendet einige Bauteile, die für den Betrieb von LEDs nicht erforderlich sind. So ist es zum Betrieb von LED nicht erforderlich, den Strom vollkommen konstant zu halten. Eine schnelle, geringfügige Stromänderung (engl. Ripple) wird vom Auge nicht wahrgenommen und für die LED ist der mittlere Strom maßgeblich für die Helligkeit. Auch hier gilt: Ein Blick ins Datenblatt der LED ist unumgänglich, insbesondere wenn man im Grenzbereich von Temperatur und Leistung arbeitet!&lt;br /&gt;
&lt;br /&gt;
== Vereinfachte Schaltung für LEDs ==&lt;br /&gt;
&lt;br /&gt;
Diese reduzierten Anforderungen an die Konstanz des Ausgangsstroms  vereinfachen die Schaltung stark. Ausser dem IC selber und der LED werden hier nur sechs statt acht Bauteile verwendet.&lt;br /&gt;
&lt;br /&gt;
[[Bild: Strom.png|thumb|left|300px|Vereinfachter Stromregler für LEDs]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Fertigmodul ==&lt;br /&gt;
&lt;br /&gt;
Beim [http://www.mikrocontroller.net/user/show/Mexman Autor] sind komplette Module erhältlich, mit denen man eine oder zwei LEDs in Reihenschaltung an 12V Wechselspannung als Ersatz für Halogenlampen betreiben kann. Das unten gezeigte Modul betreibt 1W oder 3W-LEDs und ist für &#039;&#039;&#039;unter 3 EUR&#039;&#039;&#039; erhältlich. Es enthält zusätzlich einen Brückengleichrichter zum Betrieb an 12V Wechselspannung!&lt;br /&gt;
&lt;br /&gt;
[[Bild: Modul.jpg|thumb|left|334px|Minimodul zum Einbau in Halogenspots]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
[[Bild: Modul.png|thumb|left|300px|Schaltung des Minimoduls]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Stromeinstellung ==&lt;br /&gt;
&lt;br /&gt;
Der strombestimmende Widerstand kann an den erforderlichen Ausgangsstrom angepasst werden. Der verwendete Schaltkreis hat einen Maximalstrom von 1.5A, er sollte aber nur für Power-LED mit 3W, also bis zu ca. 700mA Dauerstrom verwendet werden!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{out}=\frac{0.3}{R_S}&amp;lt;/math&amp;gt;&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== Dimmung ==&lt;br /&gt;
&lt;br /&gt;
Der Stromregler wird nicht durch Ändern des LED-Stromes gedimmt. Das wäre zwar technisch möglich, wird aber normalerweise nicht angewendet. Stattdessen wird der gesamte Stromregler ein- und ausgeschaltet ([[PWM]]). Dafür verwendet der vorliegenden IC Pin 5, welches jedoch von der Platine abgehoben werden muss. Das PWM-Signal muss hier invertiert sein, d.h. bei einer Spannung kleiner als 1,25V ist die LED eingeschaltet und bei größer 1,25V ist sie ausgeschaltet. Damit kann das Signal direkt an einen Mikrocontroller angeschlossen werden. Ohne Gleichrichter wird an 12V Gleichspannung ein Wirkungsgrad von ca. 78% erreicht. Das ist für diese einfache, preiswerte Schaltung ziemlich gut.&lt;br /&gt;
&lt;br /&gt;
[[Bild: Power-LED_Stromquelle.png|thumb|left|300px|Minimale Schaltung für Gleichspannungsbetrieb]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil dieser etwas zweckentfremdeten Ansteuerung ist eine leichte Verzögerung beim Einschalten. Das folgende Oszillogramm zeigt diese mit ca. 10µs. Sie führt dazu, dass Einschaltphasen der [[PWM]] kleiner als 10µs die LED nicht einschaltet, das muss beim Auslegen der [[PWM]] berücksichtigt werden! Bei üblichen Ansteuerfrequenzen im Bereich von 100-300 Hz ist diese Verzögerung aber vernachlässigbar. Das Oszillogramm zeigt auch die Frequenz der Stromregelung mit ca. 100kHz&lt;br /&gt;
&lt;br /&gt;
[[Bild: 10us.png|thumb|left|351px|Einschaltverzögerung]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noch heller ==&lt;br /&gt;
Das 12V AC Modul kann problemlos bei geringerer Betriebsspannung am Fahrrad als Treiber fuer eine Power-LED benutzt werden. Es koennen sogar 3 LED in Reihe mit nur einem Modul betrieben werden! Allerdings reichen dann 12V als Betriebsspannung nicht mehr aus, schliesslich addieren sich ja alle drei Flussspannungen und bei 3 x Blau in Reihe sind das ja schon fast 12V!&lt;br /&gt;
Also: Betriebsspannung auf 20..24V DC oder 18V AC erhöhen!&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Mit dem oben gezeigten Modul kann man sehr günstig per Mikrokontroller Power-LEDs regeln. Die Bezugsquelle für die Module ist beim [http://www.mikrocontroller.net/user/show/Mexman Autor] erfragbar.&lt;br /&gt;
&lt;br /&gt;
Alternativ gibt es hier ein [[media:KSQ_PLED.zip | Archiv]] mit den Daten in Eagle-Format. Darin sind zwei Versionen enthalten. Einmal mit bedrahteten Bauelementen als einfache, einseitige Platine und einmal komplett in [[SMD]] mit zweiseitiger Bestückung für minimale Größe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Stückliste, Konstantstromquelle mit 300mA&amp;lt;br&amp;gt;mit Reichelt Bestellnummern&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || SMD || THT&lt;br /&gt;
|-&lt;br /&gt;
|C1 ||	Kondensator, 10µF, 35V || SMD TAN.10/35 || RAD 10/35&lt;br /&gt;
|-&lt;br /&gt;
|C2 ||	Kondensator, 330pF, 35V ||NPO-G1206 330P  || NPO-2,5 330P&lt;br /&gt;
|-&lt;br /&gt;
|D1 ||	Schottky-Diode, 1A, 40V || LL 5819 SMD || SB 140&lt;br /&gt;
|-&lt;br /&gt;
|L1 ||	Spule, 0,4A, 470µH || L-PIS4720 470µ || L-11P 470µ&lt;br /&gt;
|-&lt;br /&gt;
|R1 ||	Widerstand, 1Ω ||	SMD 1/4W 1,0 || METALL 1,00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.diodes.com/datasheets/ZXLD1350.pdf Datenblatt des ZETEX LED-Treiber ZXLD1350]&lt;br /&gt;
* [http://www.issi.com/WW/pdf/31LT3360.pdf‎ IS31LT3360] Moderner LED-Treiber bis 40V/1,2A, hohe Schaltfrequenz -&amp;gt; kleine Drossel, preiswert, klein&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Konstantstromquelle#MC34063.2C_Step_Down Artikel zum MC34063] &lt;br /&gt;
* [http://www.datasheetcatalog.net/de/datasheets_pdf/M/C/3/4/MC34063.shtml Datenblatt des MC34063]&lt;br /&gt;
*[http://www.elektronikpraxis.vogel.de/index.cfm?pid=866&amp;amp;pk=316524&amp;amp;nl=1&amp;amp;cmp=nl-101 Selbe Prinzip von einem TI Ing]&lt;br /&gt;
*[http://www.led-treiber.de LED-Treiber] verschiedenster Art&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/250681?goto=2579128#2579128 Forumsbeitrag]: MC34063 mit externem MOSFET für deutlich mehr Strom&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;br /&gt;
[[Kategorie:Displays und Anzeigen]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=China_SUPER_Bauteile-Schn%C3%A4ppchen_Thread-Wiki&amp;diff=80784</id>
		<title>China SUPER Bauteile-Schnäppchen Thread-Wiki</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=China_SUPER_Bauteile-Schn%C3%A4ppchen_Thread-Wiki&amp;diff=80784"/>
		<updated>2014-01-09T23:52:19Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Buchsen und Stecker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Viele von euch möchten gerne zu günstigen Preisen und kostenlosem Versand Elektronische Bauteilsortimente oder alles Rund um Elektronik einkaufen? Dann seid ihr genau auf dieser Seite richtig. Was Ihr hinnehmen müsst, sind die längere Versandzeiten aus China oder Hongkong. Hier werden nacheinander Schnäppchen vom bekannten &amp;quot;SUPER Bauteile-Schnäppchen Thread&amp;quot; gelistet. Allfällige Preisangaben (anzahl @ gesamtpreis) sind natürlich nur zur Orientierung.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend muss ich sagen, wenn ihr Artikel seht, die nicht mehr verfügbar zu kaufen sind, bitte ich euch darum einfach den Link zu löschen über die &amp;quot;BEARBEITEN&amp;quot; Funktion rechts. So bleibt das Wiki am aktuellsten.&lt;br /&gt;
Wer &amp;quot;Lust und Zeit&amp;quot; hat, darf gerne selber hier Dinge beitragen...&lt;br /&gt;
&lt;br /&gt;
Vielen dank an an den Verfasser Simon Ruetz&lt;br /&gt;
&lt;br /&gt;
== Displays (z.B. HD44780) ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.at/itm/251102217705 (blau)&lt;br /&gt;
*http://www.ebay.at/itm/261061327431 (gelb-grün)&lt;br /&gt;
*http://www.ebay.at/itm/320746806372&lt;br /&gt;
*http://www.ebay.at/itm/251049844026&lt;br /&gt;
*http://www.ebay.de/itm/320533512038&lt;br /&gt;
*http://www.ebay.de/itm/220604499525&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=380630838372&amp;amp;clk_rvr_id=552823587951&lt;br /&gt;
*http://www.aliexpress.com/item/Whole-sale-10PCS-LOT-5V-Character-LCD-Module-Display-LCM-1602-162-16X2-blue-blacklight/817113032.html&lt;br /&gt;
&lt;br /&gt;
128x64 Grafik LCD mit integrierten Controllern ab 8 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/220594603390 (ST7920 Vorsicht*)&lt;br /&gt;
*http://www.ebay.at/itm/170899666269 (KS0108)&lt;br /&gt;
*http://www.ebay.at/itm/261069788027 (KS0108)&lt;br /&gt;
&lt;br /&gt;
Touch Displays 4.3&amp;quot; und 5&amp;quot;&lt;br /&gt;
*http://www.ebay.de/sch/i.html?_sacat=0&amp;amp;_from=R40&amp;amp;_...&lt;br /&gt;
*http://www.ebay.de/sch/i.html?_nkw=touch+tft+modul...&lt;br /&gt;
&lt;br /&gt;
0.96&amp;quot; 128x64 OLED für 4,35€ inkl. Versand: &lt;br /&gt;
Ebay-Artikel Nr. 160879914739&lt;br /&gt;
&lt;br /&gt;
84*48 84x84 LCD Module White backlight adapter PCB for Nokia 5110 Arduino&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=400488314619&amp;amp;clk_rvr_id=552815797700&lt;br /&gt;
&lt;br /&gt;
== Buchsen und Stecker ==&lt;br /&gt;
&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=171038016920&amp;amp;clk_rvr_id=552821867059&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=290928971235&amp;amp;clk_rvr_id=552825839674&lt;br /&gt;
*http://www.ebay.de/itm/180923079454&lt;br /&gt;
*http://www.ebay.de/itm/270853061937&lt;br /&gt;
*http://www.ebay.de/itm/120995663331&lt;br /&gt;
*http://www.aliexpress.com/store/product/20-pcs-2-Pin-Screw-Terminal-Block-Connector-5mm-Pitch-B/929745_1329137726.html&lt;br /&gt;
*http://www.aliexpress.com/snapshot/292664113.html&lt;br /&gt;
&lt;br /&gt;
== Sortimente ==&lt;br /&gt;
Kondensatoren:&lt;br /&gt;
*http://www.ebay.de/itm/181146487242&lt;br /&gt;
*http://www.banggood.com/Wholesale-0805-SMD-32-Value-Chip-Capacitor-Assortment-Kit-Pack-320pcs-p-53344.html&lt;br /&gt;
Widerstände: &lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=350855175041&amp;amp;clk_rvr_id=553088669397&lt;br /&gt;
Sortiment bunte Schrumfschläuche:&lt;br /&gt;
*http://www.aliexpress.com/snapshot/292198344.html&lt;br /&gt;
Zener-Dioden:&lt;br /&gt;
*http://www.banggood.com/300pcs-2V-39V-30-Values-1-Or-2W-0_5W-Zener-Diode-Assorted-Kit-p-87725.html (30 Werte, je 10 Stück)&lt;br /&gt;
&lt;br /&gt;
== Kunststoff Boxen ==&lt;br /&gt;
&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=170770334385&amp;amp;clk_rvr_id=553094538423&lt;br /&gt;
*http://www.aliexpress.com/item/smd-storage-box-SMA-SMT-component-container-storage-boxes-electronic-case-kit-IC-boxes-100pcs-lot/1306857575.html&lt;br /&gt;
*http://www.aliexpress.com/item/1-IC-original-box-SMD-chip-components-interlocking-parts-can-patch-box-Anti-static-Black-Orange/1322069794.html&lt;br /&gt;
*http://www.ebay.de/itm/20-pcs-Components-Part-Laboratory-Storage-Electronic-SMT-SMD-Box-SMT-Anti-Static-/380740028506.,&lt;br /&gt;
&lt;br /&gt;
== 2,4 GHz ==&lt;br /&gt;
&lt;br /&gt;
 2 PCS NRF24L01 2.4GHz RF Wireless Transceiver Module for Arduino&lt;br /&gt;
*http://www.ebay.de/itm/170838373171&lt;br /&gt;
*http://www.ebay.de/itm/181051362897&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=121118879770&amp;amp;clk_rvr_id=552817485616&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=400505927677&amp;amp;clk_rvr_id=552827828280&lt;br /&gt;
&lt;br /&gt;
== Funkmodule ==&lt;br /&gt;
*http://www.aliexpress.com/snapshot/294138133.html&lt;br /&gt;
*http://www.aliexpress.com/snapshot/294138134.html&lt;br /&gt;
&lt;br /&gt;
== Platinen ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/10x-Double-Side-Prototype-PCB-Universal-Board-50x70mm-/130686265627?clk_rvr_id=552815576470&lt;br /&gt;
*http://www.ebay.de/itm/20x-Double-Side-Prototype-PCB-Board-5x7-4x6-3x7-2x8CM-/130531103896?clk_rvr_id=552822429042&lt;br /&gt;
*http://www.ebay.de/itm/50-PROTO-TYPE-PCB-CIRCUIT-PANEL-SOLDER-DIY-50X70-BOARD-/270499139884?clk_rvr_id=552823620700&lt;br /&gt;
&lt;br /&gt;
Ich habe aus Sammelbestellungen immer wieder mal FR4 Lochrasterplatinen... Fragen kostet nichts ;)&lt;br /&gt;
*http://www.mikrocontroller.net/topic/311103&lt;br /&gt;
&lt;br /&gt;
== Batterien und Akkus==&lt;br /&gt;
&lt;br /&gt;
500 SG13 für 3,10:&lt;br /&gt;
*http://www.ebay.de/itm/330570767968&lt;br /&gt;
AAA Batterien:&lt;br /&gt;
*http://www.aliexpress.com/item/16-pcs-lot-4-Blister-AA-Battery-Dry-Battery-Super-Heavy-Duty-Battery-1-5V-AA/796248871.html&lt;br /&gt;
Varta AA:&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=330898341798&amp;amp;clk_rvr_id=553114059335&lt;br /&gt;
&lt;br /&gt;
LiPo 3.7V&lt;br /&gt;
*http://www.aliexpress.com/item/Free-Shipping-New-Upgraded-3-7V-380mAh-25C-Lipo-Battery-for-Hubsan-X4-H107-Ladybird-RC/1135685083.html (5 @ 11.72 EUR)&lt;br /&gt;
&lt;br /&gt;
== Kapton Tape ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/sch/i.html?_sop=15&amp;amp;_sacat=0&amp;amp;_from=R40&amp;amp;_nkw=kapton+tape&amp;amp;LH_PrefLoc=2&amp;amp;rt=nc&amp;amp;LH_BIN=1&lt;br /&gt;
&lt;br /&gt;
== LEDs ==&lt;br /&gt;
&lt;br /&gt;
=== 5 mm ===&lt;br /&gt;
Die billigsten 5mm LEDs - 100 Stk um unter 3 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/130723150892 (Rot, matt?)&lt;br /&gt;
*http://www.ebay.at/itm/330651196119 (Rot, klar)&lt;br /&gt;
*http://www.ebay.at/itm/140789002572 (Grün, matt?)&lt;br /&gt;
*http://www.ebay.at/itm/230741038980 (Grün, klar)&lt;br /&gt;
*http://www.ebay.at/itm/190719616216 (Blau, klar)&lt;br /&gt;
*http://www.ebay.at/itm/170854883320 (Blau, matt)&lt;br /&gt;
*http://www.ebay.at/itm/330697183675 (Weiss, klar)&lt;br /&gt;
*http://www.ebay.at/itm/251117618595 (Sortiment aus jew. 20 Stk Rot, Blau, Grün, Gelb, Weiss)&lt;br /&gt;
*http://www.ebay.de/itm/290881202957 (Weiss)&lt;br /&gt;
&lt;br /&gt;
=== Hochleistungs LEDs ===&lt;br /&gt;
*http://www.aliexpress.com/item/DropShipping-New-10W-RGB-High-Power-Chip-LED-Light-10-Watt-Lamp-Bright-Light-JS0077-Free/888135721.html&lt;br /&gt;
*http://www.aliexpress.com/item/RGB-10w-diode-led-chip-for-RGB-10W-LED-Floodlight-Flood-Light-CE-RoHS-Warranty-2/957361239.html&lt;br /&gt;
&lt;br /&gt;
=== LED Matrix ===&lt;br /&gt;
*http://www.aliexpress.com/item/1x-16-16-Pixel-WS2812B-LED-Digital-Flexible-Panel-WS2811-Individually-Color-DC5V/1342768354.html&lt;br /&gt;
&lt;br /&gt;
=== RGB Stripes ===&lt;br /&gt;
*http://www.aliexpress.com/item/New-1M-Black-PCB-WS2811-Digital-RGB-LED-Strip-Light-144-Pixel-LEDs-5050-RGB-SMD/1314161448.html&lt;br /&gt;
&lt;br /&gt;
=== Taschenlampe ===&lt;br /&gt;
MEGA DEAL!!!:&lt;br /&gt;
*http://www.aliexpress.com/item/Adjustable-Focus-Zoom-In-Out-CREE-Q5-LED-200-Lumen-SLIM-Ultra-Bright-Flashlight-Torch-For/548172876.html&lt;br /&gt;
*http://www.aliexpress.com/item/Mini-LED-Torch-7W-450LM-CREE-Q5-LED-Flashlight-Adjustable-Focus-Zoom-flash-Light-Lamp-free/913244541.html&lt;br /&gt;
*http://www.ebay.de/itm/111185764169?ssPageName=STRK:MEWNX:IT&amp;amp;_trksid=p3984.m1497.l2649&lt;br /&gt;
&lt;br /&gt;
== Laser ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=370810846723&amp;amp;clk_rvr_id=553098953077&lt;br /&gt;
*http://www.aliexpress.com/item/100pcs-650nm-6mm-5V-5mW-Laser-Dot-Diode-Module-Copper-Head-Red-FreeShipping/1143027805.html&lt;br /&gt;
*http://www.ebay.com/itm/10pcs-laser-diode-module-laser-diode-circuit-Module-Head-650nm-6mm-3V-5mW-/130903728362&lt;br /&gt;
*http://www.ebay.com/itm/10pcs-laser-diode-module-red-Laser-Diode-laser-diode-circuit-5V-Module-Head-/370810846723&lt;br /&gt;
*http://www.aliexpress.com/item/2pcs-650nm-5mW-Red-Laser-Line-Module-Glass-Lens-Focusable-Industrial-Class/981044377.html&lt;br /&gt;
&lt;br /&gt;
== Taster und Schalter ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=300916303479&amp;amp;clk_rvr_id=553093896309&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=110957987526&amp;amp;clk_rvr_id=553108801354&lt;br /&gt;
*http://www.aliexpress.com/item/100PC-Lot-SMT-3X6X2-5-h-MM-Tactile-Tact-Push-Button-Micro-Switch-Momentary-Two-Pin/728175767.html&lt;br /&gt;
*http://www.aliexpress.com/item/3-6-2-5H-2pin-white-SMD-mp3-mp4-Button-switch-key-switch-Tact-Switch/1065482131.html&lt;br /&gt;
&lt;br /&gt;
== Sensoren ==&lt;br /&gt;
=== Infrared PIR Motion ===&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=130824723088&amp;amp;clk_rvr_id=553097766279 (5 Stück, ca. 5€)&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=370671048122&amp;amp;clk_rvr_id=553103039249 (1 Stück, ca. 1,40€)&lt;br /&gt;
&lt;br /&gt;
=== Ultraschall ===&lt;br /&gt;
*http://www.aliexpress.com/item/Free-shipping-HC-SR04-HCSR04-Ultrasonic-module-ultrasonic-ranging-modules-ranging-module-Ultrasonic-Sensors-in-stock/610440655.html (10 @ 9.80 EUR)&lt;br /&gt;
*http://www.ebay.com/itm/370877806292 (10 @ 11.37 EUR)&lt;br /&gt;
&lt;br /&gt;
=== MPU 6050 Gyro ===&lt;br /&gt;
*http://www.aliexpress.com/item/FREE-SHIPPING-MPU-6050-MPU6050-Module-3-Axis-analog-gyro-sensors-3-Axis-Accelerometer-Module-GY/1086775775.html (5 @ 11.12 EUR)&lt;br /&gt;
&lt;br /&gt;
== GSM und GPS ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=270851051007&amp;amp;clk_rvr_id=553098865478&lt;br /&gt;
*http://www.aliexpress.com/item/VK16U6-ublox-GPS-Module-with-Antenna-TTL-Signal-Output-FZ0517-Free-Shipping-Dropshipping/922483051.html&lt;br /&gt;
&lt;br /&gt;
== Voltmeter ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/190657429814&lt;br /&gt;
*http://www.aliexpress.com/snapshot/291462038.html&lt;br /&gt;
*USB Strom-/Spannungsanzeige: siehe Bereich USB&lt;br /&gt;
&lt;br /&gt;
== Schaltregler-Module ==&lt;br /&gt;
=== Step-Down Schaltregler-Module ===&lt;br /&gt;
Die billigsten Step-Down Schaltregler-Module mit LM2596 - unter 2 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/310430056189&lt;br /&gt;
*http://www.ebay.at/itm/221113782096&lt;br /&gt;
*http://www.ebay.at/itm/251120173500&lt;br /&gt;
*http://www.ebay.at/itm/330791790173&lt;br /&gt;
*http://www.ebay.at/itm/130729707683&lt;br /&gt;
*http://www.ebay.at/itm/330646303458&lt;br /&gt;
*http://www.aliexpress.com/item/Hot-sale-10PCS-LM2596-DC-DC-Step-Down-Adjustable-Power-Supply/955850963.html?s=p (10 St.)&lt;br /&gt;
*http://www.ebay.de/itm/270762820456 10× MP2307 3A DC to DC Step-down Power Module KIS-3R33S * 6,95€&lt;br /&gt;
*http://www.ebay.de/itm/190698451181 KIM-055L, 9-40V auf 5V, 5A  (10 @ ca. 11,50 EUR)&lt;br /&gt;
*http://www.ebay.de/itm/261016126639 KIM-3R35, 9-40V auf 3.3V, 5A (10 @ ca. 6 EUR)&lt;br /&gt;
*http://www.ebay.at/itm/121249358837 2PCS 60V Input DC-DC Step Down Converter Adjustable Power Module LM2596HVS&lt;br /&gt;
&lt;br /&gt;
=== Step-Up Schaltregler-Module ===&lt;br /&gt;
Die billigsten Step-UP Schaltregler-Module mit LM2577 - ca 2 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/170792120040&lt;br /&gt;
*http://www.ebay.at/itm/140773758954&lt;br /&gt;
*http://www.ebay.at/itm/260974659516&lt;br /&gt;
*http://www.ebay.at/itm/170813838776&lt;br /&gt;
*http://www.ebay.at/itm/180957599819&lt;br /&gt;
*http://www.aliexpress.com/item/Hot-Sell-10pcs-lot-1A-3V-to-5V-DC-DC-Converter-Step-Up-Boost-Module-Free/1359972360.html (10 @ 10.90 EUR)&lt;br /&gt;
&lt;br /&gt;
== Arduino ==&lt;br /&gt;
*http://www.aliexpress.com/item/Free-shipping-BTE-ROBOT-Main-Control-Board-Compatible-with-Arduino-duemilanove-2009-ATMEGA328USB-cable/587638761.html&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=200929452071&amp;amp;clk_rvr_id=552818482186&lt;br /&gt;
&lt;br /&gt;
Arduino Mini/Pro Clones (Breadboard, TQFP ATMEGA328) ab ca 7 EUR inkl. &lt;br /&gt;
Versand&lt;br /&gt;
*http://www.ebay.at/itm/230795578198 (ATMEGA328, Resettaster, kein USB)&lt;br /&gt;
*http://www.ebay.at/itm/230799921826 (ATMEGA328, Nano, USB)&lt;br /&gt;
*http://www.aliexpress.com/item/5pcs-lot-Pro-Mini-328-Mini-ATMEGA328-5V-16MHz-Free-Shipping-Dropshipping/1275111458.html (ATMEGA328, Resettaster, kein USB) &lt;br /&gt;
*http://www.aliexpress.com/item/CP2102-Module-Pro-Mini-Module-Atmega328-5V-16M-Compatible-With-Nano/1273504373.html (ATMEGA328, Nano, USB)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chip-Only ATMEGA328 mit Arduino-Bootloader ab ca 3 EUR inkl. Versand:&lt;br /&gt;
*http://www.ebay.at/itm/300726927158&lt;br /&gt;
*http://www.ebay.at/itm/140810128013&lt;br /&gt;
*http://www.ebay.at/itm/280902871387&lt;br /&gt;
*http://www.mikrocontroller.net/user/show/daniel_w29  Ich habe sie bei mir für 2,80€ gelistet - allerdings plus Versand&lt;br /&gt;
&lt;br /&gt;
Breadboard Power Supply:&lt;br /&gt;
*http://www.ebay.com/itm/New-1PCS-MB-102-Breadboard-Power-Supply-Module-3-3V-5V-For-Arduino-Board-EP98-/111146951040?pt=LH_DefaultDomain_0&amp;amp;hash=item19e0dfe180&lt;br /&gt;
&lt;br /&gt;
== Kamera ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/180937263580&lt;br /&gt;
*http://www.ebay.de/itm/221259368601&lt;br /&gt;
&lt;br /&gt;
== Bluetooth Modul ==&lt;br /&gt;
&lt;br /&gt;
*http://www.aliexpress.com/item/HM-06C-best-Wireless-bluetooth-to-uart-transceiver-Module-Support-Remot-control-mode-support-self-checksum/671962689.html&lt;br /&gt;
*http://www.fasttech.com/products/0/10005943/1453902-bluetooth-wireless-serial-port-master-slave-module&lt;br /&gt;
&lt;br /&gt;
== ICs und IC-Sockel ==&lt;br /&gt;
&lt;br /&gt;
10 Stk ATMEGA8A TQFP32 (10 Stück für 7,35 EUR inkl. Versand am 30.11.2013)&lt;br /&gt;
*http://www.ebay.at/itm/270747777418&lt;br /&gt;
10 Stk LM2577S (10 Stück für 12,33 EUR am 30.11.2013) &amp;quot;LM2577S-ADJ LM2577 2577 Step Up (Boost) Voltage Regulator TO-263-6&amp;quot;&lt;br /&gt;
*http://www.ebay.de/itm/130724310847 (10 Stück für 12,33 EUR am 30.11.2013)&lt;br /&gt;
*http://www.ebay.de/itm/250846968578 (10 Stück für 13,88 EUR am 30.11.2013)&lt;br /&gt;
LM317:&lt;br /&gt;
*http://www.banggood.com/10pcs-LM317T-LM317-Adjustable-Voltage-Regulator-IC-1_2V-To-37V-1_5A-p-80867.html&lt;br /&gt;
10 Stk MAX 232:&lt;br /&gt;
*http://www.banggood.com/10pcs-Smd-Max232-RS-232-Interface-IC-Dual-Transceiver-Sop-16-p-74860.html&lt;br /&gt;
8-Pin IC Sockel:&lt;br /&gt;
*http://www.banggood.com/60pcs-8-Pin-DIP-IC-Sockets-Adaptor-PCB-Solder-Type-Connectors-Plugs-p-908460.html&lt;br /&gt;
10 Stk 16-Pin Nullkraftsockel (10 Stück für 5,02 EUR am 30.11.2013)&lt;br /&gt;
*http://www.ebay.de/itm/110957986619&lt;br /&gt;
10 Stk 28-Pin Nullkraftsockel z.B. für Atmega8 (10 Stück für 5,99 EUR am 04.12.2013) &amp;quot;28 Pins Test Universal ZIF IC Socket narrow&amp;quot;&lt;br /&gt;
*http://www.ebay.de/itm/110950919330&lt;br /&gt;
&lt;br /&gt;
== Logic Analyzer ==&lt;br /&gt;
&lt;br /&gt;
*http://www.aliexpress.com/item/-/605379977.html&lt;br /&gt;
 - 21,68€ Kompatible zu Saleae, Ax, USB Blaster + 8 Probes: &lt;br /&gt;
*http://www.aliexpress.com/item/-/535753410.html (Verkauft itead übrigens &lt;br /&gt;
als Mini Logic für 38€)&lt;br /&gt;
*http://www.aliexpress.com/item/1pcs-lot-Free-shipping-New-Arrival-Saleae-Logic16-saleae16-USB-Logic-Analyzer-100M-16CH-best-quality/667671473.html&lt;br /&gt;
&lt;br /&gt;
== Programmer ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=301000812018&amp;amp;clk_rvr_id=553107983302&lt;br /&gt;
*http://www.aliexpress.com/store/group/Programmer-Emulator/213957_211836576.html&lt;br /&gt;
&lt;br /&gt;
Adapter für ISP 10pin-Programmer auf 6pin-Anschluss&lt;br /&gt;
*http://www.ebay.de/itm/281219165940 (1,00 EUR inkl. Versand)&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
Stecker und Buchsen:&lt;br /&gt;
*http://www.aliexpress.com/item//1396423329.html&lt;br /&gt;
*http://www.aliexpress.com/item//1079961170.html&lt;br /&gt;
*http://www.aliexpress.com/item//1103210893.html&lt;br /&gt;
*http://www.aliexpress.com/item//1334095911.html&lt;br /&gt;
*http://www.aliexpress.com/item//978229424.html&lt;br /&gt;
*http://www.aliexpress.com/item//1333205473.html&lt;br /&gt;
*http://www.ebay.de/itm/360711370937&lt;br /&gt;
&lt;br /&gt;
Soundkarte&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=160840378914&lt;br /&gt;
&lt;br /&gt;
USB Strom-/Spannungsanzeige &lt;br /&gt;
*http://www.ebay.de/itm/141028948395 (hkiron-shop 2,34 EUR inkl. Versand am 30.11.2013)&lt;br /&gt;
*http://www.ebay.de/itm/400616343237 (befdimall 2,27 EUR inkl. Versand)&lt;br /&gt;
&lt;br /&gt;
== USB-TTL-UART ==&lt;br /&gt;
*http://www.ebay.at/itm/180953299346 (PL2303)&lt;br /&gt;
*http://www.ebay.at/itm/180934694241 (PL2303HX  *)&lt;br /&gt;
*http://www.ebay.at/itm/180956763688 (CP2102)&lt;br /&gt;
*http://www.ebay.at/itm/110929272410 (CP2102)&lt;br /&gt;
*http://www.ebay.at/itm/170895253016 (CP2102)&lt;br /&gt;
*http://www.ebay.at/itm/180962172801 (FT232RL)&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/130970909714&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=261210033859&amp;amp;clk_rvr_id=553102953867&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=251299940298&amp;amp;clk_rvr_id=553109809733&lt;br /&gt;
&lt;br /&gt;
== Handys ==&lt;br /&gt;
*http://www.priceangels.com/index.html&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* zu dem angebotenen Preis kommen z.b. noch&lt;br /&gt;
** Kreditkarten Auslandszuschläge (etwa 1 - 2% je nach Karte)&lt;br /&gt;
** Zoll und Einfuhrumsatzsteuer, siehe [http://www.zoll.de/DE/Fachthemen/Steuern/Einfuhrumsatzsteuer/einfuhrumsatzsteuer_node.html Zoll-Homepage].&amp;lt;br&amp;gt;Allerdings verzichtet der Zoll i.d.R. bis ca. 26€ auf die Einfuhrumsatzsteuer, weil der Betrag der Einfuhrumsatzsteuer unter 5€ liegt.&lt;br /&gt;
&lt;br /&gt;
* Die angegeben Anzahl pro Lot genau prüfen oft werden z.B 1*USB-Kabel und 1*Arduino als 2 PCS/Lot beschrieben&lt;br /&gt;
&lt;br /&gt;
* Rücksendungen gehen zu Lasten des Kunden, das ist aufgrund der Versandkosten meist nicht wirtschaftlich&lt;br /&gt;
&lt;br /&gt;
* Natürlich wird ein in China bestellter Arduino mit dem Aufdruck &amp;quot;Made in Italy&amp;quot; nicht in Italien hergestellt.&lt;br /&gt;
&lt;br /&gt;
* Ein Blick auf die Bewertung des Händlers ist dringend zu empfehlen. Vorsicht bei solchen mit wenig Punkten oder Negativbewertungen. Positiv wenn Bestellungen für den gewünschten Artikel (z.B. in Transaction History &amp;amp; Feedback) schon mehrfach gut bewertet wurden.&lt;br /&gt;
&lt;br /&gt;
* Die mitgeteilte Trackingnummer &lt;br /&gt;
** schnellstmöglich prüfen, erscheint meist nach 2-3 Tagen auf http://intmail.183.com.cn/icc-itemtraceen.jsp  &lt;br /&gt;
** Falls das Zielland nicht &amp;quot;DE&amp;quot; ist, sofort reklamieren&lt;br /&gt;
** Falls nach ca 5 Tagen nicht vorhanden, reklamieren &lt;br /&gt;
** Später dann komfortabel den Status aller erwarteten Sendungen anzeigen bei https://www.paket.de&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=China_SUPER_Bauteile-Schn%C3%A4ppchen_Thread-Wiki&amp;diff=80783</id>
		<title>China SUPER Bauteile-Schnäppchen Thread-Wiki</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=China_SUPER_Bauteile-Schn%C3%A4ppchen_Thread-Wiki&amp;diff=80783"/>
		<updated>2014-01-09T23:47:17Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Infrared PIR Motion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Viele von euch möchten gerne zu günstigen Preisen und kostenlosem Versand Elektronische Bauteilsortimente oder alles Rund um Elektronik einkaufen? Dann seid ihr genau auf dieser Seite richtig. Was Ihr hinnehmen müsst, sind die längere Versandzeiten aus China oder Hongkong. Hier werden nacheinander Schnäppchen vom bekannten &amp;quot;SUPER Bauteile-Schnäppchen Thread&amp;quot; gelistet. Allfällige Preisangaben (anzahl @ gesamtpreis) sind natürlich nur zur Orientierung.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend muss ich sagen, wenn ihr Artikel seht, die nicht mehr verfügbar zu kaufen sind, bitte ich euch darum einfach den Link zu löschen über die &amp;quot;BEARBEITEN&amp;quot; Funktion rechts. So bleibt das Wiki am aktuellsten.&lt;br /&gt;
Wer &amp;quot;Lust und Zeit&amp;quot; hat, darf gerne selber hier Dinge beitragen...&lt;br /&gt;
&lt;br /&gt;
Vielen dank an an den Verfasser Simon Ruetz&lt;br /&gt;
&lt;br /&gt;
== Displays (z.B. HD44780) ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.at/itm/251102217705 (blau)&lt;br /&gt;
*http://www.ebay.at/itm/261061327431 (gelb-grün)&lt;br /&gt;
*http://www.ebay.at/itm/320746806372&lt;br /&gt;
*http://www.ebay.at/itm/251049844026&lt;br /&gt;
*http://www.ebay.de/itm/320533512038&lt;br /&gt;
*http://www.ebay.de/itm/220604499525&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=380630838372&amp;amp;clk_rvr_id=552823587951&lt;br /&gt;
*http://www.aliexpress.com/item/Whole-sale-10PCS-LOT-5V-Character-LCD-Module-Display-LCM-1602-162-16X2-blue-blacklight/817113032.html&lt;br /&gt;
&lt;br /&gt;
128x64 Grafik LCD mit integrierten Controllern ab 8 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/220594603390 (ST7920 Vorsicht*)&lt;br /&gt;
*http://www.ebay.at/itm/170899666269 (KS0108)&lt;br /&gt;
*http://www.ebay.at/itm/261069788027 (KS0108)&lt;br /&gt;
&lt;br /&gt;
Touch Displays 4.3&amp;quot; und 5&amp;quot;&lt;br /&gt;
*http://www.ebay.de/sch/i.html?_sacat=0&amp;amp;_from=R40&amp;amp;_...&lt;br /&gt;
*http://www.ebay.de/sch/i.html?_nkw=touch+tft+modul...&lt;br /&gt;
&lt;br /&gt;
0.96&amp;quot; 128x64 OLED für 4,35€ inkl. Versand: &lt;br /&gt;
Ebay-Artikel Nr. 160879914739&lt;br /&gt;
&lt;br /&gt;
84*48 84x84 LCD Module White backlight adapter PCB for Nokia 5110 Arduino&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=400488314619&amp;amp;clk_rvr_id=552815797700&lt;br /&gt;
&lt;br /&gt;
== Buchsen und Stecker ==&lt;br /&gt;
&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=171038016920&amp;amp;clk_rvr_id=552821867059&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=290928971235&amp;amp;clk_rvr_id=552825839674&lt;br /&gt;
*http://www.ebay.de/itm/180923079454&lt;br /&gt;
*http://www.ebay.de/itm/270853061937&lt;br /&gt;
*http://www.ebay.de/itm/120995663331&lt;br /&gt;
*www.aliexpress.com/store/product/20-pcs-2-Pin-Screw-Terminal-Block-Connector-5mm-Pitch-B/929745_1329137726.html&lt;br /&gt;
*http://www.aliexpress.com/snapshot/292664113.html&lt;br /&gt;
&lt;br /&gt;
== Sortimente ==&lt;br /&gt;
Kondensatoren:&lt;br /&gt;
*http://www.ebay.de/itm/181146487242&lt;br /&gt;
*http://www.banggood.com/Wholesale-0805-SMD-32-Value-Chip-Capacitor-Assortment-Kit-Pack-320pcs-p-53344.html&lt;br /&gt;
Widerstände: &lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=350855175041&amp;amp;clk_rvr_id=553088669397&lt;br /&gt;
Sortiment bunte Schrumfschläuche:&lt;br /&gt;
*http://www.aliexpress.com/snapshot/292198344.html&lt;br /&gt;
Zener-Dioden:&lt;br /&gt;
*http://www.banggood.com/300pcs-2V-39V-30-Values-1-Or-2W-0_5W-Zener-Diode-Assorted-Kit-p-87725.html (30 Werte, je 10 Stück)&lt;br /&gt;
&lt;br /&gt;
== Kunststoff Boxen ==&lt;br /&gt;
&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=170770334385&amp;amp;clk_rvr_id=553094538423&lt;br /&gt;
*http://www.aliexpress.com/item/smd-storage-box-SMA-SMT-component-container-storage-boxes-electronic-case-kit-IC-boxes-100pcs-lot/1306857575.html&lt;br /&gt;
*http://www.aliexpress.com/item/1-IC-original-box-SMD-chip-components-interlocking-parts-can-patch-box-Anti-static-Black-Orange/1322069794.html&lt;br /&gt;
*http://www.ebay.de/itm/20-pcs-Components-Part-Laboratory-Storage-Electronic-SMT-SMD-Box-SMT-Anti-Static-/380740028506.,&lt;br /&gt;
&lt;br /&gt;
== 2,4 GHz ==&lt;br /&gt;
&lt;br /&gt;
 2 PCS NRF24L01 2.4GHz RF Wireless Transceiver Module for Arduino&lt;br /&gt;
*http://www.ebay.de/itm/170838373171&lt;br /&gt;
*http://www.ebay.de/itm/181051362897&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=121118879770&amp;amp;clk_rvr_id=552817485616&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=400505927677&amp;amp;clk_rvr_id=552827828280&lt;br /&gt;
&lt;br /&gt;
== Funkmodule ==&lt;br /&gt;
*http://www.aliexpress.com/snapshot/294138133.html&lt;br /&gt;
*http://www.aliexpress.com/snapshot/294138134.html&lt;br /&gt;
&lt;br /&gt;
== Platinen ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/10x-Double-Side-Prototype-PCB-Universal-Board-50x70mm-/130686265627?clk_rvr_id=552815576470&lt;br /&gt;
*http://www.ebay.de/itm/20x-Double-Side-Prototype-PCB-Board-5x7-4x6-3x7-2x8CM-/130531103896?clk_rvr_id=552822429042&lt;br /&gt;
*http://www.ebay.de/itm/50-PROTO-TYPE-PCB-CIRCUIT-PANEL-SOLDER-DIY-50X70-BOARD-/270499139884?clk_rvr_id=552823620700&lt;br /&gt;
&lt;br /&gt;
Ich habe aus Sammelbestellungen immer wieder mal FR4 Lochrasterplatinen... Fragen kostet nichts ;)&lt;br /&gt;
*http://www.mikrocontroller.net/topic/311103&lt;br /&gt;
&lt;br /&gt;
== Batterien und Akkus==&lt;br /&gt;
&lt;br /&gt;
500 SG13 für 3,10:&lt;br /&gt;
*http://www.ebay.de/itm/330570767968&lt;br /&gt;
AAA Batterien:&lt;br /&gt;
*http://www.aliexpress.com/item/16-pcs-lot-4-Blister-AA-Battery-Dry-Battery-Super-Heavy-Duty-Battery-1-5V-AA/796248871.html&lt;br /&gt;
Varta AA:&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=330898341798&amp;amp;clk_rvr_id=553114059335&lt;br /&gt;
&lt;br /&gt;
LiPo 3.7V&lt;br /&gt;
*http://www.aliexpress.com/item/Free-Shipping-New-Upgraded-3-7V-380mAh-25C-Lipo-Battery-for-Hubsan-X4-H107-Ladybird-RC/1135685083.html (5 @ 11.72 EUR)&lt;br /&gt;
&lt;br /&gt;
== Kapton Tape ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/sch/i.html?_sop=15&amp;amp;_sacat=0&amp;amp;_from=R40&amp;amp;_nkw=kapton+tape&amp;amp;LH_PrefLoc=2&amp;amp;rt=nc&amp;amp;LH_BIN=1&lt;br /&gt;
&lt;br /&gt;
== LEDs ==&lt;br /&gt;
&lt;br /&gt;
=== 5 mm ===&lt;br /&gt;
Die billigsten 5mm LEDs - 100 Stk um unter 3 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/130723150892 (Rot, matt?)&lt;br /&gt;
*http://www.ebay.at/itm/330651196119 (Rot, klar)&lt;br /&gt;
*http://www.ebay.at/itm/140789002572 (Grün, matt?)&lt;br /&gt;
*http://www.ebay.at/itm/230741038980 (Grün, klar)&lt;br /&gt;
*http://www.ebay.at/itm/190719616216 (Blau, klar)&lt;br /&gt;
*http://www.ebay.at/itm/170854883320 (Blau, matt)&lt;br /&gt;
*http://www.ebay.at/itm/330697183675 (Weiss, klar)&lt;br /&gt;
*http://www.ebay.at/itm/251117618595 (Sortiment aus jew. 20 Stk Rot, Blau, Grün, Gelb, Weiss)&lt;br /&gt;
*http://www.ebay.de/itm/290881202957 (Weiss)&lt;br /&gt;
&lt;br /&gt;
=== Hochleistungs LEDs ===&lt;br /&gt;
*http://www.aliexpress.com/item/DropShipping-New-10W-RGB-High-Power-Chip-LED-Light-10-Watt-Lamp-Bright-Light-JS0077-Free/888135721.html&lt;br /&gt;
*http://www.aliexpress.com/item/RGB-10w-diode-led-chip-for-RGB-10W-LED-Floodlight-Flood-Light-CE-RoHS-Warranty-2/957361239.html&lt;br /&gt;
&lt;br /&gt;
=== LED Matrix ===&lt;br /&gt;
*http://www.aliexpress.com/item/1x-16-16-Pixel-WS2812B-LED-Digital-Flexible-Panel-WS2811-Individually-Color-DC5V/1342768354.html&lt;br /&gt;
&lt;br /&gt;
=== RGB Stripes ===&lt;br /&gt;
*http://www.aliexpress.com/item/New-1M-Black-PCB-WS2811-Digital-RGB-LED-Strip-Light-144-Pixel-LEDs-5050-RGB-SMD/1314161448.html&lt;br /&gt;
&lt;br /&gt;
=== Taschenlampe ===&lt;br /&gt;
MEGA DEAL!!!:&lt;br /&gt;
*http://www.aliexpress.com/item/Adjustable-Focus-Zoom-In-Out-CREE-Q5-LED-200-Lumen-SLIM-Ultra-Bright-Flashlight-Torch-For/548172876.html&lt;br /&gt;
*http://www.aliexpress.com/item/Mini-LED-Torch-7W-450LM-CREE-Q5-LED-Flashlight-Adjustable-Focus-Zoom-flash-Light-Lamp-free/913244541.html&lt;br /&gt;
*http://www.ebay.de/itm/111185764169?ssPageName=STRK:MEWNX:IT&amp;amp;_trksid=p3984.m1497.l2649&lt;br /&gt;
&lt;br /&gt;
== Laser ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=370810846723&amp;amp;clk_rvr_id=553098953077&lt;br /&gt;
*http://www.aliexpress.com/item/100pcs-650nm-6mm-5V-5mW-Laser-Dot-Diode-Module-Copper-Head-Red-FreeShipping/1143027805.html&lt;br /&gt;
*http://www.ebay.com/itm/10pcs-laser-diode-module-laser-diode-circuit-Module-Head-650nm-6mm-3V-5mW-/130903728362&lt;br /&gt;
*http://www.ebay.com/itm/10pcs-laser-diode-module-red-Laser-Diode-laser-diode-circuit-5V-Module-Head-/370810846723&lt;br /&gt;
*http://www.aliexpress.com/item/2pcs-650nm-5mW-Red-Laser-Line-Module-Glass-Lens-Focusable-Industrial-Class/981044377.html&lt;br /&gt;
&lt;br /&gt;
== Taster und Schalter ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=300916303479&amp;amp;clk_rvr_id=553093896309&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=110957987526&amp;amp;clk_rvr_id=553108801354&lt;br /&gt;
*http://www.aliexpress.com/item/100PC-Lot-SMT-3X6X2-5-h-MM-Tactile-Tact-Push-Button-Micro-Switch-Momentary-Two-Pin/728175767.html&lt;br /&gt;
*http://www.aliexpress.com/item/3-6-2-5H-2pin-white-SMD-mp3-mp4-Button-switch-key-switch-Tact-Switch/1065482131.html&lt;br /&gt;
&lt;br /&gt;
== Sensoren ==&lt;br /&gt;
=== Infrared PIR Motion ===&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=130824723088&amp;amp;clk_rvr_id=553097766279 (5 Stück, ca. 5€)&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=370671048122&amp;amp;clk_rvr_id=553103039249 (1 Stück, ca. 1,40€)&lt;br /&gt;
&lt;br /&gt;
=== Ultraschall ===&lt;br /&gt;
*http://www.aliexpress.com/item/Free-shipping-HC-SR04-HCSR04-Ultrasonic-module-ultrasonic-ranging-modules-ranging-module-Ultrasonic-Sensors-in-stock/610440655.html (10 @ 9.80 EUR)&lt;br /&gt;
*http://www.ebay.com/itm/370877806292 (10 @ 11.37 EUR)&lt;br /&gt;
&lt;br /&gt;
=== MPU 6050 Gyro ===&lt;br /&gt;
*http://www.aliexpress.com/item/FREE-SHIPPING-MPU-6050-MPU6050-Module-3-Axis-analog-gyro-sensors-3-Axis-Accelerometer-Module-GY/1086775775.html (5 @ 11.12 EUR)&lt;br /&gt;
&lt;br /&gt;
== GSM und GPS ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=270851051007&amp;amp;clk_rvr_id=553098865478&lt;br /&gt;
*http://www.aliexpress.com/item/VK16U6-ublox-GPS-Module-with-Antenna-TTL-Signal-Output-FZ0517-Free-Shipping-Dropshipping/922483051.html&lt;br /&gt;
&lt;br /&gt;
== Voltmeter ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/190657429814&lt;br /&gt;
*http://www.aliexpress.com/snapshot/291462038.html&lt;br /&gt;
*USB Strom-/Spannungsanzeige: siehe Bereich USB&lt;br /&gt;
&lt;br /&gt;
== Schaltregler-Module ==&lt;br /&gt;
=== Step-Down Schaltregler-Module ===&lt;br /&gt;
Die billigsten Step-Down Schaltregler-Module mit LM2596 - unter 2 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/310430056189&lt;br /&gt;
*http://www.ebay.at/itm/221113782096&lt;br /&gt;
*http://www.ebay.at/itm/251120173500&lt;br /&gt;
*http://www.ebay.at/itm/330791790173&lt;br /&gt;
*http://www.ebay.at/itm/130729707683&lt;br /&gt;
*http://www.ebay.at/itm/330646303458&lt;br /&gt;
*http://www.aliexpress.com/item/Hot-sale-10PCS-LM2596-DC-DC-Step-Down-Adjustable-Power-Supply/955850963.html?s=p (10 St.)&lt;br /&gt;
*http://www.ebay.de/itm/270762820456 10× MP2307 3A DC to DC Step-down Power Module KIS-3R33S * 6,95€&lt;br /&gt;
*http://www.ebay.de/itm/190698451181 KIM-055L, 9-40V auf 5V, 5A  (10 @ ca. 11,50 EUR)&lt;br /&gt;
*http://www.ebay.de/itm/261016126639 KIM-3R35, 9-40V auf 3.3V, 5A (10 @ ca. 6 EUR)&lt;br /&gt;
*http://www.ebay.at/itm/121249358837 2PCS 60V Input DC-DC Step Down Converter Adjustable Power Module LM2596HVS&lt;br /&gt;
&lt;br /&gt;
=== Step-Up Schaltregler-Module ===&lt;br /&gt;
Die billigsten Step-UP Schaltregler-Module mit LM2577 - ca 2 EUR inkl. Versand&lt;br /&gt;
*http://www.ebay.at/itm/170792120040&lt;br /&gt;
*http://www.ebay.at/itm/140773758954&lt;br /&gt;
*http://www.ebay.at/itm/260974659516&lt;br /&gt;
*http://www.ebay.at/itm/170813838776&lt;br /&gt;
*http://www.ebay.at/itm/180957599819&lt;br /&gt;
*http://www.aliexpress.com/item/Hot-Sell-10pcs-lot-1A-3V-to-5V-DC-DC-Converter-Step-Up-Boost-Module-Free/1359972360.html (10 @ 10.90 EUR)&lt;br /&gt;
&lt;br /&gt;
== Arduino ==&lt;br /&gt;
*http://www.aliexpress.com/item/Free-shipping-BTE-ROBOT-Main-Control-Board-Compatible-with-Arduino-duemilanove-2009-ATMEGA328USB-cable/587638761.html&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=200929452071&amp;amp;clk_rvr_id=552818482186&lt;br /&gt;
&lt;br /&gt;
Arduino Mini/Pro Clones (Breadboard, TQFP ATMEGA328) ab ca 7 EUR inkl. &lt;br /&gt;
Versand&lt;br /&gt;
*http://www.ebay.at/itm/230795578198 (ATMEGA328, Resettaster, kein USB)&lt;br /&gt;
*http://www.ebay.at/itm/230799921826 (ATMEGA328, Nano, USB)&lt;br /&gt;
*http://www.aliexpress.com/item/5pcs-lot-Pro-Mini-328-Mini-ATMEGA328-5V-16MHz-Free-Shipping-Dropshipping/1275111458.html (ATMEGA328, Resettaster, kein USB) &lt;br /&gt;
*http://www.aliexpress.com/item/CP2102-Module-Pro-Mini-Module-Atmega328-5V-16M-Compatible-With-Nano/1273504373.html (ATMEGA328, Nano, USB)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chip-Only ATMEGA328 mit Arduino-Bootloader ab ca 3 EUR inkl. Versand:&lt;br /&gt;
*http://www.ebay.at/itm/300726927158&lt;br /&gt;
*http://www.ebay.at/itm/140810128013&lt;br /&gt;
*http://www.ebay.at/itm/280902871387&lt;br /&gt;
*http://www.mikrocontroller.net/user/show/daniel_w29  Ich habe sie bei mir für 2,80€ gelistet - allerdings plus Versand&lt;br /&gt;
&lt;br /&gt;
Breadboard Power Supply:&lt;br /&gt;
*http://www.ebay.com/itm/New-1PCS-MB-102-Breadboard-Power-Supply-Module-3-3V-5V-For-Arduino-Board-EP98-/111146951040?pt=LH_DefaultDomain_0&amp;amp;hash=item19e0dfe180&lt;br /&gt;
&lt;br /&gt;
== Kamera ==&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/180937263580&lt;br /&gt;
*http://www.ebay.de/itm/221259368601&lt;br /&gt;
&lt;br /&gt;
== Bluetooth Modul ==&lt;br /&gt;
&lt;br /&gt;
*http://www.aliexpress.com/item/HM-06C-best-Wireless-bluetooth-to-uart-transceiver-Module-Support-Remot-control-mode-support-self-checksum/671962689.html&lt;br /&gt;
*http://www.fasttech.com/products/0/10005943/1453902-bluetooth-wireless-serial-port-master-slave-module&lt;br /&gt;
&lt;br /&gt;
== ICs und IC-Sockel ==&lt;br /&gt;
&lt;br /&gt;
10 Stk ATMEGA8A TQFP32 (10 Stück für 7,35 EUR inkl. Versand am 30.11.2013)&lt;br /&gt;
*http://www.ebay.at/itm/270747777418&lt;br /&gt;
10 Stk LM2577S (10 Stück für 12,33 EUR am 30.11.2013) &amp;quot;LM2577S-ADJ LM2577 2577 Step Up (Boost) Voltage Regulator TO-263-6&amp;quot;&lt;br /&gt;
*http://www.ebay.de/itm/130724310847 (10 Stück für 12,33 EUR am 30.11.2013)&lt;br /&gt;
*http://www.ebay.de/itm/250846968578 (10 Stück für 13,88 EUR am 30.11.2013)&lt;br /&gt;
LM317:&lt;br /&gt;
*http://www.banggood.com/10pcs-LM317T-LM317-Adjustable-Voltage-Regulator-IC-1_2V-To-37V-1_5A-p-80867.html&lt;br /&gt;
10 Stk MAX 232:&lt;br /&gt;
*http://www.banggood.com/10pcs-Smd-Max232-RS-232-Interface-IC-Dual-Transceiver-Sop-16-p-74860.html&lt;br /&gt;
8-Pin IC Sockel:&lt;br /&gt;
*http://www.banggood.com/60pcs-8-Pin-DIP-IC-Sockets-Adaptor-PCB-Solder-Type-Connectors-Plugs-p-908460.html&lt;br /&gt;
10 Stk 16-Pin Nullkraftsockel (10 Stück für 5,02 EUR am 30.11.2013)&lt;br /&gt;
*http://www.ebay.de/itm/110957986619&lt;br /&gt;
10 Stk 28-Pin Nullkraftsockel z.B. für Atmega8 (10 Stück für 5,99 EUR am 04.12.2013) &amp;quot;28 Pins Test Universal ZIF IC Socket narrow&amp;quot;&lt;br /&gt;
*http://www.ebay.de/itm/110950919330&lt;br /&gt;
&lt;br /&gt;
== Logic Analyzer ==&lt;br /&gt;
&lt;br /&gt;
*http://www.aliexpress.com/item/-/605379977.html&lt;br /&gt;
 - 21,68€ Kompatible zu Saleae, Ax, USB Blaster + 8 Probes: &lt;br /&gt;
*http://www.aliexpress.com/item/-/535753410.html (Verkauft itead übrigens &lt;br /&gt;
als Mini Logic für 38€)&lt;br /&gt;
*http://www.aliexpress.com/item/1pcs-lot-Free-shipping-New-Arrival-Saleae-Logic16-saleae16-USB-Logic-Analyzer-100M-16CH-best-quality/667671473.html&lt;br /&gt;
&lt;br /&gt;
== Programmer ==&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=301000812018&amp;amp;clk_rvr_id=553107983302&lt;br /&gt;
*http://www.aliexpress.com/store/group/Programmer-Emulator/213957_211836576.html&lt;br /&gt;
&lt;br /&gt;
Adapter für ISP 10pin-Programmer auf 6pin-Anschluss&lt;br /&gt;
*http://www.ebay.de/itm/281219165940 (1,00 EUR inkl. Versand)&lt;br /&gt;
&lt;br /&gt;
== USB ==&lt;br /&gt;
Stecker und Buchsen:&lt;br /&gt;
*http://www.aliexpress.com/item//1396423329.html&lt;br /&gt;
*http://www.aliexpress.com/item//1079961170.html&lt;br /&gt;
*http://www.aliexpress.com/item//1103210893.html&lt;br /&gt;
*http://www.aliexpress.com/item//1334095911.html&lt;br /&gt;
*http://www.aliexpress.com/item//978229424.html&lt;br /&gt;
*http://www.aliexpress.com/item//1333205473.html&lt;br /&gt;
*http://www.ebay.de/itm/360711370937&lt;br /&gt;
&lt;br /&gt;
Soundkarte&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=160840378914&lt;br /&gt;
&lt;br /&gt;
USB Strom-/Spannungsanzeige &lt;br /&gt;
*http://www.ebay.de/itm/141028948395 (hkiron-shop 2,34 EUR inkl. Versand am 30.11.2013)&lt;br /&gt;
*http://www.ebay.de/itm/400616343237 (befdimall 2,27 EUR inkl. Versand)&lt;br /&gt;
&lt;br /&gt;
== USB-TTL-UART ==&lt;br /&gt;
*http://www.ebay.at/itm/180953299346 (PL2303)&lt;br /&gt;
*http://www.ebay.at/itm/180934694241 (PL2303HX  *)&lt;br /&gt;
*http://www.ebay.at/itm/180956763688 (CP2102)&lt;br /&gt;
*http://www.ebay.at/itm/110929272410 (CP2102)&lt;br /&gt;
*http://www.ebay.at/itm/170895253016 (CP2102)&lt;br /&gt;
*http://www.ebay.at/itm/180962172801 (FT232RL)&lt;br /&gt;
&lt;br /&gt;
*http://www.ebay.de/itm/130970909714&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=261210033859&amp;amp;clk_rvr_id=553102953867&lt;br /&gt;
*http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&amp;amp;item=251299940298&amp;amp;clk_rvr_id=553109809733&lt;br /&gt;
&lt;br /&gt;
== Handys ==&lt;br /&gt;
*http://www.priceangels.com/index.html&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* zu dem angebotenen Preis kommen z.b. noch&lt;br /&gt;
** Kreditkarten Auslandszuschläge (etwa 1 - 2% je nach Karte)&lt;br /&gt;
** Zoll und Einfuhrumsatzsteuer, siehe [http://www.zoll.de/DE/Fachthemen/Steuern/Einfuhrumsatzsteuer/einfuhrumsatzsteuer_node.html Zoll-Homepage].&amp;lt;br&amp;gt;Allerdings verzichtet der Zoll i.d.R. bis ca. 26€ auf die Einfuhrumsatzsteuer, weil der Betrag der Einfuhrumsatzsteuer unter 5€ liegt.&lt;br /&gt;
&lt;br /&gt;
* Die angegeben Anzahl pro Lot genau prüfen oft werden z.B 1*USB-Kabel und 1*Arduino als 2 PCS/Lot beschrieben&lt;br /&gt;
&lt;br /&gt;
* Rücksendungen gehen zu Lasten des Kunden, das ist aufgrund der Versandkosten meist nicht wirtschaftlich&lt;br /&gt;
&lt;br /&gt;
* Natürlich wird ein in China bestellter Arduino mit dem Aufdruck &amp;quot;Made in Italy&amp;quot; nicht in Italien hergestellt.&lt;br /&gt;
&lt;br /&gt;
* Ein Blick auf die Bewertung des Händlers ist dringend zu empfehlen. Vorsicht bei solchen mit wenig Punkten oder Negativbewertungen. Positiv wenn Bestellungen für den gewünschten Artikel (z.B. in Transaction History &amp;amp; Feedback) schon mehrfach gut bewertet wurden.&lt;br /&gt;
&lt;br /&gt;
* Die mitgeteilte Trackingnummer &lt;br /&gt;
** schnellstmöglich prüfen, erscheint meist nach 2-3 Tagen auf http://intmail.183.com.cn/icc-itemtraceen.jsp  &lt;br /&gt;
** Falls das Zielland nicht &amp;quot;DE&amp;quot; ist, sofort reklamieren&lt;br /&gt;
** Falls nach ca 5 Tagen nicht vorhanden, reklamieren &lt;br /&gt;
** Später dann komfortabel den Status aller erwarteten Sendungen anzeigen bei https://www.paket.de&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MMC-_und_SD-Karten&amp;diff=38445</id>
		<title>MMC- und SD-Karten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MMC-_und_SD-Karten&amp;diff=38445"/>
		<updated>2009-08-22T22:02:43Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Allgemeine Informationen */ Tote Links entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MMC- und SD-Speicherkarten lassen sich im [[SPI]]-Modus relativ einfach mit einem Mikrocontroller ansteuern. Prinzipiell git es zwischen SD-Card und MMC nicht viele Unterschiede, allerdings sind SD-Karten weiter verbreitet, in der Regel schneller als MMCs, und haben eine besser implementiertes SPI-Interface. Es existieren diverse Varianten (miniSD, microSD) die zur normalen SD-Card kompatibel sind.&lt;br /&gt;
&lt;br /&gt;
Die Karte liest das anliegende Datenbit mit der steigenden Taktflanke ein, als SPI-Modi eignen sich somit Mode 0 (CPOL=0, CPHA=0) und Mode 3 (CPOL=1, CPHA=1) (siehe auch [[Serial Peripheral Interface]]). Bei MMCs ist der SPI-Modus nicht genau spezifiziert, somit kommt es durchaus mal vor dass der SPI-Modus je nach Karte unterschiedlich gewählt werden muss, oder dass die Karte überhaupt nicht zuverlässig funktioniert (siehe [http://www.mikrocontroller.net/forum/read-1-343528.html Beitrag im Forum]).&lt;br /&gt;
&lt;br /&gt;
=== DOs und DON&#039;Ts bei der Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
* Taktfrequenz bei der Initialisierung nicht höher als 400kHz&lt;br /&gt;
* Ein Pullup-Widerstand am Ausgang der MMC/SD Karte (DO) ist für eine saubere Initialisierung per SPI notwendig! [http://www.mikrocontroller.net/topic/112421#1001693 (Thread mit Erklärung dazu)]&lt;br /&gt;
* Saubere Versorgung: Kein Dioden-Pfusch, mit dem eine vorhandene 5V Versorgung mittels in Reihe geschalteter Dioden auf irgendwas im Bereich 3V &amp;quot;geregelt&amp;quot; wird. Stattdessen einen guten 3,3V-Regler verwenden. Die Karte mag es nicht, wenn mehr als 60mV Ripple auf Vcc ist. LM317 oder LM1117-ADC/-3.3 mit entspechenden Kondensatoren reicht zumindest bei Basteleien allemal.&lt;br /&gt;
* Sauberer Anschluss der Digitalschnittstelle: Spannungsteiler &amp;quot;verschleifen&amp;quot; die Signale bei hohen Frequenzen und die Übertragungsrate muss dann begrenzt werden. Also entweder ein Pegelwandler oder gleich an ein 3,3V I/O anschließen.&lt;br /&gt;
* Ein Pullpup-Widerstand an der Select-Leitung (/CS) schadet nicht und stellt sicher, dass die Karte erst mit Absicht selektiert wird.&lt;br /&gt;
* Nachdem die Karte deselektiert wurde (/CS auf high), die Taktleitung noch einige Male pulsen, damit die Karte DO hochohmig/tri-state schaltet (vgl. Chans Erläuterungen).&lt;br /&gt;
* Die Karten verfügen weder über einen Reset- noch einen Sleep-Anschluss. Moderne Karten reduzieren bei Nichtbenutzung ihren Stromverbrauch, einen vollständigen Reset kann man jedoch nicht per Software auslösen. Daher sollten die Karten per P-Channel-FET oder Spannungsregler/-wandler mit Enable-Funktion so angeschlossen werden, dass über Versorgung an/aus ein (Power-On-)Reset ausgelöst werden kann. Dabei darauf achten, dass vorhandene Pull-Up-Widerstände bei abgeschalteter Versorgung ebenfalls deaktiviert werden (vgl. z.B. Schaltplan für den Anschluss von SD-Card/MMC per SPI an AVR in Chans Beispielen. Link unten).&lt;br /&gt;
* Guter Kontakt im Steckplatz, sehr gut eignen sich mit der Zange verbogene Stiftleisten, oft sieht es aus als ob es &amp;quot;passt&amp;quot;, aber es gibt doch keinen Kontakt, daher bei Fehlern: Immer Durchmessen! Auch zu erwähnen wären da alte ISA-Bus Buchsen, die auf jedem alten PC Mainboard drauf sind. Um sicher zu gehen, dass der Kontakt wirklich gut ist, sollte man aber trotzdem SD-Slots benutzen. Diese bekommt man u.a. bei CSD (günstig), Reichelt (teuer) oder aus alten Kartenlesern.&lt;br /&gt;
* Guter Kontakt #2: Was sich im übrigen auch sehr gut eignet sind Adapter von MiniSD auf normales SD-Format, um dann MiniSD zu benutzen. Wenn man eine Stiftleiste im 2.54mm-Format oder Lötnägel im selben Format auf der Platine hat, kann man daran wunderbar den SD-Kartenadapter anlöten. Das ist mechanisch recht stabil. Ein kleines Manko ist allerdings, daß dann eine Gold-Lötzinn-Legierung durch die vergoldeten Kontakte entsteht und das soll ja dem Lötzinn langfristig nicht sehr zuträglich sein. Aber für&#039;s Hobby funktioniert das wunderbar.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[Bild:SD Steck Stift.jpg]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(Liefere Bild in besserer Qualität nach!)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bibliotheken zur Ansteuerung ===&lt;br /&gt;
* http://elm-chan.org/fsw/ff/00index_e.html - ELM ChaNs FAT(12,16,32)-Dateisystem. Klein und übersichtlich, hochoptimiert, frei auch für kommerzielle Anwendung. Beispiele für AVR, H8, LPC2k mit MCI u.a. enthalten (&amp;quot;samples&amp;quot;), neuere Versionen mit LFN-Unterstützung Beispiel für AT91SAM7 inkl. DMA im Projekt [[ARM MP3/AAC Player]].&lt;br /&gt;
* [http://sourceforge.net/projects/efsl EFSL] FAT16/32-Dateisystem, unterstützt Partitionen und Superfloppys, Beispielcode für AVR, LPC2000 und AT91SAM7 enthalten (siehe auch [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/efsl_arm/ M. Thomas&#039; ARM+SD/MMC Seite])&lt;br /&gt;
* [http://www.holger-klabunde.de/avr/avrboard.htm#cf Holger Klabundes FAT16/32] mit Beispielen für AVR MMC/SD und CF, LPC2k mit SPI&lt;br /&gt;
* libfat aus dem [http://sourceforge.net/projects/devkitpro devkitpro-Projekt] u.a. LFN-Unterstützung.&lt;br /&gt;
* [http://www.mikro-control.de/Joomla/index.php?option=com_content&amp;amp;task=view&amp;amp;id=18&amp;amp;Itemid=30 SD-Logger] - FAT 16, für den privaten Einsatz kostenfrei&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-125350.html MMC-Ansteuerung mit FAT16 von Ulrich Radig]&lt;br /&gt;
* [http://www.zws.com/products/dosfs/index.html DOSFS Free FAT12/FAT16/FAT32 Filesystem] &amp;quot;DOSFS is a free FAT-compatible filesystem intended for fairly low-end embedded applications. Intended target systems would be in the ballpark of 1K RAM, 4K ROM or more&amp;quot;.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/48481 MMC/SD-Karte mit FAT16 an AVR] von Roland Riegel&lt;br /&gt;
* [ftp://ftp.circuitcellar.com/pub/Circuit_Cellar/2005/176/Sham176.zip Circuit Cellar FAT16 MMC/SD] mit MMC/SD Hardwaretreiber für MSP430&lt;br /&gt;
* [http://www.analog.com &amp;quot;Implementing FAT32 File Systems on ADSP-BF533 Blackfin Processors&amp;quot;] Application Note und Code von ADI&lt;br /&gt;
* [http://www.atmel.com/dyn/products/tools.asp?family_id=682 FAT-Code in Atmel&#039;s AVR32 UC3 Software-Library]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/FAT32 AVR FAT16/32 read write Bibliothek mit wiki]&lt;br /&gt;
* [http://www.embedded-os.de/index.html?pcfat_port.htm pC/FAT driver] &amp;quot;using SPI for sector read/write to MMC/MMCplus/HD-MMC/M-Bridge/SD/SDHC-cards on different platforms&amp;quot;&lt;br /&gt;
* [http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html SD Card Interfacing with ATmega8] (FAT32 implementation) by CC Dharmani&lt;br /&gt;
* [[AVR FAT32]]&lt;br /&gt;
&lt;br /&gt;
=== Allgemeine Informationen ===&lt;br /&gt;
* [http://www.digitalspirit.org/file/index.php/obj/docs/sd/ Datenblätter] ( [http://www.digitalspirit.org/file/index.php/obj-download/docs/sd/ProductManualSDCardv2.2final.pdf SD Card Product Manual 2.2] )&lt;br /&gt;
* [http://elm-chan.org/docs/mmc/mmc_e.html ELM ChaN - How to Use an MMC]&lt;br /&gt;
* [http://elm-chan.org/fsw/ff/00index_e.html ELM ChaN - MMC/SD Benchmarks]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=MMC*+SD Beiträge zum Thema MMC/SD im Forum (ca. 200 Threads)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.instructables.com/id/EZD6Q18LYGES1762SJ/ DIY SD-Card Fassung aus einem alten Floppy Kabel]&lt;br /&gt;
&lt;br /&gt;
* [http://www.shop.display3000.com/pi8/pi14/pd102.html Weiter unten im Text (runterscrollen) gibt es interessante Oszi-Bilder zu den oft genannten Spannungsteilern oder Transistorlösungen als Pegelwandler]&lt;br /&gt;
&lt;br /&gt;
=== Halter ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.watterott.com/SD-Sockel-SDAMB-01215BT00 Halter für normale SD-Karten]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Category:Datenübertragung]]&lt;br /&gt;
[[Kategorie:Speicher und Dateisysteme]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MMC-_und_SD-Karten&amp;diff=38444</id>
		<title>MMC- und SD-Karten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MMC-_und_SD-Karten&amp;diff=38444"/>
		<updated>2009-08-22T21:59:37Z</updated>

		<summary type="html">&lt;p&gt;R2d2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MMC- und SD-Speicherkarten lassen sich im [[SPI]]-Modus relativ einfach mit einem Mikrocontroller ansteuern. Prinzipiell git es zwischen SD-Card und MMC nicht viele Unterschiede, allerdings sind SD-Karten weiter verbreitet, in der Regel schneller als MMCs, und haben eine besser implementiertes SPI-Interface. Es existieren diverse Varianten (miniSD, microSD) die zur normalen SD-Card kompatibel sind.&lt;br /&gt;
&lt;br /&gt;
Die Karte liest das anliegende Datenbit mit der steigenden Taktflanke ein, als SPI-Modi eignen sich somit Mode 0 (CPOL=0, CPHA=0) und Mode 3 (CPOL=1, CPHA=1) (siehe auch [[Serial Peripheral Interface]]). Bei MMCs ist der SPI-Modus nicht genau spezifiziert, somit kommt es durchaus mal vor dass der SPI-Modus je nach Karte unterschiedlich gewählt werden muss, oder dass die Karte überhaupt nicht zuverlässig funktioniert (siehe [http://www.mikrocontroller.net/forum/read-1-343528.html Beitrag im Forum]).&lt;br /&gt;
&lt;br /&gt;
=== DOs und DON&#039;Ts bei der Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
* Taktfrequenz bei der Initialisierung nicht höher als 400kHz&lt;br /&gt;
* Ein Pullup-Widerstand am Ausgang der MMC/SD Karte (DO) ist für eine saubere Initialisierung per SPI notwendig! [http://www.mikrocontroller.net/topic/112421#1001693 (Thread mit Erklärung dazu)]&lt;br /&gt;
* Saubere Versorgung: Kein Dioden-Pfusch, mit dem eine vorhandene 5V Versorgung mittels in Reihe geschalteter Dioden auf irgendwas im Bereich 3V &amp;quot;geregelt&amp;quot; wird. Stattdessen einen guten 3,3V-Regler verwenden. Die Karte mag es nicht, wenn mehr als 60mV Ripple auf Vcc ist. LM317 oder LM1117-ADC/-3.3 mit entspechenden Kondensatoren reicht zumindest bei Basteleien allemal.&lt;br /&gt;
* Sauberer Anschluss der Digitalschnittstelle: Spannungsteiler &amp;quot;verschleifen&amp;quot; die Signale bei hohen Frequenzen und die Übertragungsrate muss dann begrenzt werden. Also entweder ein Pegelwandler oder gleich an ein 3,3V I/O anschließen.&lt;br /&gt;
* Ein Pullpup-Widerstand an der Select-Leitung (/CS) schadet nicht und stellt sicher, dass die Karte erst mit Absicht selektiert wird.&lt;br /&gt;
* Nachdem die Karte deselektiert wurde (/CS auf high), die Taktleitung noch einige Male pulsen, damit die Karte DO hochohmig/tri-state schaltet (vgl. Chans Erläuterungen).&lt;br /&gt;
* Die Karten verfügen weder über einen Reset- noch einen Sleep-Anschluss. Moderne Karten reduzieren bei Nichtbenutzung ihren Stromverbrauch, einen vollständigen Reset kann man jedoch nicht per Software auslösen. Daher sollten die Karten per P-Channel-FET oder Spannungsregler/-wandler mit Enable-Funktion so angeschlossen werden, dass über Versorgung an/aus ein (Power-On-)Reset ausgelöst werden kann. Dabei darauf achten, dass vorhandene Pull-Up-Widerstände bei abgeschalteter Versorgung ebenfalls deaktiviert werden (vgl. z.B. Schaltplan für den Anschluss von SD-Card/MMC per SPI an AVR in Chans Beispielen. Link unten).&lt;br /&gt;
* Guter Kontakt im Steckplatz, sehr gut eignen sich mit der Zange verbogene Stiftleisten, oft sieht es aus als ob es &amp;quot;passt&amp;quot;, aber es gibt doch keinen Kontakt, daher bei Fehlern: Immer Durchmessen! Auch zu erwähnen wären da alte ISA-Bus Buchsen, die auf jedem alten PC Mainboard drauf sind. Um sicher zu gehen, dass der Kontakt wirklich gut ist, sollte man aber trotzdem SD-Slots benutzen. Diese bekommt man u.a. bei CSD (günstig), Reichelt (teuer) oder aus alten Kartenlesern.&lt;br /&gt;
* Guter Kontakt #2: Was sich im übrigen auch sehr gut eignet sind Adapter von MiniSD auf normales SD-Format, um dann MiniSD zu benutzen. Wenn man eine Stiftleiste im 2.54mm-Format oder Lötnägel im selben Format auf der Platine hat, kann man daran wunderbar den SD-Kartenadapter anlöten. Das ist mechanisch recht stabil. Ein kleines Manko ist allerdings, daß dann eine Gold-Lötzinn-Legierung durch die vergoldeten Kontakte entsteht und das soll ja dem Lötzinn langfristig nicht sehr zuträglich sein. Aber für&#039;s Hobby funktioniert das wunderbar.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[Bild:SD Steck Stift.jpg]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(Liefere Bild in besserer Qualität nach!)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bibliotheken zur Ansteuerung ===&lt;br /&gt;
* http://elm-chan.org/fsw/ff/00index_e.html - ELM ChaNs FAT(12,16,32)-Dateisystem. Klein und übersichtlich, hochoptimiert, frei auch für kommerzielle Anwendung. Beispiele für AVR, H8, LPC2k mit MCI u.a. enthalten (&amp;quot;samples&amp;quot;), neuere Versionen mit LFN-Unterstützung Beispiel für AT91SAM7 inkl. DMA im Projekt [[ARM MP3/AAC Player]].&lt;br /&gt;
* [http://sourceforge.net/projects/efsl EFSL] FAT16/32-Dateisystem, unterstützt Partitionen und Superfloppys, Beispielcode für AVR, LPC2000 und AT91SAM7 enthalten (siehe auch [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/efsl_arm/ M. Thomas&#039; ARM+SD/MMC Seite])&lt;br /&gt;
* [http://www.holger-klabunde.de/avr/avrboard.htm#cf Holger Klabundes FAT16/32] mit Beispielen für AVR MMC/SD und CF, LPC2k mit SPI&lt;br /&gt;
* libfat aus dem [http://sourceforge.net/projects/devkitpro devkitpro-Projekt] u.a. LFN-Unterstützung.&lt;br /&gt;
* [http://www.mikro-control.de/Joomla/index.php?option=com_content&amp;amp;task=view&amp;amp;id=18&amp;amp;Itemid=30 SD-Logger] - FAT 16, für den privaten Einsatz kostenfrei&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-125350.html MMC-Ansteuerung mit FAT16 von Ulrich Radig]&lt;br /&gt;
* [http://www.zws.com/products/dosfs/index.html DOSFS Free FAT12/FAT16/FAT32 Filesystem] &amp;quot;DOSFS is a free FAT-compatible filesystem intended for fairly low-end embedded applications. Intended target systems would be in the ballpark of 1K RAM, 4K ROM or more&amp;quot;.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/48481 MMC/SD-Karte mit FAT16 an AVR] von Roland Riegel&lt;br /&gt;
* [ftp://ftp.circuitcellar.com/pub/Circuit_Cellar/2005/176/Sham176.zip Circuit Cellar FAT16 MMC/SD] mit MMC/SD Hardwaretreiber für MSP430&lt;br /&gt;
* [http://www.analog.com &amp;quot;Implementing FAT32 File Systems on ADSP-BF533 Blackfin Processors&amp;quot;] Application Note und Code von ADI&lt;br /&gt;
* [http://www.atmel.com/dyn/products/tools.asp?family_id=682 FAT-Code in Atmel&#039;s AVR32 UC3 Software-Library]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/FAT32 AVR FAT16/32 read write Bibliothek mit wiki]&lt;br /&gt;
* [http://www.embedded-os.de/index.html?pcfat_port.htm pC/FAT driver] &amp;quot;using SPI for sector read/write to MMC/MMCplus/HD-MMC/M-Bridge/SD/SDHC-cards on different platforms&amp;quot;&lt;br /&gt;
* [http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html SD Card Interfacing with ATmega8] (FAT32 implementation) by CC Dharmani&lt;br /&gt;
* [[AVR FAT32]]&lt;br /&gt;
&lt;br /&gt;
=== Allgemeine Informationen ===&lt;br /&gt;
* [http://www.sandisk.com/Oem/Manuals/ Datenblätter von Sandisk] ( [http://www.digitalspirit.org/file/?aff=,/docs/sd/ProductManualSDCardv2.2final.pdf SD Card Product Manual 2.2] )&lt;br /&gt;
* [http://elm-chan.org/docs/mmc/mmc_e.html ELM ChaN - How to Use an MMC]&lt;br /&gt;
* [http://elm-chan.org/fsw/ff/00index_e.html ELM ChaN - MMC/SD Benchmarks]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=MMC*+SD Beiträge zum Thema MMC/SD im Forum (ca. 200 Threads)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.instructables.com/id/EZD6Q18LYGES1762SJ/ DIY SD-Card Fassung aus einem alten Floppy Kabel]&lt;br /&gt;
&lt;br /&gt;
* [http://www.shop.display3000.com/pi8/pi14/pd102.html Weiter unten im Text (runterscrollen) gibt es interessante Oszi-Bilder zu den oft genannten Spannungsteilern oder Transistorlösungen als Pegelwandler]&lt;br /&gt;
&lt;br /&gt;
=== Halter ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.watterott.com/SD-Sockel-SDAMB-01215BT00 Halter für normale SD-Karten]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Category:Datenübertragung]]&lt;br /&gt;
[[Kategorie:Speicher und Dateisysteme]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=MMC-_und_SD-Karten&amp;diff=38428</id>
		<title>MMC- und SD-Karten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=MMC-_und_SD-Karten&amp;diff=38428"/>
		<updated>2009-08-20T20:39:02Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* DOs und DON&amp;#039;Ts bei der Ansteuerung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MMC- und SD-Speicherkarten lassen sich im [[SPI]]-Modus relativ einfach mit einem Mikrocontroller ansteuern. Prinzipiell git es zwischen SD-Card und MMC nicht viele Unterschiede, allerdings sind SD-Karten weiter verbreitet, in der Regel schneller als MMCs, und haben eine besser implementiertes SPI-Interface. Es existieren diverse Varianten (miniSD, microSD) die zur normalen SD-Card kompatibel sind.&lt;br /&gt;
&lt;br /&gt;
Die Karte liest das anliegende Datenbit mit der steigenden Taktflanke ein, als SPI-Modi eignen sich somit Mode 0 (CPOL=0, CPHA=0) und Mode 3 (CPOL=1, CPHA=1) (siehe auch [[Serial Peripheral Interface]]). Bei MMCs ist der SPI-Modus nicht genau spezifiziert, somit kommt es durchaus mal vor dass der SPI-Modus je nach Karte unterschiedlich gewählt werden muss, oder dass die Karte überhaupt nicht zuverlässig funktioniert (siehe [http://www.mikrocontroller.net/forum/read-1-343528.html Beitrag im Forum]).&lt;br /&gt;
&lt;br /&gt;
=== DOs und DON&#039;Ts bei der Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
* Taktfrequenz bei der Initialisierung nicht höher als 400kHz&lt;br /&gt;
* Ein Pullup-Widerstand am Ausgang der MMC/SD Karte (DO) ist für eine saubere Initialisierung per SPI notwendig! [http://www.mikrocontroller.net/topic/112421#1001693 (Thread mit Erklärung dazu)]&lt;br /&gt;
* Saubere Versorgung: Kein Dioden-Pfusch, mit dem eine vorhandene 5V Versorgung mittels in Reihe geschalteter Dioden auf irgendwas im Bereich 3V &amp;quot;geregelt&amp;quot; wird. Stattdessen einen guten 3,3V-Regler verwenden. Die Karte mag es nicht, wenn mehr als 60mV Ripple auf Vcc ist. LM317 oder LM1117-ADC/-3.3 mit entspechenden Kondensatoren reicht zumindest bei Basteleien allemal.&lt;br /&gt;
* Sauberer Anschluss der Digitalschnittstelle: Spannungsteiler &amp;quot;verschleifen&amp;quot; die Signale bei hohen Frequenzen und die Übertragungsrate muss dann begrenzt werden. Also entweder ein Pegelwandler oder gleich an ein 3,3V I/O anschließen.&lt;br /&gt;
* Ein Pullpup-Widerstand an der Select-Leitung (/CS) schadet nicht und stellt sicher, dass die Karte erst mit Absicht selektiert wird.&lt;br /&gt;
* Nachdem die Karte deselektiert wurde (/CS auf high), die Taktleitung noch einige Male pulsen, damit die Karte DO hochohmig/tri-state schaltet (vgl. Chans Erläuterungen).&lt;br /&gt;
* Die Karten verfügen weder über einen Reset- noch einen Sleep-Anschluss. Moderne Karten reduzieren bei Nichtbenutzung ihren Stromverbrauch, einen vollständigen Reset kann man jedoch nicht per Software auslösen. Daher sollten die Karten per P-Channel-FET oder Spannungsregler/-wandler mit Enable-Funktion so angeschlossen werden, dass über Versorgung an/aus ein (Power-On-)Reset ausgelöst werden kann. Dabei darauf achten, dass vorhandene Pull-Up-Widerstände bei abgeschalteter Versorgung ebenfalls deaktiviert werden (vgl. z.B. Schaltplan für den Anschluss von SD-Card/MMC per SPI an AVR in Chans Beispielen. Link unten).&lt;br /&gt;
* Guter Kontakt im Steckplatz, sehr gut eignen sich mit der Zange verbogene Stiftleisten, oft sieht es aus als ob es &amp;quot;passt&amp;quot;, aber es gibt doch keinen Kontakt, daher bei Fehlern: Immer Durchmessen! Auch zu erwähnen wären da alte ISA-Bus Buchsen, die auf jedem alten PC Mainboard drauf sind. Um sicher zu gehen, dass der Kontakt wirklich gut ist, sollte man aber trotzdem SD-Slots benutzen. Diese bekommt man u.a. bei CSD (günstig), Reichelt (teuer) oder aus alten Kartenlesern.&lt;br /&gt;
* Guter Kontakt #2: Was sich im übrigen auch sehr gut eignet sind Adapter von MiniSD auf normales SD-Format, um dann MiniSD zu benutzen. Wenn man eine Stiftleiste im 2.54mm-Format oder Lötnägel im selben Format auf der Platine hat, kann man daran wunderbar den SD-Kartenadapter anlöten. Das ist mechanisch recht stabil. Ein kleines Manko ist allerdings, daß dann eine Gold-Lötzinn-Legierung durch die vergoldeten Kontakte entsteht und das soll ja dem Lötzinn langfristig nicht sehr zuträglich sein. Aber für&#039;s Hobby funktioniert das wunderbar.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[Bild:SD Steck Stift.jpg]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(Liefere Bild in besserer Qualität nach!)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bibliotheken zur Ansteuerung ===&lt;br /&gt;
* http://elm-chan.org/fsw/ff/00index_e.html - ELM ChaNs FAT(12,16,32)-Dateisystem. Klein und übersichtlich, hochoptimiert, frei auch für kommerzielle Anwendung. Beispiele für AVR, H8, LPC2k mit MCI u.a. enthalten (&amp;quot;samples&amp;quot;), neuere Versionen mit LFN-Unterstützung Beispiel für AT91SAM7 inkl. DMA im Projekt [[ARM MP3/AAC Player]].&lt;br /&gt;
* [http://sourceforge.net/projects/efsl EFSL] FAT16/32-Dateisystem, unterstützt Partitionen und Superfloppys, Beispielcode für AVR, LPC2000 und AT91SAM7 enthalten (siehe auch [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/efsl_arm/ M. Thomas&#039; ARM+SD/MMC Seite])&lt;br /&gt;
* [http://www.holger-klabunde.de/avr/avrboard.htm#cf Holger Klabundes FAT16/32] mit Beispielen für AVR MMC/SD und CF, LPC2k mit SPI&lt;br /&gt;
* libfat aus dem [http://sourceforge.net/projects/devkitpro devkitpro-Projekt] u.a. LFN-Unterstützung.&lt;br /&gt;
* [http://www.mikro-control.de/Joomla/index.php?option=com_content&amp;amp;task=view&amp;amp;id=18&amp;amp;Itemid=30 SD-Logger] - FAT 16, für den privaten Einsatz kostenfrei&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/read-4-125350.html MMC-Ansteuerung mit FAT16 von Ulrich Radig]&lt;br /&gt;
* [http://www.zws.com/products/dosfs/index.html DOSFS Free FAT12/FAT16/FAT32 Filesystem] &amp;quot;DOSFS is a free FAT-compatible filesystem intended for fairly low-end embedded applications. Intended target systems would be in the ballpark of 1K RAM, 4K ROM or more&amp;quot;.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/48481 MMC/SD-Karte mit FAT16 an AVR] von Roland Riegel&lt;br /&gt;
* [ftp://ftp.circuitcellar.com/pub/Circuit_Cellar/2005/176/Sham176.zip Circuit Cellar FAT16 MMC/SD] mit MMC/SD Hardwaretreiber für MSP430&lt;br /&gt;
* [http://www.analog.com &amp;quot;Implementing FAT32 File Systems on ADSP-BF533 Blackfin Processors&amp;quot;] Application Note und Code von ADI&lt;br /&gt;
* [http://www.atmel.com/dyn/products/tools.asp?family_id=682 FAT-Code in Atmel&#039;s AVR32 UC3 Software-Library]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/FAT32 AVR FAT16/32 read write Bibliothek mit wiki]&lt;br /&gt;
* [http://www.embedded-os.de/index.html?pcfat_port.htm pC/FAT driver] &amp;quot;using SPI for sector read/write to MMC/MMCplus/HD-MMC/M-Bridge/SD/SDHC-cards on different platforms&amp;quot;&lt;br /&gt;
* [http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html SD Card Interfacing with ATmega8] (FAT32 implementation) by CC Dharmani&lt;br /&gt;
* [[AVR FAT32]]&lt;br /&gt;
&lt;br /&gt;
=== Allgemeine Informationen ===&lt;br /&gt;
* [http://www.sandisk.com/Oem/Manuals/ Datenblätter von Sandisk] ( [http://www.digitalspirit.org/file/?aff=,/docs/sd/ProductManualSDCardv2.2final.pdf SD Card Product Manual 2.2] )&lt;br /&gt;
* [http://elm-chan.org/docs/mmc/mmc_e.html ELM ChaN - How to Use an MMC]&lt;br /&gt;
* [http://elm-chan.org/fsw/ff/00index_e.html ELM ChaN - MMC/SD Benchmarks]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=MMC*+SD Beiträge zum Thema MMC/SD im Forum (ca. 200 Threads)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.instructables.com/id/EZD6Q18LYGES1762SJ/ DIY SD-Card Fassung aus einem alten Floppy Kabel]&lt;br /&gt;
&lt;br /&gt;
* [http://www.shop.display3000.com/pi8/pi14/pd102.html Weiter unten im Text (runterscrollen) gibt es interessante Oszi-Bilder zu den oft genannten Spannungsteilern oder Transistorlösungen als Pegelwandler]&lt;br /&gt;
&lt;br /&gt;
=== Halter ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.watterott.com/SD-Sockel-SDAMB-01215BT00 Halter für normale SD-Karten]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Kategorie:Speicher und Dateisysteme]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SD-Card&amp;diff=29240</id>
		<title>SD-Card</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SD-Card&amp;diff=29240"/>
		<updated>2008-07-22T18:13:10Z</updated>

		<summary type="html">&lt;p&gt;R2d2: Weiterleitung nach MMC- und SD-Karten erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[MMC-_und_SD-Karten]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS&amp;diff=29187</id>
		<title>GPS</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS&amp;diff=29187"/>
		<updated>2008-07-21T18:07:08Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* GPS Projekte hier im Wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;Global Positioning System&amp;quot; - satellitengestütztes System zur weltweiten Ortsbestimmung.&lt;br /&gt;
&lt;br /&gt;
Das GPS Satellitensystem wurde vom US Verteidigungsministerium installiert, um die Steuerung von Militärfahrzeugen und Waffensystemen zu vereinfachen. Die (teilweise) offengelegte Spezifikation machte das System aber auch zivil nutzbar und - vor allem auf Drängen der amerikanischen Auto-Industrie - wurde es mittlerweile von einem absichtlich aufgeprägten Fehlerwert(*1) befreit, so dass Positionsbestimmungen auch bei moderatem Aufwand mit einer Genauigkeit im Bereich weniger Meter möglich sind (vorher lag die Ungenauigkeit bei etwa 30..100 Meter).&lt;br /&gt;
&lt;br /&gt;
Anders als die früher verbreiteten, &amp;quot;aktiven&amp;quot; Systeme(*2), bei denen zum Beispiel ein Flugzeug oder Schiff zur Standardortbestimmung mit einem Funk-&#039;&#039;&#039;Sender&#039;&#039;&#039; ausgestattet war, der dann von (mindestens zwei) stationären Empfangsstationen &amp;quot;angepeilt&amp;quot; wurde, arbeitet GPS als &amp;quot;passives&amp;quot; System: Ein GPS-Gerät ist ein Funk-&#039;&#039;&#039;Empfänger&#039;&#039;&#039;, welcher aus den Laufzeitunterschieden der von den GPS-Satelliten ausgestrahlten Positions- und Uhrzeit-Signalen seine eigene Position berechnet.&lt;br /&gt;
Ein GPS-Gerät kann daher nicht &amp;quot;angepeilt&amp;quot; werden, und so muss z.B. eine auf GPS basierende KFZ-Diebstahlsicherung stets durch einen Sender (etwa ein Handy) ergänzt werden, damit das Auto seinen Standort an eine Überwachungszentrale melden kann.&lt;br /&gt;
&lt;br /&gt;
Mit der zunehmenden Nachfrage nach GPS-Chipsets durch die Auto-Industrie ist davon auszugehen, dass der Aufpreis, zu dem ein GPS-System in eine Mikrocontroller-Applikation integriert werden kann, rapide fallen wird. GPS wird daher möglichwerweise in wenigen Jahren als &amp;quot;kleiner Zusatznutzen&amp;quot; in vielen technischen Geräten zur Verfügung stehen, ähnlich wie heute der Empfang des DCF77-Signals zur Uhrensteuerung.&lt;br /&gt;
&lt;br /&gt;
=== GPS als hochgenaue Referenzfrequenz ===&lt;br /&gt;
Der Sekundenimpuls eines GPS-Empfängers hat einen Jitter von wenigen Nanosekunden, daher kann GPS als Zeitstandard für Frequenz- und Zeitmessungen verwendet werden. Manche GPS-Empfänger liefern ein Korrektursignal, und sind für diese Aufgabe besonders geeignet, genaueres hier:&lt;br /&gt;
&lt;br /&gt;
*GPS-disciplined Frequency Standard: http://hpsdr.org/wiki/index.php?title=GIBRALTAR&lt;br /&gt;
&lt;br /&gt;
*Über die Stabilität von Oszillatoren und Frequenznormalen http://www.ulrich-bangert.de/AMSAT-Journal.pdf , Abb.14 S.28 zeigt die Wirkung der sogenannten &amp;quot;Sawtooth-Correction&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== GPS Projekte hier im Wiki ===&lt;br /&gt;
&lt;br /&gt;
* [[GPS-Empfang mit Lassen iQ]]&lt;br /&gt;
* [[GPS-Platine mit Tyco-Modul]]&lt;br /&gt;
* [[GPS Logger]]&lt;br /&gt;
* [[GPS-Maus Falcom Navi-S-1]]&lt;br /&gt;
&lt;br /&gt;
=== Web-Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.trimble.com/gps/ Ein empfehlenswertes GPS-Tutorial].&lt;br /&gt;
* [http://www.aprs.de/ Funkamateure betreiben GPS in Verbindung mit Funkgeräten zur automatischen Standortmeldung]&lt;br /&gt;
* [http://r2d2.stefanm.com/gps-tracker.html GPS-Tracker mit Navigation auf LPC2103-Basis]&lt;br /&gt;
* [http://www.dg1sfj.de/hardware/hw_ubloxgps.html GPS Empfänger mit uBlox-GPS-Modul]&lt;br /&gt;
* [http://www.maltepoeggel.de/html/gpsms1e/ GPS Empfänger mit µBlox GPS MS1E]&lt;br /&gt;
* [http://www.gpsvisualizer.com/ GPS-Visualizer Do-It-Yourself Mapping]&lt;br /&gt;
* [http://www.codeproject.com/vb/net/WritingGPSApplications1.asp Writing Your Own GPS Applications: Part 1] und [http://www.codeproject.com/netcf/WritingGPSApplications2.asp Part 2] (C# und VB.NET)&lt;br /&gt;
* [http://www.navcen.uscg.gov/pubs/gps/sigspec/gpsspsa.pdf GPS Standard Positioning Service Signal Specification] - das offizielle Dokument&lt;br /&gt;
* [http://www.youtube.com/watch?v=wi_3XwkA8cQ Youtube-Video] - Luft- und Raumfahrt-Technologe, Dr. Kevin Dutton, erklärt für NASA&#039;s Destination Tomorrow die Funktionsweise des Global Positioning Systems (GPS), was es kann und wo es eingesetzt wird. (engl.)&lt;br /&gt;
* [http://www.ko4bb.com/cgi-bin/manuals.pl?dir=5)_GPS_Timing Manuals zu professionellen GPS-Referenzempfängern, u.a. Hewlett-Packard]&lt;br /&gt;
----&lt;br /&gt;
* 1: Der aufgeprägte Fehlerwert war ohnehin nicht sehr effektiv, da er sich mit etwas erhöhtem Aufwand eliminieren ließ (Differential GPS).&lt;br /&gt;
* 2: Auch die mittlerweile eingeführte &amp;quot;Handy-Ortung&amp;quot; ist ein aktives System - mit allen Vor- und Nachteilen.&lt;br /&gt;
&lt;br /&gt;
[[Category:GPS]]&lt;br /&gt;
[[Kategorie:Funk]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29156</id>
		<title>GPS-Maus Falcom Navi-S-1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29156"/>
		<updated>2008-07-20T11:24:47Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel wird noch ergänzt.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Chipsatz:&lt;br /&gt;
|SiRF2&lt;br /&gt;
|-&lt;br /&gt;
|Versorgungsspannung:&lt;br /&gt;
|5V (3,5 bis 7V)&lt;br /&gt;
|-&lt;br /&gt;
|Schnittstelle:&lt;br /&gt;
|Seriell, 3,3 Volt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Anschlussbelegung ====&lt;br /&gt;
Wenn man das angebrachte Kabel abmantelt, findet man vier Adern vor. Die Belegung ist wie folgt:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Gelb:&lt;br /&gt;
|V&amp;lt;sub&amp;gt;cc&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Grün:&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|Rot:&lt;br /&gt;
|TX&lt;br /&gt;
|-&lt;br /&gt;
|Weiß:&lt;br /&gt;
|RX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Um die Funktion und den Empfang der Module zu testen, ist das Programm SiRFDemo nützlich. Weiterhin kann man mit diesem Programm die Module konfigurieren.&amp;lt;br /&amp;gt; Firmwareupdates können mit dem Programm SiRFflash durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Standardeinstellungen ==&lt;br /&gt;
Nach dem Einschalten werden folgende NMEA-Daten mit 38400 Baud ausgegeben: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$PSRFTXT,Version: 2.4.13.00-XTrac2.0.1-C3PROD1.0 0000003721 *17&lt;br /&gt;
$PSRFTXT,TOW:  0*25&lt;br /&gt;
$PSRFTXT,WK:   1255*66&lt;br /&gt;
$PSRFTXT,POS:  6378137 0 0*2A&lt;br /&gt;
$PSRFTXT,CLK:  96250*25&lt;br /&gt;
$PSRFTXT,CHNL: 12*73&lt;br /&gt;
$PSRFTXT,Baud rate: 38400  System clock: 24.553MHz*45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach folgen nur noch RMC-Nachrichten.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== Schnittstelle ===&lt;br /&gt;
Die GPS-Mäuse senden in der Ausgangskonfiguration Daten im SiRF-Binary Protokoll. Man kann die Module aber auch auf NMEA mit beliebigen Baudraten umstellen. Einstellbare Datensätze sind GPRMC, GPGGA, GPGSA, GPGSV, GPGLL, GPVTG und GPMSS. Die Umstellung kann über das Programm SiRFDemo erfolgen. Unter den Einstellungen sind auch die Datensätze User8, User9 und User10 aufgeführt. Beim JP7T versteckt sich hinter User9 der GPZDA-Datensatz.&lt;br /&gt;
&lt;br /&gt;
=== Power-Management ===&lt;br /&gt;
Im Auslieferungszustand, also mit XTrac-Firmware, wird das Advanced Power Management von SiRF unterstützt. Damit sind Positionsraten von 10 bis 180 Sekunden möglich. Weiterhin kann man dem Modul vorgeben, wie viel % der Zeit es eingeschaltet sein soll, und ob die Positionsrate oder der Stromverbrauch Priorität besitzt.&lt;br /&gt;
&lt;br /&gt;
Die JP7T-Firmware dagegen bietet die Modi Trickle-Power und Push-to-Fix an. In Trickle-Power sind Positionsraten zwischen 1 und 10 Sekunden möglich. Im Modus Push-to-Fix schaltet das Modul sich in einen Energiespar-Modus, Positionsupdates können über den Pin &amp;quot;RESET_N&amp;quot; angefordert werden. Die GPS-Maus muss dazu natürlich aufgebrochen werden, um an das Modul dranzukommen... Laut Datenblatt lohnt sich Push-to-Fix erst ab einer Positionsraten von etwa 600 Sekunden.&lt;br /&gt;
&lt;br /&gt;
Die Befehle zum Einschalten der Energiespar-Modi sind im Datenblatt beschrieben. SiRFDemo ist dazu ebenfalls in der Lage.&lt;br /&gt;
=== PPS-Timing ===&lt;br /&gt;
Die XTrac-Firmware unterstützt offenbar keinerlei Timing-Funktionen. Um diese nutzen zu können, muss die JP7T- oder JP7TH-Firmware aufgespielt werden.&lt;br /&gt;
==== SiRF Timing Message ====&lt;br /&gt;
Kann in SiRFDemo über Action / Set Message Rate eingeschaltet werden. Dort 0x34 PPS Timing auswählen und die Update-Rate auf 1 Sekunde einstellen.&lt;br /&gt;
==== GPZDA-Datensatz ====&lt;br /&gt;
Kann ausgewählt werden, wenn man das Modul in den NMEA-Modus umschaltet. Verbirgt sich hinter &amp;quot;User9&amp;quot;, nachdem man die JP7-T Firmware aufgespielt hat.&lt;br /&gt;
&lt;br /&gt;
==== 1-PPS-Puls ====&lt;br /&gt;
Weiterhin ist beim JP7T der 1-PPS-Puls  (1 PulsePerSecond) am GPS-Modul an Pin 29 abgreifbar. Laut Datenblatt hat der 1-PPS-Puls CMOS-Pegel und eine Länge von 100ms. Zeitreferenz ist die positive Flanke. Die Genauigkeit liegt unter 1µs im Vergleich zu einem Referenz PPS Puls.&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Die Firmware wird mit dem Programm SiRFflash (Download siehe Weblinks) auf das Modul aufgespielt. Einstellungen: &amp;quot;Baud rate&amp;quot; auf 38400 Baud verringern, &amp;quot;Target boot mode state setting&amp;quot; auf &amp;quot;External&amp;quot;, &amp;quot;Programming options&amp;quot; auf &amp;quot;Erase whole chip&amp;quot;. Dann per &amp;quot;Browse&amp;quot; die neue Firmware auswählen und mit &amp;quot;Execute&amp;quot; den Update-Prozess starten. Das Flashen funktioniert recht zuverlässig.&lt;br /&gt;
==== JP7TX (XTrac) ====&lt;br /&gt;
Im Auslieferungszustand befindet sich eine SiRF XTrac-Firmware auf dem Modul. Die Module mit dieser Firmware nennen sich JP7TX, einen Hardware-Unterschied zu JP7T-Modulen gibt es laut Falcom nicht.&lt;br /&gt;
==== JP7T ====&lt;br /&gt;
Weiterhin ist eine Firmware für das JP7T vorhanden. Wenn man die Firmware aufspielt, werden beim ersten Start einige Debug-Meldungen ausgegeben. Teilweise verschwinden die von selbst, man kann sie aber auch über SiRFDemo abschalten. (Action / Set Message Rate, dort 0xFF auswählen, Rate auf 0s stehen lassen und &amp;quot;Send&amp;quot; klicken.) Die TTFF ist beim Cold Start etwas länger. Vereinzelt soll der Empfang damit besser als vorher sein.&lt;br /&gt;
==== JP7TH ====&lt;br /&gt;
Zusätzlich ist noch eine Firmware für Datenlogger vorhanden, genannt JP7TH. Die Firmware baut auf der des JP7T auf. Ein Handbuch dazu ist unter den Weblinks aufgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung XTrac ===&lt;br /&gt;
[http://www.pocketgpsworld.com/xtracornoxtrac.php Hier] findet sich eine gute Erklärung der Unterschiede zwischen XTrac und normaler Firmware.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten sind:&lt;br /&gt;
* XTrac ist viel empfindlicher&lt;br /&gt;
* XTrac ist u.U. etwas langsamer&lt;br /&gt;
* XTrac kennt keinen TricklePower-Modus&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Im Modul befindet sich eine Patchantenne, darunter eine weitere Platine mit dem GPS-Modul Falcom JP7TX. &lt;br /&gt;
&lt;br /&gt;
=== Spannungsregler ===&lt;br /&gt;
Das Modul wird über einen Linearregler [http://www.datasheetcatalog.org/datasheets/105/187365_DS.pdf MIC5205-3.3BM5] mit 3,3 Volt versorgt. Außerdem befindet sich noch ein kleiner Akku auf der Platine, der als Backup-Versorgung für das SRAM dient. &lt;br /&gt;
Der Spannungsregler kann 150mA liefern, das GPS-Modul zieht ca. 60mA. Wenn man also ein Kabel an der 3.3V-Leitung anlötet kann man auch noch die eigene Schaltung damit versorgen. Aufpassen muss man lediglich mit der zulässigen Verlustleistung.&lt;br /&gt;
&lt;br /&gt;
Laut Datenblatt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\theta_{JA} = 220 K/W&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
mit &amp;lt;math&amp;gt;P = (U_{in}-U_{out}) * I&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
und einer maximalen Chiptemperatur von 125°C und einer angenommen Umgebungstemperatur von 60°C (Sommer + Eigenerwärumg nach längerem Betrieb)&amp;lt;br&amp;gt;&lt;br /&gt;
ergibt sich somit folgender Maximalstrom in Abhängigkeit von der Eingangsspannung:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I_{max} =\frac{65 K}{220 K/W * (U_{in} - 3.3V)} = 0.3W / (U_{in} - 3.3V)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wertebeispiele:&lt;br /&gt;
* 5V (USB): 174mA begrenzt durch die maximal erlaubten 150mA&lt;br /&gt;
* 7V (Mitgelieferter Zigarettenanzünderstecker): 81mA&lt;br /&gt;
* 12V: 30mA (zuwenig zum Betrieb des Moduls)&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man wenn ohnehin 3.3V in der Schaltung zur Verfügung stehen auch einfach den Spannungsregler ausbauen und das Modul direkt mit 3.3V speisen.&lt;br /&gt;
&lt;br /&gt;
=== Pegelwandler ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auf der Platine ist noch Platz für einen Pegelwandler; Ob ein Umbau auf RS232 damit funktioniert wurde bisher noch nicht getestet. Vorgesehen ist dafür ein ICL3221. Zum Umbau müssen vermutlich die beiden 0-Ohm-Widerstände entfernt werden, anschließend müssen dann zusätzlich zum IC noch an 5 Stellen 100nF-Kondensatoren eingelötet werden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/104240 ursprünglicher µC.net Thread &amp;gt;GPS - Empfänger günstig bei Ebay&amp;lt;]&lt;br /&gt;
*[http://www.falcom.de/support/software-tools/sirf/ falcom.de Downloadbereich, SiRFDemo, SiRFflash]&lt;br /&gt;
*[http://www.mikrocontroller.net/attachment/37464/komplett_-_aktuell_-_JP7.zip Zip-Archiv mit allen aktuellen Firmwares]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7_T_Family_1.04.pdf Datenblatt des verwendeten GPS-Moduls]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7-T_family_datalogger_functionality_v1.01.pdf Handbuch zur Datenlogger-Funktionalität]&lt;br /&gt;
*[http://www.gpsinformation.org/dale/nmea.htm Verständliche Beschreibung des NMEA-Protokolls]&lt;br /&gt;
*[http://gpsd.berlios.de/references.html Links zu jeder Menge nützlicher Dokumente, insbesondere der Protokollbeschreibung von SIRF]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29155</id>
		<title>GPS-Maus Falcom Navi-S-1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29155"/>
		<updated>2008-07-20T10:55:04Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel wird noch ergänzt.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Chipsatz:&lt;br /&gt;
|SiRF2&lt;br /&gt;
|-&lt;br /&gt;
|Versorgungsspannung:&lt;br /&gt;
|5V (3,5 bis 7V)&lt;br /&gt;
|-&lt;br /&gt;
|Schnittstelle:&lt;br /&gt;
|Seriell, 3,3 Volt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Anschlussbelegung ====&lt;br /&gt;
Wenn man das angebrachte Kabel abmantelt, findet man vier Adern vor. Die Belegung ist wie folgt:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Gelb:&lt;br /&gt;
|V&amp;lt;sub&amp;gt;cc&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Grün:&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|Rot:&lt;br /&gt;
|TX&lt;br /&gt;
|-&lt;br /&gt;
|Weiß:&lt;br /&gt;
|RX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Um die Funktion und den Empfang der Module zu testen, ist das Programm SiRFDemo nützlich. Weiterhin kann man mit diesem Programm die Module konfigurieren.&amp;lt;br /&amp;gt; Firmwareupdates können mit dem Programm SiRFflash durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Standardeinstellungen ==&lt;br /&gt;
Nach dem Einschalten werden folgende NMEA-Daten mit 38400 Baud ausgegeben: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$PSRFTXT,Version: 2.4.13.00-XTrac2.0.1-C3PROD1.0 0000003721 *17&lt;br /&gt;
$PSRFTXT,TOW:  0*25&lt;br /&gt;
$PSRFTXT,WK:   1255*66&lt;br /&gt;
$PSRFTXT,POS:  6378137 0 0*2A&lt;br /&gt;
$PSRFTXT,CLK:  96250*25&lt;br /&gt;
$PSRFTXT,CHNL: 12*73&lt;br /&gt;
$PSRFTXT,Baud rate: 38400  System clock: 24.553MHz*45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach folgen nur noch RMC-Nachrichten.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== Schnittstelle ===&lt;br /&gt;
Die GPS-Mäuse senden in der Ausgangskonfiguration Daten im SiRF-Binary Protokoll. Man kann die Module aber auch auf NMEA mit beliebigen Baudraten umstellen. Einstellbare Datensätze sind GPRMC, GPGGA, GPGSA, GPGSV, GPGLL, GPVTG und GPMSS. Die Umstellung kann über das Programm SiRFDemo erfolgen. Unter den Einstellungen sind auch die Datensätze User8, User9 und User10 aufgeführt. Beim JP7T versteckt sich hinter User9 der GPZDA-Datensatz.&lt;br /&gt;
&lt;br /&gt;
=== Power-Management ===&lt;br /&gt;
Im Auslieferungszustand, also mit XTrac-Firmware, wird das Advanced Power Management von SiRF unterstützt. Damit sind Positionsraten von 10 bis 180 Sekunden möglich. Weiterhin kann man dem Modul vorgeben, wie viel % der Zeit es eingeschaltet sein soll, und ob die Positionsrate oder der Stromverbrauch Priorität besitzt.&lt;br /&gt;
&lt;br /&gt;
Die JP7T-Firmware dagegen bietet die Modi Trickle-Power und Push-to-Fix an. In Trickle-Power sind Positionsraten zwischen 1 und 10 Sekunden möglich. Im Modus Push-to-Fix schaltet das Modul sich in einen Energiespar-Modus, Positionsupdates können über den Pin &amp;quot;RESET_N&amp;quot; angefordert werden. Die GPS-Maus muss dazu natürlich aufgebrochen werden, um an das Modul dranzukommen... Laut Datenblatt lohnt sich Push-to-Fix erst ab einer Positionsraten von etwa 600 Sekunden.&lt;br /&gt;
&lt;br /&gt;
Die Befehle zum Einschalten der Energiespar-Modi sind im Datenblatt beschrieben. SiRFDemo ist dazu ebenfalls in der Lage.&lt;br /&gt;
=== PPS-Timing ===&lt;br /&gt;
Die XTrac-Firmware unterstützt offenbar keinerlei Timing-Funktionen. Um diese nutzen zu können, muss die JP7T- oder JP7TH-Firmware aufgespielt werden.&lt;br /&gt;
==== SiRF Timing Message ====&lt;br /&gt;
Kann in SiRFDemo über Action / Set Message Rate eingeschaltet werden. Dort 0x34 PPS Timing auswählen und die Update-Rate auf 1 Sekunde einstellen.&lt;br /&gt;
==== GPZDA-Datensatz ====&lt;br /&gt;
Kann ausgewählt werden, wenn man das Modul in den NMEA-Modus umschaltet. Verbirgt sich hinter &amp;quot;User9&amp;quot;, nachdem man die JP7-T Firmware aufgespielt hat.&lt;br /&gt;
&lt;br /&gt;
==== 1-PPS-Puls ====&lt;br /&gt;
Weiterhin ist beim JP7T der 1-PPS-Puls  (1 PulsePerSecond) am GPS-Modul an Pin 29 abgreifbar. Laut Datenblatt hat der 1-PPS-Puls CMOS-Pegel und eine Länge von 100ms. Zeitreferenz ist die positive Flanke. Die Genauigkeit liegt unter 1µs im Vergleich zu einem Referenz PPS Puls.&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Die Firmware wird mit dem Programm SiRFflash (Download siehe Weblinks) auf das Modul aufgespielt. Einstellungen: &amp;quot;Baud rate&amp;quot; auf 38400 Baud verringern, &amp;quot;Target boot mode state setting&amp;quot; auf &amp;quot;External&amp;quot;, &amp;quot;Programming options&amp;quot; auf &amp;quot;Erase whole chip&amp;quot;. Dann per &amp;quot;Browse&amp;quot; die neue Firmware auswählen und mit &amp;quot;Execute&amp;quot; den Update-Prozess starten. Das Flashen funktioniert recht zuverlässig.&lt;br /&gt;
==== JP7TX (XTrac) ====&lt;br /&gt;
Im Auslieferungszustand befindet sich eine SiRF XTrac-Firmware auf dem Modul. Die Module mit dieser Firmware nennen sich JP7TX, einen Hardware-Unterschied zu JP7T-Modulen gibt es laut Falcom nicht.&lt;br /&gt;
==== JP7T ====&lt;br /&gt;
Weiterhin ist eine Firmware für das JP7T vorhanden. Wenn man die Firmware aufspielt, werden beim ersten Start einige Debug-Meldungen ausgegeben. Teilweise verschwinden die von selbst, man kann sie aber auch über SiRFDemo abschalten. (Action / Set Message Rate, dort 0xFF auswählen, Rate auf 0s stehen lassen und &amp;quot;Send&amp;quot; klicken.) Die TTFF ist beim Cold Start etwas länger. Vereinzelt soll der Empfang damit besser als vorher sein.&lt;br /&gt;
==== JP7TH ====&lt;br /&gt;
Zusätzlich ist noch eine Firmware für Datenlogger vorhanden, genannt JP7TH. Die Firmware baut auf der des JP7T auf. Ein Handbuch dazu ist unter den Weblinks aufgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung XTrac ===&lt;br /&gt;
[http://www.pocketgpsworld.com/xtracornoxtrac.php Hier] findet sich eine gute Erklärung der Unterschiede zwischen XTrac und normaler Firmware.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten sind:&lt;br /&gt;
* XTrac ist viel empfindlicher&lt;br /&gt;
* XTrac ist u.U. etwas langsamer&lt;br /&gt;
* XTrac kennt keinen TricklePower-Modus&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Im Modul befindet sich eine Patchantenne, darunter eine weitere Platine mit dem GPS-Modul Falcom JP7TX. Das Modul wird offenbar über einen Linearregler MIC5205-3.3BM5 mit 3,3 Volt versorgt. Außerdem befindet sich noch ein kleiner Akku auf der Platine, der als Backup-Versorgung für das SRAM dient.&lt;br /&gt;
&lt;br /&gt;
Auf der Platine ist noch Platz für einen Pegelwandler; Ob ein Umbau auf RS232 damit funktioniert wurde bisher noch nicht getestet. Vorgesehen ist dafür ein ICL3221. Zum Umbau müssen vermutlich die beiden 0-Ohm-Widerstände entfernt werden, anschließend müssen dann zusätzlich zum IC noch an 5 Stellen 100nF-Kondensatoren eingelötet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/104240 ursprünglicher µC.net Thread &amp;gt;GPS - Empfänger günstig bei Ebay&amp;lt;]&lt;br /&gt;
*[http://www.falcom.de/support/software-tools/sirf/ falcom.de Downloadbereich, SiRFDemo, SiRFflash]&lt;br /&gt;
*[http://www.mikrocontroller.net/attachment/37464/komplett_-_aktuell_-_JP7.zip Zip-Archiv mit allen aktuellen Firmwares]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7_T_Family_1.04.pdf Datenblatt des verwendeten GPS-Moduls]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7-T_family_datalogger_functionality_v1.01.pdf Handbuch zur Datenlogger-Funktionalität]&lt;br /&gt;
*[http://www.gpsinformation.org/dale/nmea.htm Verständliche Beschreibung des NMEA-Protokolls]&lt;br /&gt;
*[http://gpsd.berlios.de/references.html Links zu jeder Menge nützlicher Dokumente, insbesondere der Protokollbeschreibung von SIRF]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29154</id>
		<title>GPS-Maus Falcom Navi-S-1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29154"/>
		<updated>2008-07-20T10:54:08Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel wird noch ergänzt.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Chipsatz:&lt;br /&gt;
|SiRF2&lt;br /&gt;
|-&lt;br /&gt;
|Versorgungsspannung:&lt;br /&gt;
|5V (3,5 bis 7V)&lt;br /&gt;
|-&lt;br /&gt;
|Schnittstelle:&lt;br /&gt;
|Seriell, 3,3 Volt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Anschlussbelegung ====&lt;br /&gt;
Wenn man das angebrachte Kabel abmantelt, findet man vier Adern vor. Die Belegung ist wie folgt:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Gelb:&lt;br /&gt;
|V&amp;lt;sub&amp;gt;cc&amp;lt;/sub&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Grün:&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|Rot:&lt;br /&gt;
|TX&lt;br /&gt;
|-&lt;br /&gt;
|Weiß:&lt;br /&gt;
|RX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Um die Funktion und den Empfang der Module zu testen, ist das Programm SiRFDemo nützlich. Weiterhin kann man mit diesem Programm die Module konfigurieren.&amp;lt;br /&amp;gt; Firmwareupdates können mit dem Programm SiRFflash durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Standardeinstellungen ==&lt;br /&gt;
Nach dem Einschalten werden folgende NMEA-Daten mit 38400 Baud ausgegeben: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$PSRFTXT,Version: 2.4.13.00-XTrac2.0.1-C3PROD1.0 0000003721 *17&lt;br /&gt;
$PSRFTXT,TOW:  0*25&lt;br /&gt;
$PSRFTXT,WK:   1255*66&lt;br /&gt;
$PSRFTXT,POS:  6378137 0 0*2A&lt;br /&gt;
$PSRFTXT,CLK:  96250*25&lt;br /&gt;
$PSRFTXT,CHNL: 12*73&lt;br /&gt;
$PSRFTXT,Baud rate: 38400  System clock: 24.553MHz*45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach folgen nur noch RMC-Nachrichten.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== Schnittstelle ===&lt;br /&gt;
Die GPS-Mäuse senden in der Ausgangskonfiguration Daten im SiRF-Binary Protokoll. Man kann die Module aber auch auf NMEA mit beliebigen Baudraten umstellen. Einstellbare Datensätze sind GPRMC, GPGGA, GPGSA, GPGSV, GPGLL, GPVTG und GPMSS. Die Umstellung kann über das Programm SiRFDemo erfolgen. Unter den Einstellungen sind auch die Datensätze User8, User9 und User10 aufgeführt. Beim JP7T versteckt sich hinter User9 der GPZDA-Datensatz.&lt;br /&gt;
&lt;br /&gt;
=== Power-Management ===&lt;br /&gt;
Im Auslieferungszustand, also mit XTrac-Firmware, wird das Advanced Power Management von SiRF unterstützt. Damit sind Positionsraten von 10 bis 180 Sekunden möglich. Weiterhin kann man dem Modul vorgeben, wie viel % der Zeit es eingeschaltet sein soll, und ob die Positionsrate oder der Stromverbrauch Priorität besitzt.&lt;br /&gt;
&lt;br /&gt;
Die JP7T-Firmware dagegen bietet die Modi Trickle-Power und Push-to-Fix an. In Trickle-Power sind Positionsraten zwischen 1 und 10 Sekunden möglich. Im Modus Push-to-Fix schaltet das Modul sich in einen Energiespar-Modus, Positionsupdates können über den Pin &amp;quot;RESET_N&amp;quot; angefordert werden. Die GPS-Maus muss dazu natürlich aufgebrochen werden, um an das Modul dranzukommen... Laut Datenblatt lohnt sich Push-to-Fix erst ab einer Positionsraten von etwa 600 Sekunden.&lt;br /&gt;
&lt;br /&gt;
Die Befehle zum Einschalten der Energiespar-Modi sind im Datenblatt beschrieben. SiRFDemo ist dazu ebenfalls in der Lage.&lt;br /&gt;
=== PPS-Timing ===&lt;br /&gt;
Die XTrac-Firmware unterstützt offenbar keinerlei Timing-Funktionen. Um diese nutzen zu können, muss die JP7T- oder JP7TH-Firmware aufgespielt werden.&lt;br /&gt;
==== SiRF Timing Message ====&lt;br /&gt;
Kann in SiRFDemo über Action / Set Message Rate eingeschaltet werden. Dort 0x34 PPS Timing auswählen und die Update-Rate auf 1 Sekunde einstellen.&lt;br /&gt;
==== GPZDA-Datensatz ====&lt;br /&gt;
Kann ausgewählt werden, wenn man das Modul in den NMEA-Modus umschaltet. Verbirgt sich hinter &amp;quot;User9&amp;quot;, nachdem man die JP7-T Firmware aufgespielt hat.&lt;br /&gt;
&lt;br /&gt;
==== 1-PPS-Puls ====&lt;br /&gt;
Weiterhin ist beim JP7T der 1-PPS-Puls  (1 PulsePerSecond) am GPS-Modul an Pin 29 abgreifbar. Laut Datenblatt hat der 1-PPS-Puls CMOS-Pegel und eine Länge von 100ms. Zeitreferenz ist die positive Flanke. Die Genauigkeit liegt unter 1µs im Vergleich zu einem Referenz PPS Puls.&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Die Firmware wird mit dem Programm SiRFflash (Download siehe Weblinks) auf das Modul aufgespielt. Einstellungen: &amp;quot;Baud rate&amp;quot; auf 38400 Baud verringern, &amp;quot;Target boot mode state setting&amp;quot; auf &amp;quot;External&amp;quot;, &amp;quot;Programming options&amp;quot; auf &amp;quot;Erase whole chip&amp;quot;. Dann per &amp;quot;Browse&amp;quot; die neue Firmware auswählen und mit &amp;quot;Execute&amp;quot; den Update-Prozess starten. Das Flashen funktioniert recht zuverlässig.&lt;br /&gt;
==== JP7TX (XTrac) ====&lt;br /&gt;
Im Auslieferungszustand befindet sich eine SiRF XTrac-Firmware auf dem Modul. Die Module mit dieser Firmware nennen sich JP7TX, einen Hardware-Unterschied zu JP7T-Modulen gibt es laut Falcom nicht.&lt;br /&gt;
==== JP7T ====&lt;br /&gt;
Weiterhin ist eine Firmware für das JP7T vorhanden. Wenn man die Firmware aufspielt, werden beim ersten Start einige Debug-Meldungen ausgegeben. Teilweise verschwinden die von selbst, man kann sie aber auch über SiRFDemo abschalten. (Action / Set Message Rate, dort 0xFF auswählen, Rate auf 0s stehen lassen und &amp;quot;Send&amp;quot; klicken.) Die TTFF ist beim Cold Start etwas länger. Vereinzelt soll der Empfang damit besser als vorher sein.&lt;br /&gt;
==== JP7TH ====&lt;br /&gt;
Zusätzlich ist noch eine Firmware für Datenlogger vorhanden, genannt JP7TH. Die Firmware baut auf der des JP7T auf. Ein Handbuch dazu ist unter den Weblinks aufgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Erklärung XTrac ===&lt;br /&gt;
[http://www.pocketgpsworld.com/xtracornoxtrac.php Hier] findet sich eine gute Erklärung der Unterschiede zwischen XTrac und normaler Firmware.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten sind:&lt;br /&gt;
* XTrac ist viel empfindlicher&lt;br /&gt;
* XTrac ist u.U. etwas langsamer&lt;br /&gt;
* XTrac kennt keinen TricklePower-Modus&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Im Modul befindet sich eine Patchantenne, darunter eine weitere Platine mit dem GPS-Modul Falcom JP7TX. Das Modul wird offenbar über einen Linearregler MIC5205-3.3BM5 mit 3,3 Volt versorgt. Außerdem befindet sich noch ein kleiner Akku auf der Platine, der als Backup-Versorgung für das SRAM dient.&lt;br /&gt;
&lt;br /&gt;
Auf der Platine ist noch Platz für einen Pegelwandler; Ob ein Umbau auf RS232 damit funktioniert wurde bisher noch nicht getestet. Vorgesehen ist dafür ein ICL3221. Zum Umbau müssen vermutlich die beiden 0-Ohm-Widerstände entfernt werden, anschließend müssen dann zusätzlich zum IC noch an 5 Stellen 100nF-Kondensatoren eingelötet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/104240 ursprünglicher µC.net Thread &amp;gt;GPS - Empfänger günstig bei Ebay&amp;lt;]&lt;br /&gt;
*[http://www.falcom.de/support/software-tools/sirf/ falcom.de Downloadbereich, SiRFDemo, SiRFflash]&lt;br /&gt;
*[http://www.mikrocontroller.net/attachment/37464/komplett_-_aktuell_-_JP7.zip Zip-Archiv mit allen aktuellen Firmwares]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7_T_Family_1.04.pdf Datenblatt des verwendeten GPS-Moduls]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7-T_family_datalogger_functionality_v1.01.pdf Handbuch zur Datenlogger-Funktionalität]&lt;br /&gt;
*[http://www.gpsinformation.org/dale/nmea.htm] Verständliche Beschreibung des NMEA-Protokolls&lt;br /&gt;
*[http://gpsd.berlios.de/references.html] Links zu jeder Menge nützlicher Dokumente, insbesondere der Protokollbeschreibung von SIRF&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29059</id>
		<title>GPS-Maus Falcom Navi-S-1</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS-Maus_Falcom_Navi-S-1&amp;diff=29059"/>
		<updated>2008-07-16T21:32:17Z</updated>

		<summary type="html">&lt;p&gt;R2d2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel wird noch ergänzt.&lt;br /&gt;
&lt;br /&gt;
== Technische Daten ==&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Chipsatz:&lt;br /&gt;
|SiRF2&lt;br /&gt;
|-&lt;br /&gt;
|Versorgungsspannung:&lt;br /&gt;
|5V&lt;br /&gt;
|-&lt;br /&gt;
|Schnittstelle:&lt;br /&gt;
|Seriell, 3,3 Volt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Anschlussbelegung ====&lt;br /&gt;
Wenn man das angebrachte Kabel abmantelt, findet man vier Adern vor. Die Belegung ist wie folgt:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Gelb:&lt;br /&gt;
|5V&lt;br /&gt;
|-&lt;br /&gt;
|Grün:&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|Rot:&lt;br /&gt;
|TX&lt;br /&gt;
|-&lt;br /&gt;
|Weiß:&lt;br /&gt;
|RX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Um die Funktion und den Empfang der Module zu testen, ist das Programm SiRFDemo nützlich. Weiterhin kann man mit diesem Programm die Module konfigurieren.&amp;lt;br /&amp;gt; Firmwareupdates können mit dem Programm SiRFflash durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Standardeinstellungen ==&lt;br /&gt;
Nach dem Einschalten werden folgende NMEA-Daten mit 38400 Baud ausgegeben: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$PSRFTXT,Version: 2.4.13.00-XTrac2.0.1-C3PROD1.0 0000003721 *17&lt;br /&gt;
$PSRFTXT,TOW:  0*25&lt;br /&gt;
$PSRFTXT,WK:   1255*66&lt;br /&gt;
$PSRFTXT,POS:  6378137 0 0*2A&lt;br /&gt;
$PSRFTXT,CLK:  96250*25&lt;br /&gt;
$PSRFTXT,CHNL: 12*73&lt;br /&gt;
$PSRFTXT,Baud rate: 38400  System clock: 24.553MHz*45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach folgen nur noch RMC-Nachrichten.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== Schnittstelle ===&lt;br /&gt;
Die GPS-Mäuse senden in der Ausgangskonfiguration Daten im SiRF-Binary Protokoll. Man kann die Module aber auch auf NMEA mit beliebigen Baudraten umstellen. Einstellbare Datensätze sind GPRMC, GPGGA, GPGSA, GPGSV, GPGLL, GPVTG und GPMSS. Die Umstellung kann über das Programm SiRFDemo erfolgen. Unter den Einstellungen sind auch dei Datensätze User8, User9 und User10 aufgeführt. Beim JP7T versteckt sich hinter User9 der GPZDA-Datensatz.&lt;br /&gt;
&lt;br /&gt;
=== Power-Management ===&lt;br /&gt;
Im Auslieferungszustand, also mit XTrac-Firmware, wird das Advanced Power Management von SiRF unterstützt. Damit sind Positionsraten von 10 bis 180 Sekunden möglich. Weiterhin kann man dem Modul vorgeben, wie viel % der Zeit es eingeschaltet sein soll, und ob die Positionsrate oder der Stromverbrauch Priorität besitzt.&lt;br /&gt;
&lt;br /&gt;
Die JP7T-Firmware dagegen bietet die Modi Trickle-Power und Push-to-Fix an. In Trickle-Power sind Positionsraten zwischen 1 und 10 Sekunden möglich. Im Modus Push-to-Fix schaltet das Modul sich in einen Energiespar-Modus, Positionsupdates können über den Pin &amp;quot;RESET_N&amp;quot; angefordert werden. Die GPS-Maus muss dazu natürlich aufgebrochen werden, um an das Modul dranzukommen... Laut Datenblatt lohnt sich Push-to-Fix erst ab einer Positionsraten von etwa 600 Sekunden.&lt;br /&gt;
&lt;br /&gt;
Die Befehle zum Einschalten der Energiespar-Modi sind im Datenblatt beschrieben. SiRFDemo ist dazu ebenfalls in der Lage.&lt;br /&gt;
=== PPS-Timing ===&lt;br /&gt;
Die XTrac-Firmware unterstützt offenbar keinerlei Timing-Funktionen. Um diese nutzen zu können, muss die JP7T- oder JP7TH-Firmware aufgespielt werden.&lt;br /&gt;
==== SiRF Timing Message ====&lt;br /&gt;
Kann in SiRFDemo über Action / Set Message Rate eingeschaltet werden. Dort 0x34 PPS Timing auswählen und die Update-Rate auf 1 Sekunde einstellen.&lt;br /&gt;
==== GPZDA-Datensatz ====&lt;br /&gt;
Kann ausgewählt werden, wenn man das Modul in den NMEA-Modus umschaltet. Verbirgt sich hinter &amp;quot;User9&amp;quot;.&lt;br /&gt;
==== PPS-Puls ====&lt;br /&gt;
Weiterhin sollte beim JP7T der PPS-Puls am GPS-Modul an Pin 29 abgreifbar sein. Laut Datenblatt hat der PPS-Puls CMOS-Pegel und eine Länge von 100ms. Zeitreferenz ist die positive Flanke.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Die Firmware wird mit dem Programm SiRFflash (Download siehe Weblinks) auf das Modul aufgespielt. Einstellungen: &amp;quot;Baud rate&amp;quot; auf 38400 Baud verringern, &amp;quot;Target boot mode state setting&amp;quot; auf &amp;quot;External&amp;quot;, &amp;quot;Programming options&amp;quot; auf &amp;quot;Erase whole chip&amp;quot;. Dann per &amp;quot;Browse&amp;quot; die neue Firmware auswählen und mit &amp;quot;Execute&amp;quot; den Update-Prozess starten. Das Flashen funktioniert recht zuverlässig.&lt;br /&gt;
==== JP7TX (XTrac) ====&lt;br /&gt;
Im Auslieferungszustand befindet sich eine SiRF XTrac-Firmware auf dem Modul. Die Module mit dieser Firmware nennen sich JP7TX, einen Hardware-Unterschied zu JP7T-Modulen gibt es laut Falcom nicht.&lt;br /&gt;
==== JP7T ====&lt;br /&gt;
Weiterhin ist eine Firmware für das JP7T vorhanden. Wenn man die Firmware aufspielt, werden beim ersten Start einige Debug-Meldungen ausgegeben. Teilweise verschwinden die von selbst, man kann sie aber auch über SiRFDemo abschalten. (Action / Set Message Rate, dort 0xFF auswählen, Rate auf 0s stehen lassen und &amp;quot;Send&amp;quot; klicken.) Die TTFF ist beim Cold Start etwas länger. Vereinzelt soll der Empfang damit besser als vorher sein.&lt;br /&gt;
==== JP7TH ====&lt;br /&gt;
Zusätzlich ist noch eine Firmware für Datenlogger vorhanden, genannt JP7TH. Die Firmware baut auf der des JP7T auf. Ein Handbuch dazu ist unter den Weblinks aufgeführt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Im Modul befindet sich eine Patchantenne, darunter eine weitere Platine mit dem GPS-Modul Falcom JP7TX. Das Modul wird offenbar über einen Linearregler MIC5205-3.3BM5 mit 3,3 Volt versorgt. Außerdem befindet sich noch ein kleiner Akku auf der Platine, der als Backup-Versorgung für das SRAM dient.&lt;br /&gt;
&lt;br /&gt;
Auf der Platine ist noch Platz für einen Pegelwandler; Ob ein Umbau auf RS232 damit funktioniert wurde bisher noch nicht getestet. Vorgesehen ist dafür ein ICL3221. Zum Umbau müssen vermutlich die beiden 0-Ohm-Widerstände entfernt werden, anschließend müssen dann zusätzlich zum IC noch an 5 Stellen 100nF-Kondensatoren eingelötet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/104240 ursprünglicher µC.net Thread &amp;gt;GPS - Empfänger günstig bei Ebay&amp;lt;]&lt;br /&gt;
*[http://www.falcom.de/support/software-tools/sirf/ falcom.de Downloadbereich, SiRFDemo, SiRFflash]&lt;br /&gt;
*[http://www.mikrocontroller.net/attachment/37464/komplett_-_aktuell_-_JP7.zip Zip-Archiv mit allen aktuellen Firmwares]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7_T_Family_1.04.pdf Datenblatt des verwendeten GPS-Moduls]&lt;br /&gt;
*[http://www.falcom.de/uploads/media/JP7-T_family_datalogger_functionality_v1.01.pdf Handbuch zur Datenlogger-Funktionalität]&lt;br /&gt;
*[http://www.gpsinformation.org/dale/nmea.htm] Verständliche Beschreibung des NMEA-Protokolls&lt;br /&gt;
*[http://gpsd.berlios.de/references.html] Links zu jeder Menge nützlicher Dokumente, insbesondere der Protokollbeschreibung von SIRF&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Linksammlung&amp;diff=28427</id>
		<title>Linksammlung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Linksammlung&amp;diff=28427"/>
		<updated>2008-06-11T23:49:22Z</updated>

		<summary type="html">&lt;p&gt;R2d2: /* Projekte und Quellcodebibliotheken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite werden Links zu anderen interessanten Mikrocontroller- und Elektronikseiten gesammelt.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Die alte Linkseite findet man [http://www.mikrocontroller.net/en/links hier].&lt;br /&gt;
&lt;br /&gt;
Hinzufügen von Links:&lt;br /&gt;
# [http://www.mikrocontroller.net/wikisoftware/index.php?title=Linksammlung&amp;amp;action=edit Bearbeiten] anklicken&lt;br /&gt;
# Link unter der entsprechenden Kategorie eintragen&lt;br /&gt;
# &amp;quot;Artikel speichern&amp;quot; klicken&lt;br /&gt;
&lt;br /&gt;
== Suchen &amp;amp; Finden ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Verkauf einem hungrigen Mann einen Fisch und du hast ein Geschäft gemacht, bring ihm das Angeln bei und du hast einen Kunden verloren! (asmo)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.supplyframe.com/ SupplyFrame] - Datasheet and Electronic Spec Search Engine&lt;br /&gt;
* [http://www.globalspec.com/ GlobalSpec] - The Engineering Search Engine&lt;br /&gt;
* [http://www.alldatasheet.com/ alldatasheet] - Datasheet Search&lt;br /&gt;
* [http://www.datasheetarchive.com/ datasheetarchive] - Datasheet Search&lt;br /&gt;
&lt;br /&gt;
== [[AVR]] ==&lt;br /&gt;
&lt;br /&gt;
=== Herstellerseiten ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/products/avr/ Atmel.com] Herstellerseiten&lt;br /&gt;
* [http://www.atmel.com/dyn/general/updates.asp Atmel.com updates] Liste der letzten Änderungen in Datenblättern und Beispielcode auf ATMEL.com (nicht nur für AVRs)&lt;br /&gt;
&lt;br /&gt;
=== Information (Foren, Mailinglisten, Linksammlungen) ===&lt;br /&gt;
* [http://progforum.com Batronix Elektronik Forum] Gut besuchtes Forum für allgemeine Elektronik, Mikrocontroller und Programmierung&lt;br /&gt;
* [http://www.avrfreaks.net/ AVR Freaks] AVR Forum, Samples, Tutorials, User-Projekte, GCC für AVR (Registrierung empfohlen)&lt;br /&gt;
* [http://avr-asm.tripod.com Atmel AVR ASM Site]&lt;br /&gt;
* [http://www.mikrocontroller.net Mikrocontroller.net] - AVR Tutorials, Examples, LINKS, Forum (D)&lt;br /&gt;
* [http://www.openavr.org/ Openavr.org] &amp;quot;central repository of information for the various open source tools available for the development of software for Atmel&#039;s AVR family of 8-bit RISC microcontrollers&amp;quot;&lt;br /&gt;
* [http://www.omegav.ntnu.no/avr/resources.php3 Omega V&#039;s AVR Resource List]&lt;br /&gt;
* [http://www.omegav.ntnu.no/avr/newresources.php3 Omega V&#039;s AVR NEW Resource List]&lt;br /&gt;
* [http://www.ipass.net/hammill/newavr.htm Atmel AVR Embedded Microcontroller Resources]&lt;br /&gt;
* [http://members.tripod.com/Stelios_Cellar/AVR/AVR%20Info.html Stelios Cellar Atmel AVR Info Page] - Samples, Links&lt;br /&gt;
* [http://www.elektronik-projekt.de Elektronik Projekt] - Hauptthemen sind AVR und Roboter&lt;br /&gt;
* [http://www.roboprogy.de Steuerplatine mit Forth] - Fertigsteuerung mit Anschlüssen für Servos, Motore, Inkrementalgeber und Sensoren&lt;br /&gt;
* [http://www.microschematic.com/ AVR Microcontroller inside] (nett gemacht, Engl.)&lt;br /&gt;
* [http://electrons.psychogenic.com/avr/ Intro To AVR Microcontrollers] (noch(?) sehr wenig Information)&lt;br /&gt;
* [http://www.itwissen.info ITWissen.info] (gutes Lexikon)&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungswerkzeuge (Compiler/Assembler/Debugger/Tools/Libraries) ===&lt;br /&gt;
&lt;br /&gt;
==== C ====&lt;br /&gt;
* [http://sourceforge.net/projects/winavr WinAVR] (pronounced &amp;quot;whenever&amp;quot;) is a suite of executable, open source software development tools for the Atmel AVR series [for the] Windows platform&amp;quot; (includes GNU GCC) &lt;br /&gt;
* [http://sourceforge.net/projects/kontrollerlab KontrollerLab] is a free GPL open-source development environment based on KDE, using the avr-gcc, UISP and AVRDUDE&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/ avr-libc] avr-gcc&#039;s &amp;quot;standard&amp;quot;-library&lt;br /&gt;
&amp;lt;!-- * [http://hubbard.engr.scu.edu/embedded/avr/avrlib/ Procyon AVRlib] a lot of device drivers and Visual-Studio link for avr-gcc --&amp;gt;&lt;br /&gt;
* [http://hubbard.engr.scu.edu/embedded/avr/avrlib/ Procyon AVRlib] a lot of device drivers and Visual-Studio link for avr-gcc&lt;br /&gt;
* [http://rod.info/avr.html rod.info on AVR] esp. for AVR GNU development tools setup under Linux&lt;br /&gt;
* [http://www.sisy.de SiSy AVR] - graphische Entwicklungsumgebung mit C/C++ Codegenerierung aus Struktogrammen und Klassendiagrammen&lt;br /&gt;
* [http://shop.embedit.de/product__206.php AtmanAVR C/C++ IDE]&lt;br /&gt;
* [http://www.iar.com IAR Embedded Workbench]&lt;br /&gt;
* [http://www.hpinfotech.com CodeVisionAVR] C-Compiler für AVRs mit Terminal&lt;br /&gt;
* [http://www.myAVR.de myAVRWorkpad] kompakte Entwicklungsumgebung für AVRs mit Terminal&lt;br /&gt;
* [http://www.amctools.com/vmlab.htm VMLab] komplette IDE mit Debugger und Simulator (auch Peripheriehardware)&lt;br /&gt;
* [http://www.forestmoon.com/Software/AvrIoDesigner/ AVR IO Designer] is a utility to generate initialization source code in C/C++ for the various devices, ports and registers of Atmel AVR processors. The intent is to allow the user to explore the devices specific to a selected processor and experiment with settings thru a user interface that assists in understanding the complexities involved. The user can also assign custom variable names to PORT IO pins thereby keeping track of the IO resources in use. These names are emitted in the generated code for use in the user’s program. (Windows .NET 2.0 erforderlich)&lt;br /&gt;
* [http://www.piconomic.co.za/avrlib/index.html Piconomic AVRLIB] is a collection of firmware for Atmel AVR microcontrollers. The aim is to share source code, experience and expertise (in the eye of the beholder) with the community of engineers, scientists and enthusiasts.&lt;br /&gt;
&lt;br /&gt;
==== Assembler ====&lt;br /&gt;
&lt;br /&gt;
* [http://avr-asm.tripod.com Atmel AVR ASM Site]&lt;br /&gt;
* [http://www.tavrasm.org/ tavrasm] - Toms Linux (Atmel) AVR Assembler&lt;br /&gt;
* [http://www.avr-asm-tutorial.net/gavrasm/index_de.html gavrasm] - Gerds Linux/Win/DOS AVR Assembler &lt;br /&gt;
* [http://avra.sourceforge.net/ avra] - avra ATMEL AVR Assembler für Linux, FreeBSD, AmigaOS und Win32&lt;br /&gt;
* [http://algrom.net/english.html Algorithm Builder] - graphische Makro-Assembler Entwicklungsumgebung&lt;br /&gt;
* [http://www.sisy.de SiSy AVR] - graphische Entwicklungsumgebung mit Assembler Codegenerierung aus Programmablaufplänen&lt;br /&gt;
* [http://www.sbprojects.com/sbasm/sbasm.htm SB-Assembler] - Freeware Cross-Assembler unter DOS. (6502, 6800, 6801, 6804, 6805, 6809, 68HC08, 68HC11, Z8, Z80, Z180, 8080, 8085, 8021, 8041, 8048, 8051, AVR, PIC1684,...)&lt;br /&gt;
* [http://www.myAVR.de myAVRWorkpad] kompakte Entwicklungsumgebung für AVRs mit Terminal&lt;br /&gt;
&lt;br /&gt;
==== Disassembler ====&lt;br /&gt;
&lt;br /&gt;
* [http://www.datarescue.com/idabase/ IDA-Pro] -Disassembler und Debugger für fast alle bekannten Prozessoren. Evaluation Version verfügbar. Tagline: &#039;&#039;The most advanced tool for Hostile Code Analysis, Vulnerability and Software Reverse Engineering&#039;&#039;&lt;br /&gt;
* [http://avr.jassenbaum.de/ja-tools ReAVR] - Disassembler und ACXutility Binary Tool&lt;br /&gt;
* [http://www.visi.com/~dwinker/revava/ revava] - Disassembler&lt;br /&gt;
* [http://www.frozeneskimo.com/electronics/vavrdisasm-free-avr-disassembler/ vAVRdisasm] - Free AVR Disassembler&lt;br /&gt;
&lt;br /&gt;
==== BASIC ====&lt;br /&gt;
* [http://www.mcselec.com/bascom-avr.htm Bascom AVR]&lt;br /&gt;
* [http://www.fastavr.com FastAVR] - und mit &#039;ASM&#039; Ausgabe, Nokia3310 LCD Unterstützung&lt;br /&gt;
* [http://www.nettypes.de/mbasic mikrocontrollerBASIC Freeware] - mit Simulator für ATmega32, ATmega128 und C-CONTROL.&lt;br /&gt;
* [http://www.mikroe.com/en/compilers/mikrobasic/avr/ mikroBasic] - Comprehensive, stand-alone Basic compiler for AVR microcontrollers&lt;br /&gt;
* [http://home.arcor.de/EDAconsult/Page3/index.html?c~3.1 MCS BASIC-52] - Original-Übersetzung 1988 INTEL MCS BASIC-52 USERS MANUAL 220 Seiten frei Download als PDF&lt;br /&gt;
&lt;br /&gt;
==== Pascal ====&lt;br /&gt;
* [http://www.e-lab.de AVRco Pascal Compiler] - AVR Pascal Compiler mit umfangreicher Funktionslibrary&lt;br /&gt;
* [http://www.mikroe.com/en/compilers/mikropascal/avr/ mikroPascal] - Comprehensive, stand-alone Pascal compiler for AVR microcontrollers&lt;br /&gt;
&lt;br /&gt;
==== Forth ====&lt;br /&gt;
* [http://www.robo-forth.de www.robo-forth.de] - AVR Forth Compiler mit umfangreicher Funktionslibrary für Servos, Motore und Sensoren&lt;br /&gt;
* [http://amforth.sourceforge.net/ amforth] - Forth for Atmel ATmega micro controllers von Matthias Trute. [http://www.mikrocontroller.net/topic/55807#430816 Diskussion]&lt;br /&gt;
&lt;br /&gt;
==== Java ====&lt;br /&gt;
* [http://www.harbaum.org/till/nanovm NanoVM - Java for the AVR] ([[NanoVM|deutsches Wiki]])&lt;br /&gt;
&lt;br /&gt;
==== Ada ====&lt;br /&gt;
* [http://avr-ada.sourceforge.net/ AVR-Ada] - Ada Compiler innerhalb von GCC (GNAT) für AVR.  Enthält eine kleine Laufzeitbibliothek ohne Tasking und ohne Exceptions.&lt;br /&gt;
&lt;br /&gt;
==== Virgil ====&lt;br /&gt;
* [http://compilers.cs.ucla.edu/virgil/index.html The Virgil Programming Language] is designed for building robust, flexible, and scalable software systems on embedded hardware platforms. Virgil builds on ideas from object-oriented, statically typed languages like Java, providing a clean, consistent source language. Its compiler system provides an efficient implementation for resource-constrained environments.&lt;br /&gt;
&lt;br /&gt;
==== LabVIEW ====&lt;br /&gt;
* http://www.ni.com/embedded/ Informationen zu LabVIEW, der graphischen Entwicklungsumgebung von National Instruments&lt;br /&gt;
&lt;br /&gt;
=== Tutorials und Beispiele ===&lt;br /&gt;
* [http://www.meinemullemaus.de/elektronik/avr/index.html AVR Mikrocontroller] Einfühung in AVR Mikrocontroller mit Nachbau des Spiels &amp;quot;Senso&amp;quot;.&lt;br /&gt;
* [http://www.avrbeginners.net AVRBeginners.net] Beginners Guides to AVRs&lt;br /&gt;
* [http://electrons.psychogenic.com/avr/ electrons.psychgenic.com] AVR Microcontroller Section - Einführung und Tutorial (E)&lt;br /&gt;
* [http://www.wikidorf.de/reintechnisch/Inhalt/AVRProjekt-9V-LED-Lampe reintechnisch.de] AVR Tutorial: 9V-LED-Lampe&lt;br /&gt;
* [http://digitaltechnik.mschoeffler.de digitaltechnik.mschoeffler.de] Einführung in die Grundlagen der Digitaltechnik&lt;br /&gt;
&lt;br /&gt;
==== C ====&lt;br /&gt;
* [[AVR-GCC-Tutorial]]&lt;br /&gt;
* [http://www.smileymicros.com/QuickStartGuide.pdf Quick Start Guide for using the WinAVR Compiler with ATMEL&#039;s AVR Butterfly] ([http://www.smileymicros.com www.smileymicros.com], PDF)&lt;br /&gt;
* [http://www.piconomic.co.za/avr.html Piconomic Design Atmel AVR Course] is for the engineer who wants to switch to the 8-bit Atmel AVR microcontroller and learns by example. C language and compiler experience is a prerequisite. (Beim Nachbau des AVR-Boards &#039;&#039;&#039;Copyright notice&#039;&#039;&#039; beachten!)&lt;br /&gt;
* [http://www.avrtutor.com/tutorial/thermo/contents.htm avrtutor] - an attempt to provide a real tutorial for the ATMEL AVR microcontrollers.&lt;br /&gt;
* [http://www.sparkfun.com/commerce/present.php?p=BEE-1-PowerSupply Spark Fun Electronics] - Beginning Embedded Electronics (Atmega8, englisch)&lt;br /&gt;
&lt;br /&gt;
==== Assembler ====&lt;br /&gt;
* [http://avr-asm.tripod.com Atmel AVR ASM Site]&lt;br /&gt;
* [http://www.avr-asm-tutorial.net Atmel AVR Microcontroller Assembler Tutorial] (D)&lt;br /&gt;
* [http://www.itee.uq.edu.au/~cse/_atmel/AVR_Studio_Tutorial/ Einstieg in AVRStudio 4] (viele Abbildungen, Engl.)&lt;br /&gt;
* [[AVR-Studio]]&lt;br /&gt;
&lt;br /&gt;
==== Bascom ====&lt;br /&gt;
* [http://www.mcselec.com/ MCS Elektronik] BASCOM AVR Demo zum Download&lt;br /&gt;
&lt;br /&gt;
==== Pascal ====&lt;br /&gt;
* [http://www.elektronik-projekt.de/content/download/avrco_tut2.pdf AVRco Pascal Tutorial] - von Markus&lt;br /&gt;
* [http://www.ibrtses.com/embedded/avr.html ein paar Seiten zum AVR] (ASM und Pascal) von ibrt&lt;br /&gt;
&lt;br /&gt;
=== Hardware (Prototypen-Platinen-Boards etc.) ===&lt;br /&gt;
&lt;br /&gt;
* [http://retrodan.tripod.com Atmel AVR Butterfly Site]&lt;br /&gt;
* [http://www.simplesign.de simplesign.de] Controller Module, Bausätze. Auf Kundenwünsche wird sehr gerne eingegangen&lt;br /&gt;
* [http://www.fox4you.cc Austria] Development Tools for ATMEL ATmega Microcontrollers Connections via USB and LAN&lt;br /&gt;
* [http://www.kanda.com Kanda] Starter Kits and Development Tools for different Microcontrollers&lt;br /&gt;
* [http://www.dontronics.com Dontronics] Starter Kits and Development Tools for different Microcontrollers, Linkpages for AVR and PIC&lt;br /&gt;
* [http://www.mikrocontroller.com mikrocontroller.com] u.a. Platine AVR-Ctrl, AVR-Webserver (D)&lt;br /&gt;
* [http://mikrocontroller.cco-ev.de/eng/ AVR webserver] RTL8019, 3COM (E) &lt;br /&gt;
* [http://www.microcontroller-starterkits.de Microcontroller-Starterkits] Starter Kits for different Microcontrollers (D)&lt;br /&gt;
* [http://www.olimex.com Olimex Ltd.] DevelopmentBoards and Tools&lt;br /&gt;
* [http://www.krause-robotik.de Krause Robotik] Controller Boards &amp;amp; Zubehör&lt;br /&gt;
* [http://www.robotikhardware.de robotikhardware.de] Controller Boards&lt;br /&gt;
* [http://www.ssv-embedded.de SSV Embedded Systems] 32-bit Mikrocontrollermodule und -boards, Starter Kits etc.&lt;br /&gt;
* [http://shop.embedit.de/browse_002_21__.php Embedit] Mikrocontrollermodule und -boards&lt;br /&gt;
* [http://www.roboprogy.de Roboprogy] Kleine Mikrocontrollerplatine mit Peripherie-ICs und vielen Ein- und Ausgängen. Vorbereitete Programmbausteine.&lt;br /&gt;
* [http://www.display3000.com Display3000] Farbdisplays, Mikrocontrollermodule und -boards mit TFT-Farbdisplays; Experimentierplatinen und Ansteuerplatinen für TFT Farbdisplays&lt;br /&gt;
* [http://www.glyn.de GLYN High-Tech Distribution] Mikrocontroller Applikationen, TFT-Displays, LCD-Anzeigen, Memory Cards&lt;br /&gt;
* [http://www.myavr.de myAVR] Einsteigerboards und Zubehör&lt;br /&gt;
* [http://www.siphec.com/ SIPHEC] Development Boards für AVR, MSP430, USB&lt;br /&gt;
* [http://www.pollin.de/shop/shop.php?cf=detail.php&amp;amp;pg=OA==&amp;amp;a=MTY5OTgxOTk=&amp;amp;w=OTk4OTY4&amp;amp;ts=0 ATMEL Evaluations-Board Bausatz] ([http://www.pollin.de/shop/downloads/D810038B.PDF PDF]) und [http://www.pollin.de/shop/shop.php?cf=detail.php&amp;amp;pg=OA==&amp;amp;a=MzU5OTgxOTk=&amp;amp;w=OTk4OTY4&amp;amp;ts=0 ATMEL Funk-Evaluations-Board Bausatz] ([http://www.pollin.de/shop/downloads/D810046B.PDF PDF]) von Pollin&lt;br /&gt;
* [http://www.lochraster.org/etherrape/ Etherrape] Atmaga 644 mit Ethernet und TCP/IP als Bausatz.&lt;br /&gt;
* [http://www.ic-board.de/index.php?cat=c4_Programmer.html AVR Programmieradapter],[http://www.ic-board.de/index.php?cat=c3_Funkmodule.html ZigBee-ready Funkmodule/Funk-USB-Sticks] und [http://www.ic-board.de/index.php?cat=c13_ICradio-Bundles.html Funk Starterkits] von In-Circuit&lt;br /&gt;
* [http://www.ic-board.de/index.php?cat=c2_ICnova-Module.html AVR32 AP7000 Linux Board] mit 2xEthernet, TFT, Audio, SDCARD, USB-Host/Devive, Funk...&lt;br /&gt;
* [http://www.freeduino.org/ Freedunio] - Riesige Linksammlung zu dem &#039;&#039;&#039;Ardunio&#039;&#039;&#039;(R) AVR-Board (Kit) und dessen Clones und Mutanten (DIY oder Kit)&lt;br /&gt;
* [http://www.das-labor.org/wiki/Laborboard Das Laborboard] von das-labor.org (DIY)&lt;br /&gt;
* [http://www.liberlab.net/ Liberlab-Board] - Steckbrett- oder PCB-Design zum AVR-Einstieg mit dem Atmega8. Interessant ist, dass alle Ports auf einen DB25-female Buchsenleiste herausgeführt sind. (DIY)&lt;br /&gt;
* [http://six.media.mit.edu:8080/6 number six] - Open Source Design, Atmega32. Alle Pins sind auf eine 2x20 Pol Wannenstiftleiste herausgeführt.&lt;br /&gt;
* http://www.maares.de/tools USB Memory Stick am AVR Butterfly. AVR Butterfly Trägerplatine zum Anschluß von VDRIVE, VMUSIC, RFM12.&lt;br /&gt;
&lt;br /&gt;
=== Programmierhard- und Software ===&lt;br /&gt;
* [http://www.bsdhome.com/avrdude/ AVRDUDE] AVR ISP-Programmerierwerkzeug für Unix/Linux/BSD und Windows. Kommandozeile [http://sourceforge.net/projects/avrdude-gui/ (oder mit GUI)], AVR Butterfly-Unterstützung&lt;br /&gt;
* [http://www.lancos.com/prog.html PonyProg] neben AVR für diverse seriell programmierbare Bauteile (Grafische Nutzeroberfläche und Kommandozeile), siehe auch [[Pony-Prog Tutorial]]&lt;br /&gt;
* [http://savannah.nongnu.org/projects/uisp/ uisp] AVR ISP-Programmierwerkzeug für Unix/Linux/BSD und Windows (Kommandozeile)&lt;br /&gt;
* [http://www.myplace.nu/avr/yaap/ yaap]&lt;br /&gt;
* [http://www.xs4all.nl/~sbolt/e-index.html SP12]&lt;br /&gt;
* [http://www.mikrocontroller-projekte.de/Mikrocontroller/AVR-Prog/AVR-Programmer.html AVR910 kompatibler Programmer] mit aktueller, beschleunigter Firmware.&lt;br /&gt;
* [http://www.der-hammer.info/hvprog STK500 kompatibler Programmer] als Nachbauprojekt. Siehe auch [[STK500]]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=73&amp;amp;products_id=41 Preiswerter Standard ISP (STK200 kompatibel)]&lt;br /&gt;
*  [http://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/ Evertool] kombinierter ISP &amp;amp; [[JTAG]] Programmer (kompatibel zum &amp;quot;original&amp;quot; Atmel AVRISP und Atmel JTAGICE) &lt;br /&gt;
* [http://www.olimex.com Olimex] (Bulgarischer Anbieter) Kostengünstig&lt;br /&gt;
* [http://www.avr-projekte.de/isp.htm AVR910-USB Programmer] incl. USB-Modul und USB-&amp;gt;Seriell Wandler&lt;br /&gt;
*[http://www.fischl.de/usbasp/ USBasp] &amp;amp;#8211; USB-Programmer bestehend aus ATmega8 (kein spezieller USB-Chip notwendig)&lt;br /&gt;
* [http://home.arcor.de/bernhard.michelis Amadeus-USB] - Highspeed-Programmer für (ds)PIC und AVR. Bietet auch Möglichkeiten zur Fehlersuche.&lt;br /&gt;
* [http://www.e-dsp.com Signalgenerator] - Signalgenerator software&lt;br /&gt;
* [http://www.myavr.de/shop/artikel.php?artID=42 mySmartUSB] - USB Programmer und USB-UART-Bridge, AVR910 und AVR911 kompatibel&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=73&amp;amp;products_id=161 USB-Programmer für Bascom Programmierer]&lt;br /&gt;
* [http://www.virtualserialport.com/ Virtual Serial Port] Software for serial port communication and null-modem emulation&lt;br /&gt;
* [http://www.ic-board.de/index.php?cat=c4_Programmer.html AVR Programmieradapter und JTAGICE MKII]&lt;br /&gt;
* [http://www.helmix.at/hapsim/index.htm HAPSIM graphischer Simulator ] zu graphischen Simulation von Tasten /LED /LCD und Terminal in AVR Studio Freeware !!!&lt;br /&gt;
* [http://www.ic-board.de/index.php?cat=c4_Programmer.html AVR Programmieradapter und JTAGICE MKII]&lt;br /&gt;
* [http://www.myavr.de/download.php?suchwort=ProgTool myAVR ProgTool] nette Programmieroberfläche (free)&lt;br /&gt;
* [http://b9.com/elect/avr/kavrcalc/ KAVRCalc] is a free calculator to assist in programming AVR microcontrollers (Baudrate, Watchdog, Timer, ...)&lt;br /&gt;
&lt;br /&gt;
=== Projekte und Quellcodebibliotheken ===&lt;br /&gt;
&lt;br /&gt;
====Bibliotheken====&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/ AVR Libc]&lt;br /&gt;
* [http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/index.html Procyon AVRlib]&lt;br /&gt;
* [http://homepage.hispeed.ch/peterfleury Peter Fleury&#039;s Pages] - UART / LCD (HD44780) / I²C (TWI)/ AVR-GCC Bibliotheken, STK500v2 Bootloader&lt;br /&gt;
*[http://sourceforge.net/projects/avrfix  Fixed Point Library Based on ISO/IEC Standard DTR 18037 for Atmel AVR microcontrollers, u.a. Cordic-Algorithmen] und [http://www.enti.it.uc3m.es/wises07/presentations/session2/05%20-%20Fixed%20Point%20Library%20According%20to%20ISOIEC%20Standard%20DTR%2018037%20for%20Atmel%20AVR%20ProcessorsWISES07-fixedpointlibrary%20-%20Elmenreich.pdf  Kurzbeschreibung dazu als Powerpoint-PDF TU Wien Febr. 2007]&lt;br /&gt;
&lt;br /&gt;
==== Betriebssysteme &amp;amp; Co. ====&lt;br /&gt;
* [http://www.chris.obyrne.com/yavrtos/ YAVRTOS] - Yet Another Atmel® AVR® Real-Time Operating System von Chris O&#039;Byrne (C, Atmega32, GPL3 Lizenz)&lt;br /&gt;
* [http://www.freertos.org/ FreeRTOS] is a portable, open source, mini Real Time Kernel - a free to download and royalty free RTOS that can be used in commercial applications. (AVR, MSP430, PIC, ARM7, ...)&lt;br /&gt;
* [http://www.barello.net/avrx/index.htm AvrX Real Time Kernel] (IAR ASM oder IAR/GCC C, GPL2 Lizenz)&lt;br /&gt;
* [http://scmrtos.sourceforge.net/ scmRTOS] - Single-Chip Microcontroller Real-Time Operating System (C++, AVR, MSP430, Blackfin, ARM7, FR (Fujitsu, [http://www.opensource.org/licenses/mit-license.php MIT Lizenz]).&lt;br /&gt;
* [http://www.circuitcellar.com/avr2004/DA3650.html csRTOS] - cooperative single-stack RTOS aus dem Circuit Cellar AVR 2004 Design Contest.  [http://www.avrfreaks.net/index.php?module=Freaks%20Academy&amp;amp;func=viewItem&amp;amp;item_id=987&amp;amp;item_type=project csRTOS port to ATmega32] und [http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=viewtopic&amp;amp;t=50743&amp;amp;start=all&amp;amp;postdays=0&amp;amp;postorder=asc Diskussion] auf www.avrfreaks.net führte zur Weiterentwicklung als [http://www.mtcnet.net/~henryvm/4AvrOS/ 4AvrOS] - cooperative scheduler&lt;br /&gt;
* [http://www.avrfreaks.net/index.php?module=Freaks%20Academy&amp;amp;func=viewItem&amp;amp;item_type=project&amp;amp;item_id=230 OPEX] - freeware cooperative scheduler with lots of calendar and I/O functions von Steve Childress (Download auf www.avrfreaks.net ggf. Registrierung notwendig)&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/12176#79672 Scheduler] von Peter Dannegger&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/25087#186454 RTC-Scheduler] von ape&lt;br /&gt;
* [http://www.sics.se/~adam/pt/ Protothreads] - Lightweight, Stackless Threads in C (open source BSD-style license)&lt;br /&gt;
* [http://www.micrium.com/products/rtos/kernel/rtos.html uC/OS-II] is a real time operating system developed by Jean J. Labrosse. You can obtain the source code for the OS by buying Labrosse&#039;s excellent book &#039;&#039;MicroC/OS-II The Real-Time Kernel (2nd edition)&#039;&#039;. [http://www.ee.lut.fi/staff/Julius.Luukko/ucos-ii/avr/index.shtml Port for AVR (gcc 3.x)] and [http://www.myplace.nu/avr/ucos/index.htm AVR (gcc 2.x)].&lt;br /&gt;
* [http://freshmeat.net/projects/qp/ QP] is a lightweight, portable framework/RTOS for embedded systems (ARM, Cortex-M3, 8051, AVR, MSP430, M16C, HC08, NiosII, and x86). GPL (und kommerzielle Lizenz verfügbar)&lt;br /&gt;
* [http://www.femtoos.org/ Femto OS] von  Ruud Vlaming ist ein preemptives Betriebssystem für die kleinsten Mikrocontroller aus der AVR Serie bis ca. 16 KB ROM und 1 KB RAM. Spezielle Targets sind: ATtiny861/461/261. Geschrieben in C. Freie Software, GPLv3.&lt;br /&gt;
* [http://www.projects-lab.com/?p=344 kaOS] is a real-time, multithreaded, preemptive operating system for the ATmega32 microcontroller, which loads and executes programs from a Secure Digital or MMC card. Authors Nicholas Clark &amp;amp; Adam Liechty. (Circuit Cellar AVR Wettbewerb 2006)&lt;br /&gt;
&lt;br /&gt;
==== Projektsammlungen ====&lt;br /&gt;
&lt;br /&gt;
* [http://iwenzo.de Elektronik und Informationen] Wissenswertes aus der Unterhaltungselektronik..&lt;br /&gt;
* [http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/ Cornell University ECE 476 Microcontroller Design Final Projects]&lt;br /&gt;
* [http://www.serasidis.gr/ Serasidis Vasilis&#039; AVRsite] u.a. GLCD, SMS, PAL&lt;br /&gt;
* [http://www.riccibitti.com Alberto Ricci Bitti] u.a. PAL Video-Interface&lt;br /&gt;
* [http://www.ulrichradig.de Mikrocontroller and more] AVR - Projekte (Ethernet, LCD, Relaiskarte usw.) und mehr&lt;br /&gt;
* [http://home.arcor.de/burkhard-john/index.html Burkhard John] (D)&lt;br /&gt;
* [http://home.planet.nl/~meurs274/ AVRmicrocontrollerprojects] u.a. Text-LCD, Schrittmotor, Thermometer&lt;br /&gt;
* [http://hem.bredband.net/robinstridh/ Robin Stridh] Rotor-Anzeige, Video-Interface&lt;br /&gt;
* [http://www.dertien.dds.nl/content/avrprojects.html dertien.dds.nl AVR-Projects]&lt;br /&gt;
* [http://www.microsps.com MicroSPS.com] Grafische Programmierung des AVR mit EAGLE&lt;br /&gt;
* [http://www.h-mpeg.de h-mpeg Festplatten mp3 Player] IDE Ansteuerung, IDE Filesystem, LCD Ansteuerung etc. in 8K Code. Quelltext unter GPL&lt;br /&gt;
* [http://www.embedtronics.com/ embedtronics.com]&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects  M. Thomas&#039; AVR Projekte] AVR Butterfly avr-gcc-port, Bootloader, Programmier- und Debughardware, Software-UART, DS1820-Lib., experimentelle avrdude-Versionen, AVR und CAN mit MCP2515 &amp;lt;!-- Vorsicht &amp;quot;Eigenwerbung&amp;quot; --&amp;gt;&lt;br /&gt;
* [http://www.mictronics.de Michaels Electronic Projects] AVR Projekte (EN) - ua. Sony/Becker CD/MD Wechsler Emulator, RDS-Decoder, GPS Infos, OBD J1850 VPW Interface, USB&amp;lt;&amp;gt;CAN Bus Interface. Informationen zu CD Wechsler Protokollen. MP3stick - MP3 Player mit ATmega128, color LCD, SD/MMC Karte und VS1011b&lt;br /&gt;
* [http://www.stahlbucht.de/elektronik/node13/ node13] modulares AVR 8515 Projekt: eine Controller-Platine, an die sich weitere Ein-Ausgabemodule (Tastenfeld, LEDs, LCD-Modul) anschliessen lassen&lt;br /&gt;
* [http://www.mikrocontroller-projekte.de www.mikrocontroller-projekte.de] Diverse Projekte mit AVR Controllern. AVR910 Programmer, Testboard und Modellbauelektronik&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2 Roboternetz-Mikrocontroller Projekte.de] Diverse Projekte mit AVR und anderen Controllern, insbesondere im Bereich Robotik&lt;br /&gt;
* [http://www.avr-projekte.de AVR-Projekte.de] HD44780-LCD über USB und Seriell, AVR910-USB Programmer, Basteleien&lt;br /&gt;
* [http://openeeg.sourceforge.net/ openeeg.sourceforge.net] Das OpenEEG Projekt befasst sich mit der Entwicklung eines preiswerten Elektro-Enzephalographie (EEG) Geräts und dessen freier Steuersoftware zur Messung elektrischer Gehirnströme. Sein µPC-Herz ist ein AT90S4433 bzw. ein ATmega8. Ziel sind auch verschiedene EEG Anwendungen z.B. im Bereich mentaler Trainingsmethoden (Neurofeedback).&lt;br /&gt;
* [http://www.amateurfunkbasteln.de/ www.amateurfunkbasteln.de] Seite von Michael Wöste (DL1DMW) u.a. CPU-Board mit AT89C2051, AT89C4051 oder AVR AT90S2313, CPU-Board mit Atmel AT90S8535, Experimentierplatine mit ATmega103, Programmer für AT89C2051/AT89C4051, 32-Kanal-Logik-Analysator bis 40 MHz (Entwurf von David L. Jones)&lt;br /&gt;
* [http://www.atmel.com/dyn/products/app_notes.asp?family_id=607 Atmel - AVR 8-Bit RISC - Application Notes] Anwendungshinweise und Beispiele vom Hersteller&lt;br /&gt;
* [http://www.projects.cappels.org/ Dick Cappels&#039; Project Pages]&lt;br /&gt;
* [http://see-by-touch.sourceforge.net/index.html SeebyTouch - Blinden-Seh-Ersatzsystem] Computerbilder fühlen durch ein einfaches Gerät (Bauanleitung) und freier Software (für 10 Betriebssysteme) - eine neue Erfahrung für alle&lt;br /&gt;
* [http://www.loetstelle.net www.loetstelle.net] Verschiedene kleinere AVR-Projekte rund um LEDs, z.B. RGB Dimmer, Moodlight. Diverse Elektronikprojekte und Grundlagen&lt;br /&gt;
* [http://www.dietmar-weisser.de Selbstbauprojekte Elektronik] kleine Sammlung von Elektronikprojekten zum Thema Leiterplattenfertigung, Hochfrequenztechnik und Mikrocontroller.&lt;br /&gt;
* [http://www.myplace.nu/avr/ Jesper&#039;s AVR pages] Yampp MP3 Player, Yaap Programmer, DDS mit 2313+R2R, Gitarrentuner, Frequenzzähler.&lt;br /&gt;
* [http://www.microsyl.com/ MicroSyl MCU] MP3 Player, MegaLoad, HCLoad, Propeller Clock, Freq Meter, BarCode Reader, Door Bell, OneWire Lib, Text LCD Lib, Graph LCD Lib, Nokia LCD Lib, Led Sign with MMC MemoryCard, Intercom&lt;br /&gt;
* [http://www.jeroen.homeunix.net/ http://www.jeroen.homeunix.net/] Aufbau eines elektronischen Rouletts auf basis eines AVRs&lt;br /&gt;
* [http://thomaspfeifer.net thomaspfeifer.net] Reflow-Ofen, Laminator-Temperaturregelung, USB-Atmel-Programmer, SMD-Tricks u.v.m.&lt;br /&gt;
* [http://www.scienceprog.com Scienceprog - embedded theory and projects] - AVR, ARM theory and projects&lt;br /&gt;
* [http://www.iuse.org Hausautomatisierung] - CAN-Bus mit ATmega32-Controllern und Bedienfeldern, Admin-Tools zum Updaten via CAN, Traffic Dumper etc.&lt;br /&gt;
* [http://www.myevertool.de AVRSAM] - AT91SAM7S Header Board annährend 100% Pinkompatibel zu den folgenden AVR Mikrocontroller: AT90S8535 / ATMEGA8535 / ATMEGA16 / ATMEGA32&lt;br /&gt;
* [http://members.aon.at/hausbus Hausbus Home] - Hausbus-Projekt unter Verwendung von ATmega8, ATtiny13 und ATmega128&lt;br /&gt;
* [http://www.thomas-wedemeyer.de/elektronik/AVR/avr-dcf-clock.html AVR-DCF-Clock] - DCF-Uhr mit bunter LED-Anzeige - ATmega8&lt;br /&gt;
* [http://www.grasbon.de/genuhr.html GenuhR] - DCF-Funkuhr / Wecker/ Timer mit LED-Punktmatrixanzeige. Das Projekt beschreibt den Aufbau des kompletten Gerätes beginnend beim Schaltplan bis hin zur Montage in ein Gehäuse.&lt;br /&gt;
* [http://www.avrguide.com/ AVR Projektsammlung] bei www.avrguide.com&lt;br /&gt;
* AVR Synth http://www.elby-designs.com/avrsynth/avrsyn-about.htm http://www.jarek-synth.strona.pl/&lt;br /&gt;
* [http://elm-chan.org/he_e.html Electronic Lives Manufacturing] - Aufbauten in Fädeldrahttechnik, tlw. auf Japanisch, aber mit englischen Sourcecodes&lt;br /&gt;
* AVR Synthesizer http://www.avrx.se/&lt;br /&gt;
* [http://freenet-homepage.de/wedis-bastelecke/ Wedis-Bastelecke] - Modellbahn DCC-Servo-Zubehördecoder DCC Servo Decoder mit ATmega8 / Servo Differenzierbaugruppe für Modellbau&lt;br /&gt;
* http://www.electronicspit.com - Verschiedene Elektronikprojekte (LED-Matrix, PAL-Video)&lt;br /&gt;
* http://www.hebel23.de/index.htm?/projekte/radio/radio.htm RDS RADIO: ATMega32, TEA5757, T6963C, TDA7330B in C&lt;br /&gt;
* [http://www.gasenzer.dk Analog/Digital and MPU Eletronic Projects] PAL/VGA Terminal, CallerID, Ethernet, Wireless Bridge, LPC2214, AT91RM9200, Sony Unilink Controlled Wireless MP3 Player.&lt;br /&gt;
* [http://www.circuitcellar.com/avr2004/ Circuit Cellar AVR Design Contest 2004] mit Projektbeschreibungen&lt;br /&gt;
* [http://www.circuitcellar.com/avr2006/ Circuit Cellar AVR Design Contest 2006] mit Projektbeschreibungen&lt;br /&gt;
&lt;br /&gt;
==== Schnittstellen ====&lt;br /&gt;
===== TCP/IP =====&lt;br /&gt;
* [http://www.laskater.com/projects/uipAVR.htm TCP/IP Stack für AVR] mit Realtek RTL8019AS oder Axis AX88796 Netzwerk-Chips (open source für avr-gcc und Imagecraft). Passende Hardware in [http://www.edtp.com/ diesem online-shop]&lt;br /&gt;
* [http://www.ethernut.de Ethernut] - AVR based Hardware with Ethernet-Interface, Multithreading OS, Software and Hardwaredesign is free&lt;br /&gt;
* [http://www.cesko.host.sk/IgorPlugUDP/IgorPlug-UDP%20(AVR)_eng.htm IgorPlug-UDP AVR] - Ethernet &amp;amp; UDP/IP in Software implementiert&lt;br /&gt;
* [http://members.home.nl/bzijlstra/software/examples/RTL8019as.htm] RTL8019 Bascom&lt;br /&gt;
* [http://members.home.nl/bzijlstra/software/examples/RTL8019as.htm AVR und RTL8019]&lt;br /&gt;
* [http://avr.auctionant.de/avr-ip-webcam AVR IP Webcam] &lt;br /&gt;
* http://mikrocontroller.cco-ev.de/de/webcam.php&lt;br /&gt;
* [http://avr.auctionant.de/avrETH1/ avrETH1 - Webserver mit enc28j60 und Webcam-Support]&lt;br /&gt;
* [http://www.sics.se/~adam/uip/ uIP-Stack, Teil des Contiki OS]&lt;br /&gt;
* [http://www.harbaum.org/till/spi2cf/ WLAN-Implementierung auf Basis einer PRISM-CF-Karte und uIP]&lt;br /&gt;
* http://www.circuitcellar.com/AVR2006/winners/DE/AT2581.htm MEGA128(CAN) PCMCIA&lt;br /&gt;
* [http://www.ic-board.de/index.php?cat=c2_ICnova-Module.html AVR32 AP7000 Linux Board] mit 2xEthernet, TFT, Audio, SDCARD, USB-Host/Devive, Funk...&lt;br /&gt;
* [https://berlin.ccc.de/wiki/AVR-Board_mit_Ethernet AVR-Board mit Ethernet mit dem ENC28J60 von Microchip]&lt;br /&gt;
&lt;br /&gt;
===== CAN =====&lt;br /&gt;
* [http://www.canathome.de/ Can@Home] - CAN als &amp;quot;Installationsbus&amp;quot;, u.a. mit AVRs (D)&lt;br /&gt;
* [http://www.iuse.org/ www.iuse.org] - Hausautomatisierung auf CAN Basis&lt;br /&gt;
* [http://www.port.de/ www.port.de] - Professionelle CAN/CANopen Entwicklungswerkzeuge&lt;br /&gt;
* [http://can-wiki.info CAN-WIKI] - spezielle Wiki Site für CAN bus (Englisch)&lt;br /&gt;
* [[CAN-Bus]] - Eintrag in diesem Wiki&lt;br /&gt;
* [[CAN als Hausbus]] - Eintrag in diesem Wiki&lt;br /&gt;
* [http://www.canhack.de/ www.canhack.de] - Ein Forum, dass sich mit dem CAN bus im Auto beschäftigt&lt;br /&gt;
&lt;br /&gt;
===== USB =====&lt;br /&gt;
* [http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm Igor-Plug] - USB Device interface in AVR Firmware - no extra Interface IC needed, read the License&lt;br /&gt;
* [http://www.obdev.at/products/avrusb/ AVR-USB] &amp;amp;#8211; USB-Implementation in C nach gleichem Prinzip wie Igor-Plug, aber einfacher zu verwenden, GPL-ähnliche Lizenz (Nutzung des Projekts &#039;&#039;erfordert&#039;&#039; Veröffentlichung), englisch kommentierter Code&lt;br /&gt;
* [http://www.xs4all.nl/~dicks/avr/usbtiny/ USBTiny] &amp;amp;#8211; weitere Software-USB-Implementierung in C; sehr ähnlich AVR-USB; steht aber unter GPL; relativ wenige Beispiele&lt;br /&gt;
* MJoy USB Joystick Controller on AVR ATmega8&lt;br /&gt;
* [http://www.ime.jku.at/tusb/ TUSB3210-Controller, HID, LIBUSB] Ein Projektseminar, in dem es darum ging, die USB-Schnittstelle des TUSB3210 zu aktivieren und die Daten eines ADC an den PC zu senden. USB-Implementierung für µC und PC.&lt;br /&gt;
* [http://www.b-redemann.de Steuern und Messen mit USB - FT232, 245 und 2232] Das aktuelle Buch zu den USB-Controllern von FTDI. Viele Beispielprogramme in C, zwei Projektbeschreibungen: I²C-Bus mit LM75A und ein Web-Projekt. Bauteilesatz und USB-Modul mit dem FT2232 zum schnellen Einstieg in die Thematik. Buch / Teilesatz über Segor oder dieser Seite erhältlich.&lt;br /&gt;
* [http://www.eltima.com/products/usb-over-ethernet/ USB to Ehternet Connector] - Share your USB devices via LAN/Internet&lt;br /&gt;
* [http://www.ixbat.de Viele kleine USB Projekte] Rund um die Bibliothek usbn2mc http://usbn2mc.berlios.de. Dies ist eine einfache Bibliothek für den USBN9604/03 von National Semiconductor&lt;br /&gt;
* [http://www.rahand.eu Mega8D12] - Einsteiger-Tutorial zur CDC-Klasse (virtueller COM-Port) mit Schaltung und Firmware (ATmega8 und PDIUSBD12).&lt;br /&gt;
* http://www.maares.de/tools USB_ISO: Isolierter Schnittstellenwandler USB auf RS232 (TTL) mit FT232RL und ADUM1402. Galvanische Trennung für das Zielsystem.&lt;br /&gt;
&lt;br /&gt;
===== DMX512 =====&lt;br /&gt;
* [http://Dworkin-DMX.de Konverter RS232 zum DMX512] Steuerung DMX-fähigen Geräten mit einem PC. Es gibt Low cost Variante zum selber basteln.&lt;br /&gt;
* [http://www.hoelscher-hi.de/hendrik/light/license.htm Hennes Sites] Bauanleitungen für DMX-Dimmerpacks, DMX-Switchpacks, PWM-Controller, ... Tutorial für Senden und Empfangen von DMX-Daten mit AVRs.&lt;br /&gt;
* [http://www.lj-skinny-development.de/lj2000/ DMX Lichtanlage im Selbstbau] Projekt für den Selbstbau einer kompletten Lichtanlage zur Steuerung über DMX. Projekt beinhaltet alles was man für den Betrieb einer eigenen Lichtanlage benötigt (Mischpult, Steuersoftware, Dimmer, Scanner mit Iris, Shutter-Dimmer, 2 rotierenden Goborädern, 2 Farbrädern, CMY-Farbmischeinheit, Prisma, Fokus ...).&lt;br /&gt;
* [http://digital-enlightenment.de Digital Enlightenment ]Verschiedene DMX-Selbstbauprojekte&lt;br /&gt;
&lt;br /&gt;
===== PS2 =====&lt;br /&gt;
* [http://www.avrfreaks.net/index.php?module=Freaks%20Academy&amp;amp;func=viewItem&amp;amp;item_id=1086&amp;amp;item_type=project&amp;amp;timestamp=2007-09-04%2018:34:41 PC keyboard to an AVR]&lt;br /&gt;
&lt;br /&gt;
===== LANC =====&lt;br /&gt;
* [http://www-e2.ijs.si/3DLANCMaster/ 3D LANC Master from Damir Vrancic] is a device which keeps in synchronisation some of Sony camcorders by using LANC (CONTROL-L, ACC) protocol. (Open Hardware + Open Source, Atmega8).&lt;br /&gt;
* [http://jochendony.homeip.net/content/view/22/26/ LANC Lib] for AVRGCC. Read and write LANC commands.&lt;br /&gt;
&lt;br /&gt;
===== MMC/SD-Card =====&lt;br /&gt;
* [http://www.roland-riegel.de/sd-reader/index.html MMC/SD card reader example application] von Roland Riegel (Atmega8, Atmega168 für FAT16)&lt;br /&gt;
* [http://www.captain.at/electronic-atmega-mmc.php MMC Flash] bzw.  [http://www.captain.at/electronic-atmega-sd-card.php SD Flash ] Memory Extension für Atmegas von Captain. (Atmega16, Atmega32)&lt;br /&gt;
&lt;br /&gt;
==== LC-Displays ====&lt;br /&gt;
&lt;br /&gt;
===== Text (character-mode) HD44870 =====&lt;br /&gt;
* [http://jump.to/fleury P.Fleury]&lt;br /&gt;
* avrfreaks Projekt 59 (Chris E.) und andere&lt;br /&gt;
* Procyon avrlib v. Pascal Slang (GPL)&lt;br /&gt;
* Bray&lt;br /&gt;
* [http://www.sprut.de/electronic/lcd/index.htm Spruts LCD-Seite]&lt;br /&gt;
* [http://elm-chan.org/docs/lcd/lcd3v.html Standard-LCD auf 3V betreiben (eng)]&lt;br /&gt;
* [http://www.harbaum.org/till/lcd2usb LCD2USB, LCD mit AVR am USB betreiben]&lt;br /&gt;
&lt;br /&gt;
===== Grafik T6963C etc. =====&lt;br /&gt;
&lt;br /&gt;
* http://www.holger-klabunde.de/avr/avrboard.htm#t6963&lt;br /&gt;
* [[Projekt T6963-LCD-Ansteuerung]] nur PC, keine Änderung seit Juli 2006&lt;br /&gt;
* avrfreaks.net - TOSHIBA_LCD_T6963C, AVR Graphics&lt;br /&gt;
* http://www.mikrocontroller.net/topic/48456 C&lt;br /&gt;
* http://www.mikrocontroller.net/topic/54563 C&lt;br /&gt;
* http://www.mikrocontroller.net/topic/48584 ASM&lt;br /&gt;
* [http://passworld.co.jp/ForumMSP430/viewtopic.php?t=47 Grafik LCDs] - 128 x 112 Grayscale für MSP430 und andere uCs.&lt;br /&gt;
* http://www.display3000.com/ Farb-TFT-Module inkl. Mikrocontroller (ATMega128; ATMega2561 und AT90CAN128)&lt;br /&gt;
In der Codesammlung gibt es auch für andere Controller was.&lt;br /&gt;
&lt;br /&gt;
===== Siemens S65/M65/CX65 =====&lt;br /&gt;
* [http://www.superkranz.de/christian/S65_Display/DisplayIndex.html S65-Display] vom Siemens S65/M65/CX65, 132x176 Pixel, 65536 Farben, günstig als Ersatzteil zu bekommen.&lt;br /&gt;
&lt;br /&gt;
===== Nokia 3210/3310 =====&lt;br /&gt;
* [http://www.microsyl.com MicroSyl.Com]&lt;br /&gt;
&amp;lt;!-- * [http://www.microsyl.com/nokialcd/shematic.gif Belegung] --&amp;gt;&lt;br /&gt;
* [http://www.deramon.de/nokia3310lcd.php Deramon.de]&lt;br /&gt;
&amp;lt;!-- [[Bild:Beispiel.jpg]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Nokia 6100 LCD =====&lt;br /&gt;
&amp;lt;!-- * [http://www.apetech.de/article.php?artId=3&amp;amp;nnId=12 Nokia 6100 LCD Library] für Nokia-Displays 132x132 Pixel, 4096 Farben mit Philips Controller (bei eBay ziemlich preiswert zu ersteigern) --&amp;gt;&lt;br /&gt;
* [http://www.myplace.nu/mp3/download/download.php Yampp 7 Software Download Seite]: Archiv &amp;quot;yampp-7 with colour LCD firmware&amp;quot; enthaelt avr-gcc/avr-as Routinen für 6100-LCDs mit Philips- oder Epson-Controller (nicht direkt eine &amp;quot;Library&amp;quot;)&lt;br /&gt;
*[http://www.e-dsp.com/controlling-a-color-graphic-lcd-epson-s1d15g10-controller-with-an-atmel-avr-atmega32l/ S1D15G10]: Routine code für den Epson S1D15G10 Controller&lt;br /&gt;
*[http://thomaspfeifer.net/nokia_6100_display.htm Nokia 6100 Display am AVR] Anzeige von RGB-Bildern (für avr-gcc)&lt;br /&gt;
*[http://www.optixx.org/ www.optixx.org] Code zur Ansteuerung von Philips und Epson&lt;br /&gt;
&lt;br /&gt;
===== KS0108 =====&lt;br /&gt;
* [http://hubbard.engr.scu.edu/embedded/avr/avrlib Procyon avrlib (GPL)]&lt;br /&gt;
* avrfreaks UP&lt;br /&gt;
* apetech.de nicht mehr erreichbar http://www.mikrocontroller.net/topic/68316&lt;br /&gt;
&lt;br /&gt;
====GPS====&lt;br /&gt;
* http://www.holger-klabunde.de/avr/avrboard.htm#GPSdisplay GPS-Daten auf LCD&lt;br /&gt;
* [http://www.geoclub.de/forum57.html www.geoclub.de] - Elektronik beim Geocaching&lt;br /&gt;
* [http://passworld.co.jp/ForumMSP430/viewtopic.php?t=22 passworld.co.jp] - Do It Yourself GPS&lt;br /&gt;
&lt;br /&gt;
== [[8051|8051 / MCS51]] ==&lt;br /&gt;
* [http://www.progshop.com/versand/software/prog-studio/index.html Prog-Studio] - Moderne Assembler Entwicklungsumgebung für 8051 Mikrocontroller mit Debugger, Edit &amp;amp; Continue, Code-Folding, Intelli-Sense, Monitorung und mehr&lt;br /&gt;
* [http://www.yCModule.de yCModule: µController-Systeme] - Preisgünstige µController-Module, ISP-Programmiertools und Applikationsboards&lt;br /&gt;
* [http://www.erikbuchmann.de/ Erik Buchmanns Mikrocontroller-Seite] - Assemblerkurs und mehrere Projekte&lt;br /&gt;
* [http://www.holger-klabunde.de/projects/8051.htm Experimentierboard für 8051 Controller] von Holger Klabunde.&lt;br /&gt;
* [http://www.woe.de.vu/ World Of Electronics] - Projekte mit den 8051-Controllern von Atmel&lt;br /&gt;
* [http://www.thomas-wedemeyer.de/elektronik/8051/8051.html Controllerplatine mit SAB80C535]&lt;br /&gt;
* [http://www.maxim.ph.tc Selbstbau-Programmer] für 2051er&lt;br /&gt;
* [http://www.nomad.ee/micros/8052bas.html 8052 BASIC Projects] - IDE-Interface&lt;br /&gt;
* [http://home.t-online.de/home/s.holst/sh51/index.html Mikrokontroller sh51] Schaltplan fuer 80C535-Board&lt;br /&gt;
* 8051-Makroassembler [http://plit.de/asem-51/ ASEM-51] (Freeware)&lt;br /&gt;
* [http://sdcc.sourceforge.net/ SDCC - Small Device C Compiler] - freier ANSI-C compiler für Intel 8051, Maxim DS80C390 und Zilog Z80 kompatible Controller.&lt;br /&gt;
* [http://sdccokr.dl9sec.de/ The SDCC Open Knowledge Resource]&lt;br /&gt;
* [http://www.wickenhaeuser.de/ Wickenhäuser C Compiler] - Preisgünstiger C Compiler&lt;br /&gt;
* [http://home.tiscali.cz:8080/~cz056018/lanc_a.htm LANC-Remote] Projekt von Ji&amp;amp;#345;í &amp;amp;#352;mach zur Steuerung von Videorekordern oder Camcordern über das Control-L (LANC) Protokoll mit Hilfe eines AT89C2051.&lt;br /&gt;
* [http://www.microcontroller-starterkits.de Microcontroller-Starterkits] Starter-Kits für verschiedene Microcontroller (D) preisgünstige Platinen (ab 12,95 Euro für AT89S8252). Beim uC-Dualboard : Das Board ist nutzbar mit AVR-Controllern und 8051-Controllern!&lt;br /&gt;
&lt;br /&gt;
== MSP430 ==&lt;br /&gt;
* [http://www.mathar.com MSP430 Tutorials] - Tutorials, Anleitungen und viele Beispielprojekte mit dem MSP430-Mikrocontroller&lt;br /&gt;
* [http://www.student-zw.fh-kl.de/~stwi0001/imp/msp430/pwm430/index.htm Pulsweitenmodulation mit dem MSP430] - sehr ausführliche Einführung&lt;br /&gt;
* [http://www.thomas-wedemeyer.de/elektronik/msp430/msp430.html Kleine Projekte mit dem MSP430] - Schaltplan und Layout zu einem MSP430F149-Board und einem ADXL-G-Sensor mit MSP430&lt;br /&gt;
* [http://tinymicros.com/embedded/MSP430/ The MSP430 Bugspray Database] - umfangreiche Datenbank für Bugs in MSP430-Controllern&lt;br /&gt;
* [http://msp430.info MSP430.info] - Portalseite für MSP430; Info, Projekte (MIDI, USB)&lt;br /&gt;
* [http://groups.yahoo.com/group/msp430 Yahoo group MSP430] - lebhaftes Forum mit vielen MSP430-Experten&lt;br /&gt;
* [http://homepage.hispeed.ch/py430/mspgcc/ mps430-gdb und Eclipse] - Eine Anleitung von Chris Liechti&lt;br /&gt;
* [http://passworld.co.jp/ForumMSP430 Forum MSP430] - Projekte mit MSP430 (GPS, BlueTooth usw...)&lt;br /&gt;
* TI Design-WEttbewerb: http://www.designmsp430.com/View.aspx (dateien liegen evtl. in /projects/)&lt;br /&gt;
* [http://www.sics.se/project/mspsim MSPsim] - a Java-based simulator of MSP430 sensor network platforms (BSD License (revised))&lt;br /&gt;
* [http://develissimo.net/de/msp430entwicklung MSPGCC + Eclipse + msp430-gdbproxy / Linux / Debian / Ubuntu] - Anleitung / Tutorial zur Installation der MSPGCC Toolchain + Eclipse + msp430-gdbproxy für Linux / Debian / Ubuntu Lang=Deutsch und Englisch&lt;br /&gt;
&lt;br /&gt;
== ARM ==&lt;br /&gt;
&lt;br /&gt;
=== Herstellerseiten ===&lt;br /&gt;
* [http://www.arm.com ARM] - Entwickler des ARM-Prozessorkerns (kein Hersteller von ICs)&lt;br /&gt;
* [http://infocenter.arm.com ARM Infocenter] Sammlung Technischer Informationen&lt;br /&gt;
&lt;br /&gt;
* [http://www.analog.com/ Analog Devices] ADuC7xxx ARM7TDMI Serie unter &#039;&#039;Analog Microcontrollers&#039;&#039;&lt;br /&gt;
* [http://www.atmel.com/products/AT91/ Atmel AT91 Startseite]&lt;br /&gt;
* [http://www.at91.com AT91.COM] - Atmel ARM Informationsseite (Forum, Beispielcodes etc.)&lt;br /&gt;
* [http://www.cirrus.com/en/products/pro/techs/T7.html Cirrus Logic]&lt;br /&gt;
* [http://www.freescale.com/mac7100 Freescale MAC7100]&lt;br /&gt;
* [http://www.hilscher.com Hilscher netX] (ARM926 core)&lt;br /&gt;
* [http://www.intel.com/design/intelxscale/ Intel XSCALE Startseite], siehe auch [http://www.marvell.com/ Marvell]&lt;br /&gt;
* [http://www.luminarymicro.com/ Luminiary Micro] Controller mit Cortex M3 core&lt;br /&gt;
* [http://www.standardics.nxp.com/microcontrollers/ NXP (ehemals Philips) Microcontroller Startseite] für sämtliche Mikrocontroller (ARM7, MCS51 etc.), neben LPC2000, LPC3000 auch die LH7xxxx BlueStreak-Serie (ehemals Sharp Microelectronics)&lt;br /&gt;
* [http://www.lpc2000.com lpc2000.com] Infoseite fuer NXP (ex. Philips) LPC2000 und LPC3000&lt;br /&gt;
* [http://www.okisemi.com/eu/1.Products/ARM32bit.html OKI ARM-Controller Startseite]&lt;br /&gt;
* [http://www.samsung.com/Products/Semiconductor/ Samsung] ARM7/9 unter &#039;&#039;Mobile SoC&#039;&#039;&lt;br /&gt;
* [http://mcu.st.com/mcu/ STMicroelectronics (ST) Microcontroller Startseite] u.a. STR7, STR9, STM32 Support-Forum&lt;br /&gt;
* [http://www.ti.com/ Texas Instruments] TMS470 ARM7TDMI Serie&lt;br /&gt;
&lt;br /&gt;
=== Information (Foren, Mailinglisten, Linksammlungen) ===&lt;br /&gt;
* [http://www.neko.ne.jp/~freewing/cpu/arm_olimex/ Freewing Linksammlung] zu den NXP (ex. Philips) LPC-ARM7-Controllern (Assemblerbeispiele u.a. für Nokia 3310-GLCD)&lt;br /&gt;
* [http://www.open-research.org.uk/ARMuC ARM Microcontroller Wiki]&lt;br /&gt;
&lt;br /&gt;
* [http://tech.groups.yahoo.com/group/ADuC7000/ ADuC7000 Yahoo-Group]&lt;br /&gt;
* [http://www.at91.com AT91 Forum] (Atmel Rousset)&lt;br /&gt;
* [http://tech.groups.yahoo.com/group/AT91SAM/ AT91SAM Yahoo-Group]&lt;br /&gt;
* [http://en.mikrocontroller.net/forum/17 arm-elf-gcc WinARM Forum] (auch für Yagarto)&lt;br /&gt;
* [http://www.codesourcery.com/archives/arm-gnu/maillist.html Sourcery G++ Lite Edition User Forum/Mailing-List&lt;br /&gt;
* [http://tech.groups.yahoo.com/group/gnuarm/ GNUARM Yahoo-Group]&lt;br /&gt;
* [http://www.keil.com/forum/ Keil/ARM Forum]&lt;br /&gt;
* [http://groups.yahoo.com/group/lpc2000/ LPC2000 Yahoo-Group]&lt;br /&gt;
* [http://forum.sparkfun.com/ Sparkfun Foren]&lt;br /&gt;
* [http://mcu.st.com/mcu/modules.php?name=Splatt_Forums STMicroelectronis Forum]&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungswerkzeuge (Compiler/Assembler/Debugger/Tools) ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.st-angliamicro.com/software.asp Anglia Idealist IDE und Anglia Toolchain] GNU toolchain für Win32-hosts inkl. Beispielen für STR7, STR9 und STM32. IDE kostenlost aber registrierungspflichtig&lt;br /&gt;
* [http://www.codesourcery.com/gnu_toolchains/ Codesourcery] GNU Toolchains für ARM (Hosts: Linux, MS Windows, Solaris; Targets: arm-elf, arm-linux, SybianOS)&lt;br /&gt;
* [http://devkitpro.org/ devkitPro/devkitARM] GNU-Toolchain für MS-Windows &amp;quot;Hosts&amp;quot;. Vor allem auf GBA abgestimmt aber auch für andere ARM-Controller geeignet (arm-elf)&lt;br /&gt;
* [http://www.gnuarm.org GNU ARM] GNU Compiler-Toolchain für ARM mit binutils, gcc für C, C++, Java, newlib, gdb/Insight. Binaries für Linux und MS-Windows mit Cygwin&lt;br /&gt;
* [http://www.ghs.com/ Green Hills Software]&lt;br /&gt;
* [http://www.hitex.de Hitex] IDE für diverse Compiler, Debugger&lt;br /&gt;
* [http://www.iar.com IAR] Embedded Workbench, kommerzielle IDE/Compiler, codegrößenbeschränkte Evaluierungsversion verfügbar&lt;br /&gt;
* [http://www.isystem.com/ iSYSTEM] Integrated Development Environment, USB/JTAG interface, OnChip Emulation and Trace&lt;br /&gt;
* [http://www.keil.com Keil/ARM RVDK/uVision] kommerzielle IDE/Compiler, unterstützt zwei Compiler (ARM RealView, GNU/gcc), codegrößenbeschränkte Evaluierungsversion verfügbar (IDE/Compiler unbeschränkt für GNU), guter Debugger, guter Simulator (teilw. mit Hardwaresimulation) Simulator und Debugger in der Evaluierungsversion auch bei Nutzung der GNU-Toolchain auf 16kB beschränkt&lt;br /&gt;
* [http://mct.de/download.html#free MCT Demoversion C-Compiler fuer ARM und 68k] ARM C-Compiler basiert auf GCC laut Herstellerinformation jedoch mit Codegrößenbeschränkung &amp;lt;!-- etwas ungewöhnlich: Codegrößenbeschränkung bei GNU-Toolchain --&amp;gt;&lt;br /&gt;
* [http://www.mpeforth.com www.mpeforth.com] - A free Forth system with 125 page manual for all Philips LPC2xxx CPUs with at least 64k Flash and 16k RAM and cystal frequency of 10, 12, or 14.7456 MHz. &lt;br /&gt;
* [http://www.rowley.co.uk/ Rowley] Kommerzielle IDE für GNU-Compiler, eigene libc (nicht newlib), Debugger (inkl. gutem Support für Wiggler)&lt;br /&gt;
* [http://h-storm.tantos.homedns.org/gcc_arm.htm Tantos gcc for ARM Targets] eine weitere ARM-GNU-Toolchain für MS-Windows &amp;quot;Hosts&amp;quot; &lt;br /&gt;
* [http://www.yagarto.de Yagarto] GNU arm-elf-Toolchain, Eclipse, OpenOCD für Win32 inkl. Setup&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html#winarm WinARM] eine an WinAVR angelehnte Sammlung von Entwicklungswerkzeugen (binutils, arm-elf-gcc, newlib, &#039;&#039;newlib-lpc&#039;&#039;, Programmers Notepad, &#039;&#039;Beispiel-Makefiles und Beispielcode&#039;&#039;) für alle ARM-Controller. Beispiele für Philips LPC2000 und Atmel AT91SAM7S (ARM7TDMI) u.a.&lt;br /&gt;
* [http://rtlab.tekproj.bth.se/wiki/index.php/Dissy#Architecture_support Dissy] is a disassembler for Linux and UNIX which supports multiple architectures and allows easy navigation through the code. Dissy is implemented in Python and uses objdump for disassembling files.&lt;br /&gt;
&lt;br /&gt;
* [http://openocd.berlios.de/web/ OpenOCD] Open On-Chip Debugger: Schnittstelle (&amp;quot;gdb-Server&amp;quot;) zwischen Wiggler-komaptiblem JTAG-Interface und GNU-debugger (gdb/Insight-gdb), ebenfalls Unterstützung für JTAG-Hardware auf FTDI2232-Basis, Flash-Programmierfunktion für LPC2k, AT91SAM7S u.a.&lt;br /&gt;
* [http://macraigor.com/full_gnu.htm OCDLibRemote] Schnittstelle zwischen WIGGLER-kompatibler JTAG Hardware und dem GNU-Debugger (gdb)&lt;br /&gt;
* [http://gdb-jtag-arm.sourceforge.net/ GDB-JTAG-ARM] GDB JTAG Tools&lt;br /&gt;
* [http://jtagpack.sourceforge.net/ JTAG-Pack] GDB JTAG Tools&lt;br /&gt;
* [http://www.hjtag.com H-JTAG] RDI-Interface für Wiggler, Flash-Funktionen für diverse interne und externe Speicher&lt;br /&gt;
* [http://www.clibb.de/ lpc21isp] Flashutility für LPC21xx, ISP via &amp;quot;Bootloader&amp;quot; (&amp;quot;multiplattform&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
*http://www.abatron.ch Abatron] BDI1000 &amp;amp; BDI2000, On-Chip Debuggers für ARM, 68k, Coldfire uvm.&lt;br /&gt;
* [http://www.amontec.com Amontec] JTAGkey, JTAG-Adapter auf Basis des FTDI2232 &lt;br /&gt;
* [http://www.keil.com Keil/ARM ULINK/ULINK2/ULINK-ME] JTAG-Adapter, USB-Anschluss, wird von Keil uVision unterstützt, ULINK2 teilw. auch von Codesourcery G++ (lt. Hestellerangaben)&lt;br /&gt;
* [http://www.kristech.eu Kristech] USB-Scarab, JTAG Adapter, kommt mit eigener Debugger-UI, kompatibel zu Olimex&lt;br /&gt;
* [http://www.lauterbach.de Lauterbach] TRACE32 JTAG-Adapter, USB und Ethernet-Anschluss, eigene Software&lt;br /&gt;
* [http://www.olimex.com Olimex] JTAG-Adapter: Wiggler-Nachbau (ParPort) und  Adapter auf Basis des FTDI2232 (USB)&lt;br /&gt;
* [http://www.ronetix.at/peedi.html Ronetix Peedi]&lt;br /&gt;
* [http://www.segger.de Segger J-Link] JTAG-Adapter, USB-Anschluss, unterstützt z.B. von IAR, Keil uVision (via RDI) (OEM: IAR J-Link, SAM-ICE)&lt;br /&gt;
* [http://www.signalyzer.com/ Signalyzer] Signalyzer Tool, u.a. JTAG-Adapter auf Basis des FTDI2232&lt;br /&gt;
* [http://www.sinelabore.com sinelaboreRT] - generiert leicht lesbaren C-Code aus einer Zustandsmaschine. Die Generierung berücksichtig speziell die Bedürfnisse eingebetteter Echtzeitsysteme.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials und Beispiele ===&lt;br /&gt;
* [http://www.dreamislife.com/arm/ LPC210x ARM7 Microcontroller Tutorial] - Assembler-Beispiele (arm-elf-as) für das Olimex LPC-MT-Board (Philips LPC2106 ARM7TDMI)&lt;br /&gt;
* [http://re-eject.gbadev.org/index.php gcc-Assembler für ARM] - Befehlsübersicht&lt;br /&gt;
* [http://k2pts.home.comcast.net/gbaguy/gbaasm.htm GBA ASM Tutorial] - ARM7 Assembler Tutorial mit arm-elf-as (&amp;quot;gcc&amp;quot;) (Allgemein und GBA)&lt;br /&gt;
* [http://www.robsite.de/daten/tutorials/devgba/gba_asm1.html GBA Assembler Tutorial] - ARM7TDMI, Schwerpunkt auf GBA&lt;br /&gt;
* [http://www.sparkfun.com/tutorial/ARM/ARM_Cross_Development_with_Eclipse.pdf Eclipse+CDT+gnuarm-Tutorial]&lt;br /&gt;
* [http://mct.de/download/armsamples/map.html Beispiele in C, für ARM7-Controller von Philips und ADI]&lt;br /&gt;
* [http://www.embedded.com/design/opensource/201802580 Embedded.com: Building Bare-Metal ARM Systems with GNU] Teil 10, Links zu den Teilen 1-9 auf der Seite&lt;br /&gt;
&lt;br /&gt;
=== Projekte und Quellcodebibliotheken ===&lt;br /&gt;
* [http://hubbard.engr.scu.edu/embedded/arm/armlib/ Procyon ARMlib-LPC2100] - Treiber, Beispiele (Lizenz: GPL, kaum weiterentwickelt)&lt;br /&gt;
* [http://www.standardics.nxp.com/support/documents/?type=software NXP BlueStreak] Code für LH7xxxx (ehemals Sharp)&lt;br /&gt;
* [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html M. Thomas&#039; ARM Projekte] &amp;quot;Projectvorlagen&amp;quot; für AT91SAM7 und LPC2000 mit GNU-Toolchain Einsteiger-Projekte für AT91SAM7, LPC2000, ADuC7000 u.a. (u.a. Blinky, UART, Interrupt, C++, GLCD mit KS0108, DS18x20, DCF77, Anpassungen von FAT16/32-Libraries) &amp;lt;!-- noch mehr &amp;quot;Eigenwerbung&amp;quot; --&amp;gt;&lt;br /&gt;
* [http://mcu.st.com/ STMicro] Treiber und Beispiel für STR7, STR9 und STM32&lt;br /&gt;
* [http://www.gnuarm.com/~lpc2000/ Mirror der LPC2100-Group Dateien] (veraltet, aber ohne Yahoo-Account zugänglich.)&lt;br /&gt;
* [http://www.geocities.com/leon_heller/lpc2104.html Simple LPC210x Prototyping System]&lt;br /&gt;
* [http://wiki.sikken.nl/index.php?title=LPCUSB LPCUSB] - Open-source [[USB]] stack for the built-in USB controller in LPC214x microcontrollers von Bertrik Sikken. [http://lpcusb.cvs.sourceforge.net/lpcusb/host/benchmark/main.c?revision=1.2&amp;amp;view=markup Sample code]&lt;br /&gt;
* [http://www.olimex.com Olimex] Einige Beispiele auf den &amp;quot;Produktseiten&amp;quot; der ARM Boards.&lt;br /&gt;
* [[ARM MP3/AAC Player]]&lt;br /&gt;
* [http://www.jcwren.com/arm/ J.C. Wrens Beispielprojekt] für LPC214x&lt;br /&gt;
* [http://www.keil.com/download/list/arm.htm Beispiele von Keil] abgestimmt auf deren Boards und Realview-Toolchain, Portierung auf andere Boards und Compiler relativ einfach, Lizenz beachten.&lt;br /&gt;
* [http://www.luminarymicro.com/ Luminary Micro Driverlib] für Stellaris Cortex-M3&lt;br /&gt;
* [http://r2d2.stefanm.com/gps-tracker.html GPS-Tracker] mit Navigation auf LPC2103-Basis (Complier: GCC)&lt;br /&gt;
&lt;br /&gt;
=== Betriebssysteme ===&lt;br /&gt;
* [http://agnix.sourceforge.net/ Agnix]&lt;br /&gt;
* [http://sources.redhat.com/ecos/ eCos] - &amp;quot;Real-Time-Operating-System&amp;quot; o.a. auch für ARM7&lt;br /&gt;
* [http://www.freertos.org/ FreeRTOS (.org!)] - &amp;quot;Real-Time-Kernel&amp;quot; unter anderem für ARM7 (LPC2xxx) auch AVR, MSP430, &#039;51er&lt;br /&gt;
* [http://l4ka.org/ L4Ka]&lt;br /&gt;
* [http://www.toradex.com/colibri_downloads/Linux/readme.txt Linux 2.4.29 für Toradex Colibri] basierend auf Intel XScale PXA270&lt;br /&gt;
* [http://www.linux4sam.org Linux4SAM] Informationen, Anleitungen und Code zur Anwendung von Linux auf AT91SAM9xxx&lt;br /&gt;
* [http://www.freertos.com/ NicheTask] (URL ist www.freertos.com aber hat nichts mit FreeRTOS(.org) zu tun)&lt;br /&gt;
* [http://www.ethernut.de/en/software/index.html Nut/OS]&lt;br /&gt;
* [http://nuttx.sourceforge.net/ NuttX RTOS] (ARM7TDMI port for TI TMS320C5471 also called a C5471 or TMS320DM180).&lt;br /&gt;
* [http://www.phoenix-rtos.org/ Phoenix-RTOS]&lt;br /&gt;
* [http://picoos.sourceforge.net/ PicoOS]&lt;br /&gt;
* [http://prex.sourceforge.net Prex] is a portable real-time operating system for embedded systems. The small, reliable, and low power kernel is written in the C language based on microkernel design. The file system, Unix process, and networking features are provided by user mode tasks. (ARM, i386, geplant: MIPS, PowerPC, Hitachi-SH und Win32)&lt;br /&gt;
* [http://www.rtems.org/ RTEMS]&lt;br /&gt;
* [http://www.tnkernel.com/downloads.html TNKernel] - &amp;quot;Real-Time-Kernel&amp;quot; TNKernel ist ein kompakter und sehr schneller Echtzeitkernel unter anderem für ARM7 (Philips LPC2106/LPC21XX/LPC22xx, Samsung S3C44B0X, Atmel AT91SAM7S128, STMicroelectronics STR711FR2)&lt;br /&gt;
* [http://www.ucos-ii.com/ uC/OS-II RTOS]&lt;br /&gt;
&lt;br /&gt;
=== Hardware (Prototypen-Platinen etc.) ===&lt;br /&gt;
* [http://www.cpu-module.de/de/elektronik.html cpu-module.de] Module mit AT91RM9200, AT91SAM9261, RAM, Flash, USB, Ethernet, fast alle IOs zugänglich.&lt;br /&gt;
* [http://www.armkits.com/ Embest] Philips, Samsung und Atmel ARM Boards und Module, JTAG-Hard- und Software&lt;br /&gt;
* [http://www.waveplayer.de/ Embedded-Waveplayer] mit ARM7-Prozessor EP7309 (MIDI- und RS232-Steuerung)&lt;br /&gt;
* [http://www.embeddedartists.com/ Embedded Artists] bietet verschiedene preisgünstige Platinen (ab 25 Euro für LPC213x Familie)&lt;br /&gt;
* [http://www.hiteg.com Hiteg] SAMSUNG und Intel XScale basierende boards. (Deutsches Unternehmen in China)&lt;br /&gt;
* [http://www.hitex.de/ Hitex] Starter-Kits für Philips LPC2000, ST STR7, Atmel AT91M&lt;br /&gt;
* [http://www.iar.com/ IAR] Starter-Kits für Atmel, Oki, Philips, ST und TI &lt;br /&gt;
* [http://www.ic-board.de/index.php?cat=c12_ICswift-Module.html ic-board.de] Kommunikationsplattform auf Basis des AT91SAM7X256 mit Ethernet, USB, CAN und Funk Schnittstellen&lt;br /&gt;
* [http://www.keil.com/ Keil] Philips LPC2000 und ST STR7/9 Boards und Starter-Kits&lt;br /&gt;
* [http://www.lpctools.com/ LPCTools] bietet verschiedene Starter Kits für die LPC2000-Familie&lt;br /&gt;
* [http://www.makingthings.com/ MakingThings] Make Controller Kit (AT91SAM7X256)&lt;br /&gt;
* [http://mct.de/index.html MCT Paul und Scherer] Starterkits für ARM7 (NXP LPC2000, ADI ADUC7000)&lt;br /&gt;
* [http://shop.mikrocontroller.net Mikrocontroller.net Shop] Platinen mit AT91SAM7, LPC2xxx, JTAG&lt;br /&gt;
* [http://www.microcontroller-starterkits.de Microcontroller-Starterkits] Starter-Kits für verschiedene Microcontroller (D) preisgünstige Platinen (ab 12,95 Euro für LPC2129 und 2194) sowie Entwicklungsboard komplett bestückt&lt;br /&gt;
* [http://stores.ebay.de/Micro-Research Micro-Research] Development- und Header-Boards für LPC2000 und ADuC7000&lt;br /&gt;
* [http://www.olimex.com Olimex] Bulgarischer Anbieter günstiger ARM Prototypen- und Header-Boards (LPC2000, STR7, AT91SAM, ADI, TI, OKI u.a.)&lt;br /&gt;
* [http://www.propox.com/?lang=en Propox]&lt;br /&gt;
* [http://www.revely.com/ Revely] Evaluations- und Demo-Boards mit Sharp ARM Controllern. Teilweise mit SVGA-Anschluss.&lt;br /&gt;
* [http://www.skpang.co.uk/catalog/index.php SKPang electronics] Entwicklungsboards für diverse ARM7/9 (UK)&lt;br /&gt;
* [http://www.dilnetpc.com SSV Embedded Systems] bietet verschiedene Starter Kits für die verschiedenen DIL/NetPC u.a. (A)DNP/9200 SBC mit AT91RM9200&lt;br /&gt;
* [http://www.taskit.de taskit] [https://ssl.kundenserver.de/taskit.de/at91shop/shop_content.php?coID=10 Development- und Header-Boards für AT91SAM7S/X], AT91RM9200, AT91SAM9&lt;br /&gt;
* [http://www.toradex.com/e/products.html Toradex] Colibri: Intel XScale PXA270 DevKit (Schweiz)&lt;br /&gt;
&lt;br /&gt;
== [[PIC]] ==&lt;br /&gt;
&lt;br /&gt;
=== Herstellerseiten ===&lt;br /&gt;
* [http://www.microchip.com Microchip] Hersteller der PIC Microcontroller&lt;br /&gt;
* [http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en010014&amp;amp;part=SW006011 Microchip C18 Student Edition] - die &amp;quot;Student Edition&amp;quot; des Microchip C18 C Compilers für die PIC18 Serie ist kostenlos verfügbar.&lt;br /&gt;
* [http://www.powercontact.de Systemtechnik Leber] Offizieller Microchip Design Partner für professionelles Microcontroller Design und Hersteller von Leistungsstellern, Thyristorstellern und Halbleiterelais.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungstools / Tutorials / Foren  ===&lt;br /&gt;
* [http://www.sprut.de/electronic/pic/index.htm PIC-Microchip-Controller (www.sprut.de)] Diese Seite soll dem Anfänger die ersten Schritte in die Welt der Microcontroller der Firma Microchip erleichtern. Betrachtet werden die 14-Bit-Controller der Serien PIC16Fxxx bzw PIC12Fxxx.&lt;br /&gt;
* [http://www.fernando-heitor.de PIC: Programmierung in CCS (www.fernando-heitor.de)] Dies ist eine weitere Seite die dem Anfänger, der sich mit PICs beschäftigt, auf die Beine hilft. Sie befasst sich hauptsächlich mit dem CCS-Compiler und hat dazu ein sehr gutes Tutorial. Ausserdem bietet die Seite ein Forum speziell für PIC Mikrocontroller.&lt;br /&gt;
* [http://www.cc5x.de CC5X] Programmierkurs für PIC-Microkontroller in C (CC5X Compiler)] Programmierkurs mit Beispielen und Schaltplänen, fertige Hardware- und Softwarelösungen. In diesem Kurs sind auch einige Unterprogramme detailliert erklärt.&lt;br /&gt;
* [http://www.microchipc.com/ MicrochipC.com] Programmieren von PIC-Microcontrollern mit C. (Enthält auch Links und Bootloader für diverse PICs.)&lt;br /&gt;
* [http://www.amodio.biz/projects/PIC10BaseT/index.html Internetworking with Microchip Microcontrollers - PIC18F4620+ENC28J60]&lt;br /&gt;
* [http://pic18fusb.online.fr/wiki/wikka.php?wakka=WikiHome Wiki about Microchip USB PIC] (PIC18F2550, PIC18F4550...)&lt;br /&gt;
* [http://piklab.sourceforge.net/ Piklab] is an integrated development environment for applications based on Microchip PIC and dsPIC microcontrollers similar to the MPLAB environment. It integrates with several compiler and assembler toolchains (like gputils, sdcc, c18) and with the simulator gpsim. It supports the most common programmers (serial, parallel, ICD2, Pickit2, PicStart+) and debuggers (ICD2).&lt;br /&gt;
* [http://www.members.aon.at/electronics/pic/picpgm/_main.html PICPgm - Free PIC Development Programmer for Windows] Einfacher PIC Programmer für Windows. Unterstützt eine Vielzahl von PIC-Chips und wird ständig erweitert.&lt;br /&gt;
* [http://www.stolz.de.be InCircuit-Programmer und -Debugger (www.stolz.de.be)] Einfacher Nachbau des Microchip ICD2s. Zum Programmieren und Debuggen.&lt;br /&gt;
* [http://www.winpicprog.co.uk WinPicProg] Programmer und Tutorials für Anfänger von Nigel Goodwin (Englisch)&lt;br /&gt;
* [http://www.tigal.com EasyPIC3, EasyPIC4, Easy8051A, EasyAVR, Easy-was-weiss-ich (www.tigal.com)] - Distributor für Produkte von [http://www.mikroelektronika.co.yu mikroelektronika] und weiteren Herstellern&lt;br /&gt;
*[http://www.pro-zukunft.de Pro Zukunft] Evaluation-Board für PIC16F84A, hands-on-training und Print-Lehrgang. Für Schulen, Ausbildungsbetriebe &amp;amp; Hobbyelektroniker.&lt;br /&gt;
* [http://www.wselektronik.at www.wselektronik.at] Bausatz für &amp;quot;Full Speed ICD2&amp;quot; (USB2.0, Debugger, Programmer) oder Fertiggerät erhältlich.&lt;br /&gt;
* [http://www.uchobby.com/index.php/2008/04/19/pic-development-linux-style/ How to setup for PIC microcontroller development on Linux] von Steven Moughan&lt;br /&gt;
&lt;br /&gt;
=== Projektsammlungen/Einzelprojekte ===&lt;br /&gt;
* [http://www.Firmware-On-Demand.com Firmware-On-Demand] Umfangreiche Firmware-Bibliothek. &lt;br /&gt;
* [http://www.picguide.org PIC Guide] Eine große Sammlung von PIC-Projekten für den Anfänger&lt;br /&gt;
* [http://www.rentron.com www.rentron.com] Anfänger-taugliche Projekte für PIC und [[8051]] von Reynolds Electronics (Englisch)&lt;br /&gt;
* [http://www.ing-pfenninger.ch/artikel.html PIC-Projekte] Einige PIC-Projekte zum Nachbauen wie IR-Lichtschranke, Frequenzzähler.&lt;br /&gt;
* [http://mondo-technology.com/ SuperProbe] - Logic Probe,(Auf der linken Seite ganz oben) Logic pulser, Frequency Counter, Event Counter, Voltmeter, Diode Junction Voltage, Capacitance Measurement, Inductance Measurement, Signal Generator, Video Patern, Serial Ascii, Midi Note, R/C Servo, Square Wave, Pseudo Random Number, ir38, PWM in einem... (PIC16F870)&lt;br /&gt;
* [http://www.circuitcellar.com/microchip2007/ Microchip 16-Bit Embedded Control 2007 Design Contest] bei [http://www.circuitcellar.com/ Circuit cellar]&lt;br /&gt;
* [http://mondo-technology.com/ Mondo Technologiy] Grosse Ansammlung von PIC-Projekten&lt;br /&gt;
* [http://micrognurtos.sourceforge.net uGNU/RTOS] is a microcontroller-targeted serial real time operating system. It has been ported to USART capable Microchip PIC16 devices. It supports I/O operations and some internal registry operations. The user can interact with the chip through the RS-232 serial cable and a shell. The user can type a small list of commands and see the results on the chip&#039;s outputs. (LGPL)&lt;br /&gt;
&lt;br /&gt;
== [[Z8]] ==&lt;br /&gt;
* [http://www.z8micro.com/forum/ Z8 Encore! Microcontroller Discussion Forum - Dedicated to the ZiLOG Z8 Encore! Microcontroller] Ein der Z8 Encore!-Mikrocontrollerfamilie gewidmetes Diskussionsforum (in Englisch).&lt;br /&gt;
* [http://groups.yahoo.com/group/z8encore/ Yahoo! Groups : z8encore] Yahoo-Gruppe, die sich mit den Z8 Encore! Mikrocontrollern beschäftigt (Anmeldung bei Yahoo erforderlich).&lt;br /&gt;
&lt;br /&gt;
== Programmierbare Logik ([[CPLD]]/[[FPGA]]/[[GAL]]) ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.opencores.org/ OpenCores.org], VHDL Sourcen&lt;br /&gt;
* [http://www.fpga4fun.com/ fpga4fun], umfangreiche Seite mit Einführung und Beispielen, berücksichtigt Xilinx &amp;amp; Altera&lt;br /&gt;
* [http://opencollector.org/history/freecore/ Freecore], unter &#039;Module library&#039; gibt&#039;s einige freie Designs&lt;br /&gt;
* [http://www.cmosexod.com/ CMOSExod], Designs unter &#039;Free IP&#039;&lt;br /&gt;
* [https://digilent.us/ Digilent], Hersteller verschiedener FPGA/CPLD-Boards (u.a. Xilinx Spartan Starter Kit)&lt;br /&gt;
* [http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;amp;CategoryNo=39 Terasic], Anbieter von Altera FPGA-Boards&lt;br /&gt;
* [http://shop.trenz-electronic.de/catalog/ Trenz Elektronik], verkauft verschiedene FPGA/CPLD-Boards&lt;br /&gt;
* [http://www.xess.com/index.html XESS], Anbieter von FPGA-Boards (Xilinx), unter Support gibts es eine Menge Beispiele&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm Private Seite von John Kent], enthält eine Menge Links und auch einige Designs&lt;br /&gt;
* [http://www.mediatronix.com/Tools.htm Mediatronix tools], Picoblaze und DSP tools&lt;br /&gt;
* [http://www.ixo.de/info/usb_jtag/ ixo.de usbjtag] - USB-JTAG Adapter, fast kompatibel zu Altera USB-Blaster, wahlweise basierend auf FT245+CPLD oder Cypress FX2 Controller&lt;br /&gt;
* [http://www.fpgacpu.org/links.html FPGA CPU Links]&lt;br /&gt;
* [http://www.fpga-forum.com/wbb Forum mit allgemeinen Diskussionen zum Thema FPGA und FAQ&#039;s speziell zu den Cesys FPGA Karten]&lt;br /&gt;
* [http://www.cesys.biz Online Shop für Cesys FPGA Karten]&lt;br /&gt;
&lt;br /&gt;
== DSP ==&lt;br /&gt;
&lt;br /&gt;
=== Embedded Linux &amp;amp; DSP ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tetrix-systems.de/embedded.html combined embedded Linux-DSP Solutions]&lt;br /&gt;
&lt;br /&gt;
=== ADSP-2181 / EZ-Kit Lite ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ece.rutgers.edu/ftp/sjo/ezkitl/ezkitl.html ADSP-2181 Experiments]&lt;br /&gt;
* [http://www.dce.bg/~vladitx/adsp2181/ Music synthesizer and guitar effects, ADSP-2181 disassembler]&lt;br /&gt;
* [http://www.gweep.net/~shifty/ezkit/ EZ-Kit Lite Experimenters&#039; Gathering]&lt;br /&gt;
* [http://www.hta-bi.bfh.ch/~ctr/dsp/adspcode.htm Example programs for ADSP2181]&lt;br /&gt;
* [http://web.archive.org/web/20011030073105/www.geocities.com/SiliconValley/Bridge/6581/21xxdsp.html Analog Devices 21xx DSP Underground Appnote Index]&lt;br /&gt;
* [http://yves_c.tripod.com/EzKit/ Building an audio effect or a music generator using a DSP evaluation board.]&lt;br /&gt;
* [http://www.wau.nl/hemeltje/temporary/personal/adsp/adsp.html ADSP21xx Application notes]&lt;br /&gt;
* [http://www.psionics.demon.co.uk/mp3/ Hardware Assisted Playback of Compressed Audio.]&lt;br /&gt;
* [http://www3.telus.net/sharpshin/ Open21xx] - open source assembler tool suite&lt;br /&gt;
&lt;br /&gt;
=== Misc. ===&lt;br /&gt;
&lt;br /&gt;
* [http://open.neurostechnology.com/node/1020 TI c54x DSP  Compilertools (ohne Debugger)] frei für Open Source Projekte.&lt;br /&gt;
&lt;br /&gt;
== Interfaces &amp;amp; Protokolle ==&lt;br /&gt;
&lt;br /&gt;
=== iPod ===&lt;br /&gt;
* [http://ipodlinux.org/IPod_to_T%26A_remotecontrol_adapter IPod to T&amp;amp;A remotecontrol adapter] ([[PIC]]-Projekt)&lt;br /&gt;
&lt;br /&gt;
=== [[RFID]] ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.mwjournal.com/journal/article.asp?HH_ID=AR_905 Radio Frequency Identification: Evolution of Transponder Circuit Design] - Übersichtsartikel aus dem Microwave Journal&lt;br /&gt;
* [http://www.foebud.org/rfid Die StopRFID-Seiten des FoeBuD e.V.]&lt;br /&gt;
* [http://www.rfzone.org/free-rf-ebooks/ PDF-Bücher (englisch) ]- Bücher über RF, Antennen und elektromagnetische Wellen.&lt;br /&gt;
&lt;br /&gt;
* http://cq.cx/proxmark3.pl Jonathan Westhues RFID Leser/Schreiber/Cloner&lt;br /&gt;
&lt;br /&gt;
http://load2load.info Free views Video Clips&lt;br /&gt;
&lt;br /&gt;
==== 134,2 kHz RFID ====&lt;br /&gt;
&lt;br /&gt;
==== 13,56 MHz RFID ====&lt;br /&gt;
* [http://www.openpcd.org/ OpenPCD - a free 13.56MHz RFID reader design] for Proximity Coupling Devices (PCD) based on 13,56MHz communication. This device is able to screen informations from Proximity Integrated Circuit Cards (PICC) conforming to vendor-independent standards such as ISO 14443, ISO 15693 as well as proprietary protocols such as Mifare Classic. (AT91SAM7S128 [[ARM]] Projekt)&lt;br /&gt;
* [http://www.rf-dump.org/ RFDump] is a backend GPL tool to directly interoperate with any RFID ISO-Reader to make the contents stored on RFID tags accessible. (Linux)&lt;br /&gt;
&lt;br /&gt;
==== 2,4 GHz RFID ====&lt;br /&gt;
* [http://www.openbeacon.org/ OpenBeacon] - a free active 2.4GHz beacon design. (Reader: USB oder Ethernet; Tags: RF_Chip: NRF24L01, PIC16F684)&lt;br /&gt;
&lt;br /&gt;
=== [[DMX512]] ===&lt;br /&gt;
* [http://www.soundlight.de/techtips/dmx512/dmx512.htm DMX-512 - was ist das?] Eine Übersicht von SOUNDLIGHT.&lt;br /&gt;
* [http://www.oksidizer.com/electronic/spp2dmx/index_en.html OksiD DMX 3/1 is a Standard Parallel Port DMX 512 interface for IBM compatible PCs]. Drei Output Universe und ein Input Universe (Universe = 512 channels). Open project. All source code and schematics are available for free. &lt;br /&gt;
* [http://www.usbdmx.com/usb_dmx_interface.html USB DMX Interface revision 1.3] - opto isolated, bus powered, DMX512 from/to [[USB]]interface with both in and out universes. Cheap and simple to build.&lt;br /&gt;
* [http://www.dmx512-online.com/ Ujjal&#039;s DMX512 Seite]&lt;br /&gt;
* [http://llg.cubic.org/dmx4linux/ DMX4Linux 2.6] - A DMX device driver package for Linux (incl. hardware schematics with TI [[MSP430]])&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
* [http://www.taelektroakustik.de/deu/index.htm T&amp;amp;A Kommandos] - &#039;&#039;&#039;RC&#039;&#039;&#039; und &#039;&#039;&#039;RCII&#039;&#039;&#039; Kommandoset der Philips PRONTO Familie zur Steuerung von Audiogeräten. Dokumentation siehe unter Downloads.&lt;br /&gt;
&lt;br /&gt;
== Leiterplattenhersteller ==&lt;br /&gt;
&lt;br /&gt;
siehe [[Platinenhersteller|Platinenhersteller]]&lt;br /&gt;
&lt;br /&gt;
== Schulungen (Online) ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.esacademy.com/myacademy/ www.esacademy.com] (engl.) - C, CAN, I²C, BlueTooth, PWM, USB, 51LPC, ARM (Einführung)&lt;br /&gt;
* [http://www.elprak.ch Elektronik in der Praxis] Präsentationen zu verschiedenen Themen der Elektronik in der Praxis. Lötvideo, das den zeitlichen Ablauf beim Löten anschaulich darstellt.&lt;br /&gt;
* [http://www.national.com/onlineseminar/ www.national.com] - Amplifiers, Audio, Data Acquisition, Die Products, Displays, Interface, Microcontrollers, Military/Aerospace, Power, Thermal Management, Wireless&lt;br /&gt;
* [http://www.circuitrework.com Circuit Technology Center] - Surgeon grade rework and repair, by the book and guaranteed. Deeplink: [http://www.circuitrework.com/guides/guides.shtml Guides]&lt;br /&gt;
* [http://www.onlinetutorials.de/index.htm onlinetutorials.de] - Linksammlung zu Tutorials für höhere Programmiersprachen ([[HLL]]) wie C, C++, Java, BASIC, Perl, PHP, ...&lt;br /&gt;
* [http://www.awce.com/classroom/ AWCE Interactive Classroom] - Embedded Systems (Using the APP-IV with GCC, Getting Started with the PIC 18F Family), Electronics (CLARC/HBSIG DSP Study Group, Basic Circuits), RoadMap to Programmable Logic&lt;br /&gt;
* [http://www.ibiblio.org/kuphaldt/socratic/ Socratic Electronics] (englisch)&lt;br /&gt;
* [http://www.embedded.com/design/multicore/201200638;jsessionid=4T1T0OZQW4PFSQSNDLRSKH0CJUNN2JVN?printable=true The basics of programming embedded processors] von Wayne Wolf. Neun Artikel bei embedded.com (englisch)&lt;br /&gt;
* [http://webcast.berkeley.edu/course_details.php?seriesid=1906978507 EE 42/EE 100 Introduction to Digital Electronics] - Webcast, Spring 2008 (englisch)&lt;br /&gt;
* [http://freevideolectures.com freevideolectures.com] - Webcasts zu  naturwissenschaftlichen Theman (englisch)&lt;br /&gt;
* [http://www.circuitsage.com/ Circuit Sage], a complete source of information to help you design circuits fast. (Linksammlung zu Software, Artikeln Büchern und Websites)&lt;br /&gt;
&lt;br /&gt;
== Skripte ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.janson-soft.de/skripte/index.html Linksammlung von Volker Lange-Janson]&lt;br /&gt;
* [http://wwwex.physik.uni-ulm.de/lehre/physikalischeelektronik/phys_elektr/phys_elektr.html Physikalische Elektronik und Messtechnik] von Othmar Marti und Dr. Alfred Plettl, Universität Ulm&lt;br /&gt;
&lt;br /&gt;
== Messequipment ==&lt;br /&gt;
&lt;br /&gt;
=== Logikanalyse ===&lt;br /&gt;
* [http://www.pctestinstruments.com Intronix LogicPort], Günstiger, aber sehr leistungsfähiger Logikanalysator mit USB-Anschluß an PC (34Ch, 500MHz Timing, 34 x 2kSa mit Kompression, ca. 235 Euro [http://www.shop.display3000.com/pi21/pi28/pd104.html hier])&lt;br /&gt;
* [http://www.tech-tools.com/dv_main.htm TechTools DigiView], Günstiger Logikanalysator mit USB-Anschluß an PC (18Ch, 100MHz Timing, 128kSa mit Kompression,  [http://elmicro.com/de/digiview.html ca. 430Euro])&lt;br /&gt;
* [http://www.tribalmicro.com/logic_an/ Tribalmicro], PC hosted LA (32ch, 40MHz Timing, 128kSa, ca. 1700$)&lt;br /&gt;
* [http://www.nci-usa.com/frame_products_overview.htm NCI GoLogic], Logikanalysator mit USB-Anschluß an PC (34 oder 72Ch, 500MHz Timing, 1 oder 2MSa, ca. 3000..5500$)&lt;br /&gt;
* [http://www.tek.com/products/logic_analyzers/index.html Tektronix], Verschiedene Geräte, standalone oder modular (ab 34ch, 2GHz Timing, ab 512kSa, gut und teuer)&lt;br /&gt;
* [http://www.home.agilent.com/DEger/nav/-536902443.0/pc.html Agilent], Verschiedene Geräte, standalone, modular oder PC-hosted (ab 34ch, ab 800MHz timing, ab 256kSa, gut und teuer)&lt;br /&gt;
* [http://www.sump.org/projects/analyzer/ Sumps LA], günstiges Projekt für einen LA basierend auf einem Digilent Spartan Board (32ch, 100MHz Timing, 256kSa, Kosten Digilent Board ca. 100$ + Versand/Zoll)&lt;br /&gt;
* [http://www.meilhaus.de/produkte/usb-mobile-messtechnik/?user_produkte%5BPATTR%5D=HPG_3-UPG1_3-UPG2_2&amp;amp;user_produkte%5BPR%5D=8&amp;amp;cHash=2c8edb93e2 Meilhaus Electronic - MEphisto Scope UM203] Robustes, mobiles 16 bit Kombi-Instrument 7 Mess-Geräte in einem! (ab 348€)&lt;br /&gt;
* [http://www.hacker-messtechnik.de/13722/59001.html TravelLogic TL2x36], Logikanalysator zum Anschluß an PC über USB, (36ch, 4GHz timing, 200MHz state, Speicher bis 72MBit, Preis ab ca. 500,- netto)&lt;br /&gt;
* [http://www.inovaflex.de/index.html Bus und Logic Analyzer] 100MHz Samplerate und integrierten SPI, I²C, CAN Interpreter, erweiterbar als Oszilloskop&lt;br /&gt;
&lt;br /&gt;
* Eine Übersicht über verschiedene Selbstbauprojekte: [[Logic_Analyzer]]&lt;br /&gt;
&lt;br /&gt;
=== Oszilloskope ===&lt;br /&gt;
&lt;br /&gt;
siehe die separate [http://www.mikrocontroller.net/articles/Oszilloskop Seite] zum Thema&lt;br /&gt;
&lt;br /&gt;
=== Generatoren ===&lt;br /&gt;
[http://www.meilhaus.de/produkte/mess-und-steuer-karten/?user_produkte%5BPR%5D=23&amp;amp;cHash=64a269a3c6 Meilhaus Electronic - ME-6x00] Waveform-Generator - potentialfrei isolierte 16 bit Analog-Ausgabe-Karte (ab EUR 1138,00)&lt;br /&gt;
&lt;br /&gt;
== Vermischtes == &lt;br /&gt;
&lt;br /&gt;
=== Foren ===&lt;br /&gt;
* [http://www.sparkfun.com/cgi-bin/phpbb/ Spark Fun Electronics] MicroController Ideas and Support (Englisch) ([[AVR]], [[PIC]], [[MSP]], [[ARM]], OpenOCD)&lt;br /&gt;
* [http://www.edaboard.com/ EDAboard.com] International Electronics Forum Center (Englisch)&lt;br /&gt;
* [http://stsboard.de STS Reparatur Forum] Forum für Radio und Fernsehtechniker&lt;br /&gt;
* [http://formu.iwenzo.de Elektronik Reparatur Forum] Informationselektroniker Reparatur Forum&lt;br /&gt;
&lt;br /&gt;
=== Projektsammlungen ===&lt;br /&gt;
Meist in Englisch. &lt;br /&gt;
* [http://circuitscout.com/ Circuit Scout] - Online Suchmaschine&lt;br /&gt;
* [http://www.epanorama.net ePanorama.net]&lt;br /&gt;
* [http://www.commlinx.info Electronic Schematics] from CommLinx Solutions Pty Ltd&lt;br /&gt;
* [http://www.discovercircuits.com Discover Circuits] a collection of 25000+ electronic circuits or schematics&lt;br /&gt;
* [http://www.beyondlogic.org/ BeyondLogic.org] Diverse Mikrocontroller und Interfacing Projekte&lt;br /&gt;
* [http://www.uoguelph.ca/~antoon/circ/circuits.htm Circuits for the Hobbyist] by VA3AVR&lt;br /&gt;
* [http://www.stefpro.de/ StefPro.de] Diverse Projekte und Datenblattsammlung nach Kategorien, Microcontroller, Digital und Analog... Sowie Tutorial &amp;quot;Grundlagen der Bestückung von Platinen&amp;quot; und anderes Wissen&lt;br /&gt;
* [http://www.schaltplaene-online.de/ www.schaltplaene-online.de] Umfangreiche Linksammlung zu Schaltplänen aller Art&lt;br /&gt;
* [http://www.avr-projects.info www.avr-projects.info] Liste mit AVR-Projekten, die von jedem Besucher erweitert werden kann (wiki like)&lt;br /&gt;
* [http://www.halloweenmonsterlist.info/ MoNsTeRlIsT of Halloween Projects]&lt;br /&gt;
&lt;br /&gt;
=== Referenzen, Beschreibungen, Standards ===&lt;br /&gt;
* Extraseite: [[Datenblätter]]&lt;br /&gt;
* [http://www.technick.net Technik.Net] Pinouts, Circuits and Guides&lt;br /&gt;
* [http://pinouts.ru/ pinout.ru] und [http://www.hardwarebook.info/ hardwarebook.info] - Online handbooks of hardware pinouts, cables schemes and connectors layouts&lt;br /&gt;
* [http://www.networktechinc.com/technote.html Keyboard, Monitor &amp;amp; Mouse Pinouts] for PC, SUN, MAC, USB, FireWire, RS232, Digital Flat Panel and EVC configurations&lt;br /&gt;
* [http://www.q1.fcen.uba.ar/materias/iqi/joygus/tvgames.html Special joysticks used in TV games]&lt;br /&gt;
* [http://www.cs.net/lucid/intel.htm Intel-Hex-Format]&lt;br /&gt;
* [http://home.teleport.com/~brainy/fat32.htm FAT32 Structure Information] - Written by Jack Dobiash&lt;br /&gt;
* [http://www.pjrc.com/tech/8051/ide/fat32.html Understanding FAT32 Filesystems] mit Beispielen (engl.)&lt;br /&gt;
&lt;br /&gt;
=== Online-Bücher ===&lt;br /&gt;
* [http://www.allaboutcircuits.com/ All About Circuits] - Series of online textbooks covering electricity and electronics. The information provided is great for both students and hobbyists who are looking to expand their knowledge in this field. (Englisch)&lt;br /&gt;
* http://www.computer-books.us/ - überwiegend zu höheren Programmiersprachen. Englisch.&lt;br /&gt;
* [http://www.vias.org/feee/index.html FEEE - Fundamentals of Electrical Engineering and Electronics]&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C, Second Edition (1992)]&lt;br /&gt;
&lt;br /&gt;
=== Bedienungsanleitungen / Manuals ===&lt;br /&gt;
* [http://bama.edebris.com/manuals/ BAMA Archiv] &lt;br /&gt;
* [http://www.big-list.com/ Big-List.com] - This is a directory of over 600 dealers in used high technology equipment. Most deal in used electronic test equipment or semiconductor production equipment. Included are dealers in related high technology items, rental companies, equipment auction sites, test equipment manual dealers, foreign (non-U.S.) used equipment dealers, cal labs, and repair services.&lt;br /&gt;
&lt;br /&gt;
=== Ungewöhnliche Basteleien (Hacks) ===&lt;br /&gt;
Auf eigene Gefahr und nicht immer ganz ernst... Meist in Englisch. &lt;br /&gt;
&lt;br /&gt;
* Metablogs (tägliche News)&lt;br /&gt;
** [http://www.makezine.com/ Makezine] und [http://hackszine.com/ Hackszine]&lt;br /&gt;
** [http://www.electronics-lab.com/blog/ Electronics-Lab] und [http://www.projects-lab.com Projects-Lab] und [http://www.circuits-lab.com Circuits-Lab] ...&lt;br /&gt;
** [http://www.hackaday.com/ Hack a Day]&lt;br /&gt;
** [http://www.hackedgadgets.com/ HackedGadgets]&lt;br /&gt;
** [http://www.hack247.co.uk/ Hack247]&lt;br /&gt;
** [http://www.electronicsinfoline.com/ Electronics Infoline]&lt;br /&gt;
** [http://www.uchobby.com/ uC Hobby]&lt;br /&gt;
** ([http://www.diylive.net/ DIY Live])&lt;br /&gt;
&lt;br /&gt;
* Foren&lt;br /&gt;
** [http://www.fingers-welt.de/home.htm Fingers elektrische Welt]&lt;br /&gt;
** [http://forum.hackedgadgets.com/ HackedGadgets Forum]&lt;br /&gt;
** [http://stsboard.de Reparatur Forum]&lt;br /&gt;
** [http://camerahacking.com camerahacking Forum]&lt;br /&gt;
&lt;br /&gt;
* Projektsammlungen&lt;br /&gt;
** Final Projects der Kurse [http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/  ECE476] (Microcontroller Design) und [http://instruct1.cit.cornell.edu/courses/ece576/FinalProjects/ ECE576] (Advanced Microcontroller Systems on a Programmable Chip) an der Cornell University &lt;br /&gt;
&lt;br /&gt;
* DIY-Anleitungen&lt;br /&gt;
** [http://www.instructables.com/ instructables]&lt;br /&gt;
** [http://www.scitoys.com/ Scitoys] You Can Make With Your Kids&lt;br /&gt;
&lt;br /&gt;
* Mix&lt;br /&gt;
** [http://www.evilmadscientist.com Evil Mad Scientist Laboratories] - u.a. The Flying Spaghetti Monster, on toast ;-)&lt;br /&gt;
** [http://home.earthlink.net/~lenyr/index.html Spark, Bang, Buzz and Other Good Stuff] ([http://www.sparkbangbuzz.com Neue Sachen])&lt;br /&gt;
** [http://www.electricstuff.co.uk/ Mike&#039;s Electric Stuff] - Antique Glass, Tesla coils and high-voltage stuff, Lasers&lt;br /&gt;
** [http://electricity.pbwiki.com/ DHS electricity]&lt;br /&gt;
** [http://www.elephantstaircase.com/wiki/index.php?title=Main_Page Elephant Staircase]&lt;br /&gt;
** [http://mycpu.eu Eine selbstgebaute CPU aus TTL-Gattern]&lt;br /&gt;
** [http://www.knollep.de/ Knolles Bauanleitungen]&lt;br /&gt;
&lt;br /&gt;
=== Zeitschriften über Elektronik und µC ===&lt;br /&gt;
* [http://www.embedded.com embedded.com] - Hauptaugenmerk auf die Philosophie drumherum&lt;br /&gt;
* [http://www.siliconchip.com.au/ Silicon Chip] - Freie Artikel unter &#039;&#039;Free Preview&#039;&#039;&lt;br /&gt;
* [http://www.circuitcellar.com/ Circuit Cellar] - Freie Artikel unter &#039;&#039;Digital Library&#039;&#039;&lt;br /&gt;
* [http://www.elektronikpraxis.vogel.de/themen/hardwareentwicklung/mikrocontrollerprozessoren/ Elektronikpraxis - Das professionelle Elektronikmagazin]&lt;br /&gt;
* [http://www.funkamateur.de/ FUNKAMATEUR] - Elektronik, Amateurfunk, CB-Funk u. v. a. m.&lt;br /&gt;
* [http://www.edn.com/ EDN] (etwas schwer zu finden, aber lesenswert: die [http://www.edn.com/index.asp?layout=news&amp;amp;spacedesc=designIdeas Design Ideas])&lt;br /&gt;
* [http://www.franzis.de/elo-das-magazin ELO - Das Magazin] für Elektronik-Einsteiger&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS&amp;diff=28426</id>
		<title>GPS</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS&amp;diff=28426"/>
		<updated>2008-06-11T23:47:13Z</updated>

		<summary type="html">&lt;p&gt;R2d2: Neuer Link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;Global Positioning System&amp;quot; - satellitengestütztes System zur weltweiten Ortsbestimmung.&lt;br /&gt;
&lt;br /&gt;
Das GPS Satellitensystem wurde vom US Verteidigungsministerium installiert, um die Steuerung von Militärfahrzeugen und Waffensystemen zu vereinfachen. Die (teilweise) offengelegte Spezifikation machte das System aber auch zivil nutzbar und - vor allem auf Drängen der amerikanischen Auto-Industrie - wurde es mittlerweile von einem absichtlich aufgeprägten Fehlerwert(*1) befreit, so dass Positionsbestimmungen auch bei moderatem Aufwand mit einer Genauigkeit im Bereich weniger Meter möglich sind (vorher lag die Ungenauigkeit bei etwa 30..100 Meter).&lt;br /&gt;
&lt;br /&gt;
Anders als die früher verbreiteten, &amp;quot;aktiven&amp;quot; Systeme(*2), bei denen zum Beispiel ein Flugzeug oder Schiff zur Standardortbestimmung mit einem Funk-&#039;&#039;&#039;Sender&#039;&#039;&#039; ausgestattet war, der dann von (mindestens zwei) stationären Empfangsstationen &amp;quot;angepeilt&amp;quot; wurde, arbeitet GPS als &amp;quot;passives&amp;quot; System: Ein GPS-Gerät ist ein Funk-&#039;&#039;&#039;Empfänger&#039;&#039;&#039;, welcher aus den Laufzeitunterschieden der von den GPS-Satelliten ausgestrahlten Positions- und Uhrzeit-Signalen seine eigene Position berechnet.&lt;br /&gt;
Ein GPS-Gerät kann daher nicht &amp;quot;angepeilt&amp;quot; werden, und so muss z.B. eine auf GPS basierende KFZ-Diebstahlsicherung stets durch einen Sender (etwa ein Handy) ergänzt werden, damit das Auto seinen Standort an eine Überwachungszentrale melden kann.&lt;br /&gt;
&lt;br /&gt;
Mit der zunehmenden Nachfrage nach GPS-Chipsets durch die Auto-Industrie ist davon auszugehen, dass der Aufpreis, zu dem ein GPS-System in eine Mikrocontroller-Applikation integriert werden kann, rapide fallen wird. GPS wird daher möglichwerweise in wenigen Jahren als &amp;quot;kleiner Zusatznutzen&amp;quot; in vielen technischen Geräten zur Verfügung stehen, ähnlich wie heute der Empfang des DCF77-Signals zur Uhrensteuerung.&lt;br /&gt;
&lt;br /&gt;
=== GPS als hochgenaue Referenzfrequenz ===&lt;br /&gt;
Der Sekundenimpuls eines GPS-Empfängers hat einen Jitter von wenigen Nanosekunden, daher kann GPS als Zeitstandard für Frequenz- und Zeitmessungen verwendet werden. Manche GPS-Empfänger liefern ein Korrektursignal, und sind für diese Aufgabe besonders geeignet, genaueres hier:&lt;br /&gt;
&lt;br /&gt;
*GPS-disciplined Frequency Standard: http://hpsdr.org/wiki/index.php?title=GIBRALTAR&lt;br /&gt;
&lt;br /&gt;
*Über die Stabilität von Oszillatoren und Frequenznormalen http://www.ulrich-bangert.de/AMSAT-Journal.pdf , Abb.14 S.28 zeigt die Wirkung der sogenannten &amp;quot;Sawtooth-Correction&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== GPS Projekte hier im Wiki ===&lt;br /&gt;
&lt;br /&gt;
* [[GPS-Empfang mit Lassen iQ]]&lt;br /&gt;
* [[GPS-Platine mit Tyco-Modul]]&lt;br /&gt;
&lt;br /&gt;
=== Web-Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.trimble.com/gps/ Ein empfehlenswertes GPS-Tutorial].&lt;br /&gt;
* [http://www.aprs.de/ Funkamateure betreiben GPS in Verbindung mit Funkgeräten zur automatischen Standortmeldung]&lt;br /&gt;
* [http://r2d2.stefanm.com/gps-tracker.html GPS-Tracker mit Navigation auf LPC2103-Basis]&lt;br /&gt;
* [http://www.dg1sfj.de/hardware/hw_ubloxgps.html GPS Empfänger mit uBlox-GPS-Modul]&lt;br /&gt;
* [http://www.maltepoeggel.de/html/gpsms1e/ GPS Empfänger mit µBlox GPS MS1E]&lt;br /&gt;
* [http://www.gpsvisualizer.com/ GPS-Visualizer Do-It-Yourself Mapping]&lt;br /&gt;
* [http://www.codeproject.com/vb/net/WritingGPSApplications1.asp Writing Your Own GPS Applications: Part 1] und [http://www.codeproject.com/netcf/WritingGPSApplications2.asp Part 2] (C# und VB.NET)&lt;br /&gt;
* [http://www.navcen.uscg.gov/pubs/gps/sigspec/gpsspsa.pdf GPS Standard Positioning Service Signal Specification] - das offizielle Dokument&lt;br /&gt;
* [http://www.youtube.com/watch?v=wi_3XwkA8cQ Youtube-Video] - Luft- und Raumfahrt-Technologe, Dr. Kevin Dutton, erklärt für NASA&#039;s Destination Tomorrow die Funktionsweise des Global Positioning Systems (GPS), was es kann und wo es eingesetzt wird. (engl.)&lt;br /&gt;
* [http://www.ko4bb.com/cgi-bin/manuals.pl?dir=5)_GPS_Timing Manuals zu professionellen GPS-Referenzempfängern, u.a. Hewlett-Packard]&lt;br /&gt;
----&lt;br /&gt;
* 1: Der aufgeprägte Fehlerwert war ohnehin nicht sehr effektiv, da er sich mit etwas erhöhtem Aufwand eliminieren ließ (Differential GPS).&lt;br /&gt;
* 2: Auch die mittlerweile eingeführte &amp;quot;Handy-Ortung&amp;quot; ist ein aktives System - mit allen Vor- und Nachteilen.&lt;br /&gt;
&lt;br /&gt;
[[Category:GPS]]&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Reichelt-Wishlist&amp;diff=3983</id>
		<title>Reichelt-Wishlist</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Reichelt-Wishlist&amp;diff=3983"/>
		<updated>2004-09-02T16:40:12Z</updated>

		<summary type="html">&lt;p&gt;R2d2: Striche hinzugefügt, doppelte Überschrift gelöscht&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite soll das Produkt von folgendem Thread aus dem Forum werden:&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-1-107307.html&lt;br /&gt;
&lt;br /&gt;
Ziel ist es, eine &amp;quot;Top-10&amp;quot; (oder mehr ?) Liste mit Artikeln zu erstellen, &lt;br /&gt;
die Reichelt in sein Programm aufnehmen sollte. Damit sich die beliebtesten Artikel herauskristalisieren, macht jeder einfach einen virtuellen Strich dahinter: | (ALT-GR Taste und &amp;lt; Taste drücken)&lt;br /&gt;
&lt;br /&gt;
Alle fünf Striche (|||||) bitte immer ein Leerzeichen einfügen.&lt;br /&gt;
Neue Artikel einfügen darf und soll natürlich auch jeder - aber bitte die Liste vorher durchgehen (Tipp: Browser-Suchfunktion nutzen)! Einfach ganz viele Striche auf einmal, hinter einem Artikel, einzufügen ist zwecklos. Das erkennt man in der History und es gibt viele Leute, die diese Seite überwachen...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nicht sinvoll ist etwas sehr exotisches&#039;&#039;&#039;, wie z.B. einen ganz bestimmten, super schnellen, AD-Wandler hier aufzulisten! Neue Artikel müssen sich für Reichelt ja auch rentieren und wirtschaftlich &amp;quot;an den Mann bringbar&amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FTDI USB Chips  ||||| ||||| ||||| |&lt;br /&gt;
* Stift-/Buchsenleisten zum Auseinanderbrechen  ||||| ||||| ||||&lt;br /&gt;
* Drehimpulsgeber (konkreter Vorschlag von O.R.: PEC16-4220F-S0024 von Bourns)  ||||| ||||| ||&lt;br /&gt;
* MMC / SDC slot  ||||| ||||| |&lt;br /&gt;
* VLSI MP3 Decoder  ||||| ||||| |&lt;br /&gt;
* dünner Schaltdraht (&amp;lt; 1mm Durchmesser, isoliert mit Tefzel oder Kynar)  ||||| |||&lt;br /&gt;
* DCF77 Empfangsmodule  ||||| |&lt;br /&gt;
* mehr SMD Bauteile  ||||| |||&lt;br /&gt;
* mehr und v.a. kleine (Hand-) Gehäuse  ||||&lt;br /&gt;
* CAN-Bus Controller MCP2515  ||||&lt;br /&gt;
* Buchsenleisten zum Crimpen (allseitig anreihbar!, 1x1, 1x2)  |||&lt;br /&gt;
* Eisen III Chlorid  |||||&lt;br /&gt;
* Shunt-Widerstände  |||&lt;br /&gt;
* T215 ersetzen gegen etwas Qualitativeres  |&lt;br /&gt;
* Print-Steckverbinder (die einreihigen Stecker auf dem PC-Mainboard) |||&lt;br /&gt;
* CompactFlash Stecker |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bereits im Sortiment ====&lt;br /&gt;
Evtl. genauer spezifizieren...&lt;br /&gt;
&lt;br /&gt;
* 3,3V Laengsregler (LT1086-Serie z.B.)  ||||| =&amp;gt; vgl z.B. [http://reichelt.de/index.html?SID=14QSUrC9S4AQ4AAAuYOQg8760639ba77e10e44d9eab5adeb46eac;ACTION=3;LASTACTION=3;SORT=artikel.artnr;GRUPPE=A216;WG=0;SUCHE=1086;ARTIKEL=LT%201086%20CM3%2C3;START=0;END=16;FAQSEARCH=Regulator%2C%20%20M3-DD;FAQTHEME=-1;FAQSEARCHTYPE=0;FAQAUTO=1;STATIC=0;FC=668;PROVID=0;TITEL=0;ARTIKELID=39523 LT 1086 CM3,3] (SMD) oder [http://reichelt.de/inhalt.html?SID=14QSUrC9S4AQ4AAAuYOQg8760639ba77e10e44d9eab5adeb46eac;ACTION=3;LASTACTION=4;SORT=artikel.artnr;GRUPPE=A216;WG=0;SUCHE=1086;ARTIKEL=LT%25201086%2520CT3%252C3;START=0;END=16;STATIC=0;FC=667;PROVID=0;TITEL=0 LT 1086 CT3,3] (TO-220) bei Reichelt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Nachtrag ====&lt;br /&gt;
&lt;br /&gt;
* lineare Potentiometer&lt;br /&gt;
* 3.3V kann jetzt genauer spezifiziert werden: SMD möglichst klein (z.b. SOT23) mit kleiner Low-Drop Spannung, z.B. wie [http://www.torex-usa.com/product/pro02/pro_05.html Torex XC62]]&lt;br /&gt;
* dünner isolierter Draht, wie Klingeldraht nur dünner, vielleicht 0.2-0.3mm zum Fädeln von Platinen&lt;br /&gt;
* Flexible Messleitungen: Wie gesagt Reichelt bietet ja die ganze Palette an Banenen/Laborsteckern, Krokodielklemmen usw. an nur die Leitungen dazu fehlen im Programm.&lt;/div&gt;</summary>
		<author><name>R2d2</name></author>
	</entry>
</feed>