<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Overthere</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Overthere"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Overthere"/>
		<updated>2026-04-11T12:11:31Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13301</id>
		<title>Diskussion:Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13301"/>
				<updated>2008-03-16T11:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hi&amp;lt;br&amp;gt;&lt;br /&gt;
Bei der ansteuerung von z.b. L298 könte man 2 Ausgangspins sparen wenn man einen Logikinverter vor die Richtungswahl stellt.&lt;br /&gt;
&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
...AVR..|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
..PB0...|___________[Not]_______Richtung A&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........\_________________Richtung B&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
So könnte man über einen Port die Richtung wählen.&lt;br /&gt;
==Kommentar==&lt;br /&gt;
Kommentar: Ja, das würde funktionieren. &lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Anmerkung von User shaun zur FET-Schaltung mit Logik Baustein:&lt;br /&gt;
Wie ich schon im anderen Eintrag zu dieser Schaltung schrieb, ist diese Schaltung durchaus gar nicht geeignet, da ab einer Betriebsspannung von ca. 4V bei jedem Schalt- und damit Umladevorgang kurzzeitig beiden MOSFETs eines Brückenzweiges leiten, somit also ein Kurzschluss entsteht und erheblicher Strom fliesst. Auch bei niedriger PWM-Frequenz führt dies zu erheblicher Erwärmung und ggf. zur Zerstörung, auf jeden Fall aber zu massiven Störungen auf der Versorgung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Der Hauptteil ist hier die Diskussion der H Brücke als Motortreiber. Die selbe Schaltung wird (2x) auch bei bipolaren Schrittmotoren verwendet. Man sollte die Beschreibungen also zusammenfassen. Der Tietel ist auch etwas unpraktisch, ich bin nur zufällig auf den Artikel gestoßen, gefunden hätte ich ihn nicht, wenn ich danach suchen würde.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die aus MOSFETs diskret aufgebaute H-Brücke gehört irgendwie schon noch zu den integrierten H-Brücken dazu.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung mal fertig (und der Alte Teil weg) ist, ist der Abschnitt auch nicht mehr ganz so lang.&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13300</id>
		<title>Diskussion:Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13300"/>
				<updated>2008-03-16T11:38:23Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hi&amp;lt;br&amp;gt;--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
Bei der ansteuerung von z.b. L298 könte man 2 Ausgangspins sparen wenn man einen Logikinverter vor die Richtungswahl stellt.&lt;br /&gt;
&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
...AVR..|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
..PB0...|___________[Not]_______Richtung A&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........\_________________Richtung B&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
So könnte man über einen Port die Richtung wählen.&lt;br /&gt;
==Kritik==&lt;br /&gt;
Kommentar: Das Not Gatter überschneidet sich! Wenn B sowie A auf high sind, dann gibt es einen &amp;quot;Quasi-Kurzschluss&amp;quot;. Möglich wäre es mit einigen Widerständen, wobei man dann ein OpenDrain (7406) verwenden muss.&lt;br /&gt;
&lt;br /&gt;
-+-[!]---[A]&amp;lt;br&amp;gt;&lt;br /&gt;
.|.......&amp;lt;br&amp;gt;&lt;br /&gt;
.+--[R]--[B]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Anmerkung von User shaun zur FET-Schaltung mit Logik Baustein:&lt;br /&gt;
Wie ich schon im anderen Eintrag zu dieser Schaltung schrieb, ist diese Schaltung durchaus gar nicht geeignet, da ab einer Betriebsspannung von ca. 4V bei jedem Schalt- und damit Umladevorgang kurzzeitig beiden MOSFETs eines Brückenzweiges leiten, somit also ein Kurzschluss entsteht und erheblicher Strom fliesst. Auch bei niedriger PWM-Frequenz führt dies zu erheblicher Erwärmung und ggf. zur Zerstörung, auf jeden Fall aber zu massiven Störungen auf der Versorgung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Der Hauptteil ist hier die Diskussion der H Brücke als Motortreiber. Die selbe Schaltung wird (2x) auch bei bipolaren Schrittmotoren verwendet. Man sollte die Beschreibungen also zusammenfassen. Der Tietel ist auch etwas unpraktisch, ich bin nur zufällig auf den Artikel gestoßen, gefunden hätte ich ihn nicht, wenn ich danach suchen würde.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die aus MOSFETs diskret aufgebaute H-Brücke gehört irgendwie schon noch zu den integrierten H-Brücken dazu.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung mal fertig (und der Alte Teil weg) ist, ist der Abschnitt auch nicht mehr ganz so lang.&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13299</id>
		<title>Diskussion:Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13299"/>
				<updated>2008-03-16T11:37:58Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hi&amp;lt;br&amp;gt;--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
Bei der ansteuerung von z.b. L298 könte man 2 Ausgangspins sparen wenn man einen Logikinverter vor die Richtungswahl stellt.&lt;br /&gt;
&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
...AVR..|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
..PB0...|___________[Not]_______Richtung A&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........\_________________Richtung B&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
So könnte man über einen Port die Richtung wählen.&lt;br /&gt;
==Kritik==&lt;br /&gt;
Kommentar: Das Not Gatter überschneidet sich! Wenn B sowie A auf high sind, dann gibt es einen &amp;quot;Quasi-Kurzschluss&amp;quot;. Möglich wäre es mit einigen Widerständen, wobei man dann ein OpenDrain (7406) verwenden muss.&lt;br /&gt;
&lt;br /&gt;
-+-[!]---[A]&amp;lt;br&amp;gt;&lt;br /&gt;
.|.......&amp;lt;br&amp;gt;&lt;br /&gt;
.+-------[B]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Anmerkung von User shaun zur FET-Schaltung mit Logik Baustein:&lt;br /&gt;
Wie ich schon im anderen Eintrag zu dieser Schaltung schrieb, ist diese Schaltung durchaus gar nicht geeignet, da ab einer Betriebsspannung von ca. 4V bei jedem Schalt- und damit Umladevorgang kurzzeitig beiden MOSFETs eines Brückenzweiges leiten, somit also ein Kurzschluss entsteht und erheblicher Strom fliesst. Auch bei niedriger PWM-Frequenz führt dies zu erheblicher Erwärmung und ggf. zur Zerstörung, auf jeden Fall aber zu massiven Störungen auf der Versorgung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Der Hauptteil ist hier die Diskussion der H Brücke als Motortreiber. Die selbe Schaltung wird (2x) auch bei bipolaren Schrittmotoren verwendet. Man sollte die Beschreibungen also zusammenfassen. Der Tietel ist auch etwas unpraktisch, ich bin nur zufällig auf den Artikel gestoßen, gefunden hätte ich ihn nicht, wenn ich danach suchen würde.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die aus MOSFETs diskret aufgebaute H-Brücke gehört irgendwie schon noch zu den integrierten H-Brücken dazu.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung mal fertig (und der Alte Teil weg) ist, ist der Abschnitt auch nicht mehr ganz so lang.&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13298</id>
		<title>Diskussion:Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Getriebemotoren_Ansteuerung&amp;diff=13298"/>
				<updated>2008-03-16T11:37:26Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hi&amp;lt;br&amp;gt;--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
Bei der ansteuerung von z.b. L298 könte man 2 Ausgangspins sparen wenn man einen Logikinverter vor die Richtungswahl stellt.&lt;br /&gt;
&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
...AVR..|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|&amp;lt;br&amp;gt;&lt;br /&gt;
..PB0...|___________[Not]_______Richtung A&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........|&amp;lt;br&amp;gt;&lt;br /&gt;
...........|........\_________________Richtung B&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
So könnte man über einen Port die Richtung wählen.&lt;br /&gt;
==Kritik==&lt;br /&gt;
Kommentar: Das Not Gatter überschneidet sich! Wenn B sowie A auf high sind, dann gibt es einen &amp;quot;Quasi-Kurzschluss&amp;quot;. Möglich wäre es mit einigen Widerständen, wobei man dann ein OpenDrain (7406) verwenden muss.&lt;br /&gt;
&lt;br /&gt;
-+-[!]---[A]&lt;br /&gt;
.|.......&lt;br /&gt;
.+-------[B]&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 12:37, 16. Mär 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Anmerkung von User shaun zur FET-Schaltung mit Logik Baustein:&lt;br /&gt;
Wie ich schon im anderen Eintrag zu dieser Schaltung schrieb, ist diese Schaltung durchaus gar nicht geeignet, da ab einer Betriebsspannung von ca. 4V bei jedem Schalt- und damit Umladevorgang kurzzeitig beiden MOSFETs eines Brückenzweiges leiten, somit also ein Kurzschluss entsteht und erheblicher Strom fliesst. Auch bei niedriger PWM-Frequenz führt dies zu erheblicher Erwärmung und ggf. zur Zerstörung, auf jeden Fall aber zu massiven Störungen auf der Versorgung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Der Hauptteil ist hier die Diskussion der H Brücke als Motortreiber. Die selbe Schaltung wird (2x) auch bei bipolaren Schrittmotoren verwendet. Man sollte die Beschreibungen also zusammenfassen. Der Tietel ist auch etwas unpraktisch, ich bin nur zufällig auf den Artikel gestoßen, gefunden hätte ich ihn nicht, wenn ich danach suchen würde.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die aus MOSFETs diskret aufgebaute H-Brücke gehört irgendwie schon noch zu den integrierten H-Brücken dazu.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung mal fertig (und der Alte Teil weg) ist, ist der Abschnitt auch nicht mehr ganz so lang.&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13282</id>
		<title>Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13282"/>
				<updated>2008-03-15T12:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hat man sich entschlossen, für seinen Roboter oder andere Konstruktion einen Getriebemotor zu verwenden, so muss man sich Gedanken machen, wie man ihn ansteuert. Gewöhnlich will man die Motoren ja sowohl in Bezug auf Drehrichtung und Geschwindigkeit über eine Programmiersprache steuern. Daher wird in der Regel erst mal ein Controllerboard benötigt. Leider kann man an die wenigsten Controllerboards einen Getriebemotor direkt anschließen, eine der wenigen Ausnahmen ist das [[RN-Control]]-Board und das RNBFRA-Board. Bei beiden Boards ist es einfach, dort müssen die Getriebemotoren einfach nur an die Schraubklemmen angeschlossen werden, danach kann man sofort mit der Programmierung loslegen.&lt;br /&gt;
&lt;br /&gt;
Ich möchte hier aber aufzeigen, wie man Motoren auch bei anderen Boards anschließen kann. Die gleiche Technik läßt sich natürlich auch nutzen, um z.B. mehr als zwei Motoren an [[RN-Control]] anzuschließen.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Relais==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode, um Motoren per [[Microcontroller|Controller]] anzusteuern, erreicht man durch die Verwendung von Relais. Mit einem Relais, das zwei Umschaltkontakte besitzt, lässt sich über einen einzelnen Controllerport bequem die Drehrichtung wechseln.&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckerelais.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Da auch Relais wegen des Strombedarfes nicht direkt vom Controller geschaltet werden können, wurde in dem oberen Beispiel ein Transistor vorangestellt. Die Diode dient nur dazu, die Spannungen, die beim Ausschalten des Relais induziert werden, abzuleiten. Ohne Diode funktioniert das Ganze in der Regel auch, jedoch könnte der Transistor oder sogar der Controller durch die induzierte Spannung beschädigt werden. &lt;br /&gt;
Die Schaltung ist also in der Lage, die Drehrichtung umzuschalten, jedoch nicht in der Lage, den Motor zu stoppen. Um den Motor ganz auszuschalten, müsste man noch ein weiteres Relais vorsehen, das die gesamte Motorspannung abschaltet. Ein Schaltbild können wir uns ersparen, da das Ganze recht ähnlich aussieht. &lt;br /&gt;
Der große Nachteil von Relaisschaltungen ist, dass die Geschwindigkeit des Motors nicht geregelt werden kann, zudem haben Relais bei sehr vielen Schaltvorgängen einen gewissen Verschleiß. &lt;br /&gt;
Vorteil der Schaltung ist jedoch, das man auch sehr große Lasten/Motoren schalten kann.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit MOS-FET==&lt;br /&gt;
===Neufassung===&lt;br /&gt;
{{Ausbauwunsch|Die Neufassung kann im momentanen Stand nur als Anregung verstanden werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere fehlen noch angepasste Schaltpläne.&lt;br /&gt;
&lt;br /&gt;
Einige der Anmerkungen aus dem Abschnitt &amp;quot;Kritik an der Schaltung&amp;quot; sind in der Neufassung noch nicht enthalten, die Beschreibung von Verzögerungsgliedern müsste auch eine Erklärung enthalten, welche Verzögerung mit welchen Werten erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung komplett fertig ist, sollten die alten Texte weg.&lt;br /&gt;
}}&lt;br /&gt;
====Grundprinzip====&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz.&lt;br /&gt;
&lt;br /&gt;
Die Grundschaltung besteht aus 2 N-Kanal-MOSFET (hier BUZ11) und zwei P-Kanal-MOSFET (hier IRF5305), mit denen die Motoranschlüsse nach GND bzw. UB geschaltet werden. Zusätzlich sind noch 4 Schottky-Dioden (z.B. SB530) erforderlich, um Induktionsströme des Motors abzuleiten. Die Dioden werden in Sperrichtung von den beiden Motoranschlüssen nach GND bzw. UB geschaltet.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss die Beschaltung der Gate-Eingänge so erfolgen, dass zum Starten des Motors die Transistoren einer Diagonale auf &amp;quot;leitend&amp;quot; und die der anderen auf &amp;quot;sperrend&amp;quot; geschaltet werden. Zum Anhalten des Motors werden z.B. die unteren auf leitend und die oberen auf sperrend geschaltet - Der Motor wird dadurch schnell abgebremst, denn durch einen Transistor und eine Freilaufdiode fließt ein nicht unerheblicher Bremsstrom.&lt;br /&gt;
Alternativ kann man auch alle Transistoren auf sperrend schalten, der Motor läuft dann im Leerlauf aus.&lt;br /&gt;
&lt;br /&gt;
Die Transistoren einer Seite dürfen nicht dauerhaft gleichzeitig auf &amp;quot;leitend&amp;quot; geschaltet werden, da dies einen Kurzschluss verursacht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindestens bei dem Transistor BUZ11 handelt es sich um ein veraltetes Modell. Wenn es auf hohe Leistung ankommt, sollte da ein anderer Transistor gewählt werden.&lt;br /&gt;
&lt;br /&gt;
====Elektrische Ansteuerung der Gates====&lt;br /&gt;
Beim Umschalten der Transistoren entsteht eine erhöhte Verlustleistung - der Widerstand wechselt von sperrend (sehr großer Widerstand) nach leitend (sehr kleiner Widerstand) und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Enden des Schaltvorgangs befindet sich der Transistor in der &amp;quot;Widerstandsphase&amp;quot; (weder ganz leitend, noch ganz sperrend), die eine erhebliche Verlustleistung und damit Erwärmung mit sich bringt.&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte der Schaltvorgang - insbesondere wenn für eine PWM-Gegelung sehr oft geschaltet werden soll - möglichst schnell erfolgen. Da zum Umschalten die durch den Aufbau des MOSFETs bedingte Gatekapazität umgeladen werden muss, ist hierzu (sehr kurzzeitig) ein hoher Stromfluss nötig.&lt;br /&gt;
=====Schaltung direkt am Port=====&lt;br /&gt;
Eine Ansteuerung unmittelbar über den Ausgang eines Mikrocontrollers (oder eines TTL-IC) ist schon wegen der benötigten Spannungen nicht möglich. &lt;br /&gt;
&lt;br /&gt;
Bei den N-FET könnte man sog. &amp;quot;Logik-MOSFET&amp;quot; nehmen, die bereits bei 5V ausreichend leitet. &lt;br /&gt;
&lt;br /&gt;
Bei den P-MOSFET bemisst sich die Schaltspannung gegen UB, mit einem 5V Port und UB=12V würde also zwischen -12V und -7V umgeschaltet, was einen P-MOSFET erfordern würde, der bereits bei -7V sperrt.&lt;br /&gt;
&lt;br /&gt;
Dass ein Portpin nur einen geringen Stromfluss (~20mA) zulässt, ist ein weiteres Problem und verhindert einen Schaltvorgang mit idealer steiler Flanke. Allerdings ist die Schaltungsvariante mit einem Transistor in diesem Punkt keinesfalls besser, wenn die Gatekapazität durch den PullUp-Widerstand umgeladen werden muss.&lt;br /&gt;
=====Schaltung mit einem Transistor=====&lt;br /&gt;
Eine einfache Steuerschaltung besteht aus einem Transistor-Schalter und einem Pull-Up-Widerstand. Als Schalter hab ich 1/7 eines ULN2003 IC verwendet, als PullUp 2200 Ohm. Ein diskreter Aufbau mit 1 Transistor und 2 Widerständen ist aber auch nicht komplizierter.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der Einfachheit, der Nachteil liegt darin, dass die Schaltung nicht sonderlich schnell vonstatten geht: Für die Schaltung des FET muss die Gate-Kapazität transferiert werden, was insbesondere beim Wechsel von 0V nach UB einen Moment dauert, da die Ladung durch den Widerstand hindurch muss.&lt;br /&gt;
&lt;br /&gt;
Ein kleinerer Widerstand könnte hier helfen, verursacht allerdings einen nicht unerheblichen Stromfluss im geschalteten Zustand (zulässige Verlustleistung beachten).&lt;br /&gt;
=====Schaltung mit zwei Transistoren=====&lt;br /&gt;
Eine bessere Ansteuerung sollte sich ergeben, wenn man zwei Transistoren zur Gate-Ansteuerung verwendet: Einer schaltet gegen 0V, der andere Gegen UC. So kann man erreichen, dass in beide Richtungen rasch umgeschaltet werden kann.&lt;br /&gt;
=====Integrierte Gate-Treiber=====&lt;br /&gt;
Statt der Beschaltung mit zwei Transistoren kann man auch einen integrierten MOSFET-Treiber verwenden. Mit derartige IC sind darauf ausgelegt, kurzfristig den für eine Umschaltung benötigten hohen Stromfluss zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Treiber-IC, die zur Ansteuerung der oberen Transistoren eine Spannung oberhalb von UB erzeugen. Mit solchen Highside-Treibern kann die H-Brücke auch aus 4 N-Kanal-Transistoren gebaut werden, was den Vorteil hat, dass N-Kanal-FET mit geringerem Schaltwiderstand zu bekommen sind.&lt;br /&gt;
&lt;br /&gt;
====Logische Ansteuerung der Gates====&lt;br /&gt;
Nach der elektrischen Ansteuerung ist die logische Ansteuerung durch den Mikrocontroller zu überlegen.&lt;br /&gt;
&lt;br /&gt;
=====Mögliche Querströme=====&lt;br /&gt;
In der H-Brücke sind zwei problematische Zustände zu berücksichtigen:&lt;br /&gt;
&lt;br /&gt;
1. Das offensichtliche Problem ist ein Kurzschluss: Wenn beide Transistoren einer Seite auf leitend geschaltet werden wird dadurch ein Kurzschluss erzeugt. Falls vorhanden brennt die Sicherung durch - ist keine Sicherung vorhanden, brennt was anderes durch.&lt;br /&gt;
&lt;br /&gt;
2. Ein nicht so offensichtliches Problem rührt daher, dass der Schaltvorgang nur mit endlicher Geschwindigkeit abläuft und der Transistor auch schon vor Erreichen des Zielwertes der Gate-Spannung erheblichen Strom leitet. Hierdurch kommt es zu einem Kurzschluss durch den nicht mehr richtig gesperrten und den noch nicht richtig gesperrten Transistor.&lt;br /&gt;
&lt;br /&gt;
Die Stromspitze selbst liegt noch im Rahmen der Spezifikationen der Transistoren. Sofern ein Messwiderstand von z.B. 0,1 Ohm da ist oder die Spannungsquelle einen vergleichbaren Innenwiderstand hat fließt ein Strom von weniger als 70A, die Transistoren sind jeweils für Spitzen von über 100A spezifiziert.&lt;br /&gt;
&lt;br /&gt;
Allerdings hat die Stromspitze drei Auswirkungen: &lt;br /&gt;
&lt;br /&gt;
# Die Transistoren erwärmen sich&lt;br /&gt;
# Es kann an einem Messwiderstand zu einer Spannungsspitze kommen&lt;br /&gt;
# Die Versorgungsspannung bricht kurzzeitig zusammen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Erwärmung des Transistors ist solange kein Problem, wie nur selten umgeschaltet wird. Bei einer Regelung per PWM könnten sich die kleinen Energiemengen zu einem relevanten Problem addieren. &lt;br /&gt;
&lt;br /&gt;
Da die Erwärmung - sofern sie relevant wird - leicht ohne Messinstrumente feststellbar ist, dürfte dieser Teil des Problems insofern handhabbar sein, als man leicht feststellen kann, ob das Problem relevant ist und das Problem auf die Transistoren beschränkt sind.&lt;br /&gt;
&lt;br /&gt;
Bei Leerlauf-Schaltvorgängen im Abstand von 1/15 Sekunden habe ich keine Erwärmung der Transistoren feststellen können, es wurden auch keine zusätzlichen Kühlkörper verwendet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die Spannungsspitze am Messwiderstand kann abgeleitet werden:&lt;br /&gt;
Als weitere Vorsichtsmaßnahme habe ich den Messport des Controllers mit einem Widerstand und einer Z5.1 Diode abgesichert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Störung der Versorgungsspannung lässt sich ohne Oszilloskop nicht messen. Insbesondere in umfangreicheren Schaltungen können Störungen an ganz anderen Stellen (z.B. bei Sensoren) auftreten, die man dann nicht gleich mit der Motorsteuerung in Verbindung bringt.&lt;br /&gt;
&lt;br /&gt;
Um die Störung vom Controller fernzuhalten habe ich dem Spannungswandler vorsichtshalber eine kleine Schottky-Diode (SB140) vorgeschaltet, um ein Entladen des Stützkondensators zu verhindern.&lt;br /&gt;
&lt;br /&gt;
=====softwaremäßige Ansteuerung=====&lt;br /&gt;
Die einfachste Art der Ansteuerung besteht darin, die Schalter der 4 Gates mit 4 Ausgängen des Controllers zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die korrekte Ansteuerung muss dann durch die Software garantiert werden. &lt;br /&gt;
&lt;br /&gt;
Eine Fehlschaltung der Software z.B. bei einem Absturz kann allerdings zur Zerstörung der Schaltung führen, die Schaltung sollte also in jedem Fall eine Sicherung haben.&lt;br /&gt;
&lt;br /&gt;
=====Einfache Ansteuerung=====&lt;br /&gt;
Etwas sicherer ist es, die Schaltung so aufzubauen, dass ein Kurzschluss nicht dauerhaft geschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
Hierzu habe ich die Schaltung so aufgebaut, dass die Gates einer Seite jeweils gemeinsam geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von 0V sperrt der N-MOSFET (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V), der P-MOSFET leitet bei dieser Gate-Spannung, da hier U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=-UB ist. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von UB verhält es sich genau umgekehrt: Der N-MOSFET leitet (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=UB) und der P-MOSFET sperrt (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V)&lt;br /&gt;
&lt;br /&gt;
Diese einfache Ansteuerung benötigt lediglich zwei Transistorschalter und auch nur 2 Port-Pins, hat jedoch den Nachteil, dass die oben beschriebenen Querströme auftreten.&lt;br /&gt;
=====Verbesserungsmöglichkeiten=====&lt;br /&gt;
Zur Lösung des Querstrom-Problems gibt es mehrere Ansatzmöglichkeiten, die ebenfalls mit zwei Controller-Ausgängen auskommen.&lt;br /&gt;
----&lt;br /&gt;
Mittels Logik-Bausteinen werden zwei Ausgänge des Controllers so umgesetzt, dass die folgenden Zustände geschaltet werden können:&lt;br /&gt;
&lt;br /&gt;
# Motor-Stop: untere Transistoren leitend, obere sperrend (oder umgekehrt)&lt;br /&gt;
# Motor-Vorlauf: 1. Diagolale leitend&lt;br /&gt;
# Motor-Rücklauf: 2. Diagonale leitend&lt;br /&gt;
# Motor-Leerlauf: Alle Transistoren sperrend&lt;br /&gt;
&lt;br /&gt;
Die Querstrom-Problematik kann hierbei softwaremäßig gelöst werden, indem beim Umschalten jeweils kurz der Leerlauf geschaltet wird, damit alle Transistoren sperren.&lt;br /&gt;
----&lt;br /&gt;
Eine andere Möglichkeit besteht darin, das Umladen der Gate-Kapazität asymmetrisch zu gestalten, so dass die Transistoren schneller auf sperrend als auf leitend geschaltet werden. Eine einfache Möglichkeit ist die Parallelschaltung einer Diode und eines Widerstandes: In Sperr-Richtung fließt die Ladung langsamer als in die Durchlass-Richtung.&lt;br /&gt;
===Heidingscher Encoder===&lt;br /&gt;
Aufgrund der Kritik an der alten Schaltung(siehe '''Alte Schaltungsbeschreibung''') entschied ich mich einen neuen, einfachen sowie preisgünstigen Encoder zu entwickeln, den man mit der 74series aufbauen kann. Als Treiber können sowohl Transistoren verwendet werden, dabei aber Vorwiderstände nicht vergessen! Die 74series sind mit 20mA Treiberstrom also natürlich nicht zum direkten Treiben geeignet.&lt;br /&gt;
Die Logikanzeigen in den Grafiken sollen je einen Transistor bzw. Mosfet darstellen. Eventuelle Freilaufdioden müssen natürlich noch hinzugefügt werden.&lt;br /&gt;
====PR Encoder====&lt;br /&gt;
[[Bild:Prtreiber.png]]&lt;br /&gt;
&lt;br /&gt;
Der PR Encoder(PWM-Richtung Encoder) ist mit zwei NOR Gates sowie eines Inverters aufgebaut, d.h. man kann ihn mit nur einem IC(74HC(T)02) aufbauen. Will mein 2 Encoder verwenden, empfliehlt sich den Inverter auszulagern (74HC(T)04 oder 74HC(T)14 Sollte man keinen Schmitt-Trigger benötigen empfiehlt sich aus Schnelligkeitsgründen die 74HC(T)04 Variante). &lt;br /&gt;
Alternativ ist es noch möglich sich den Inverter zu sparen, und die Ansteuerung für den P(WM) Kanal invertiert laufen zu lassen.  &lt;br /&gt;
====PRK Encoder====&lt;br /&gt;
[[Bild:Prktreiber.png]]&lt;br /&gt;
&lt;br /&gt;
Der Prk-Encoder(PWM-Richtung-Kurzschluss-Encoder) ist eine Erweiterung des PR-Encoders. Er erlaubt es zusätzlich, die Motoren durch einen Kurzschluss zu stoppen.&lt;br /&gt;
Aufgebaut werden kann dieser aus 1 NOR und 1 Nand Gate. Dabei werden 3 Nand-Gates als Inverter beschaltet. (d.h. eine die Leitung die übrig bleibt auf Vcc).&lt;br /&gt;
====Support====&lt;br /&gt;
Fragen einfach in das Forum posten, oder mich anschreiben(User s.o.)&lt;br /&gt;
===Alte Schaltungsbeschreibung===&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung! Die Schaltung ist so nicht zu verwenden! Siehe unter '''Kritik an der Schaltung'''&lt;br /&gt;
}}&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz. Eine der interessantesten Schaltungen, die im Roboternetz vorgestellt wurde, dürfte diese sein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckemosfet.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Den 74HC26N gibts wohl nicht , nur die TTL-Version 74LS26, die HC-Mos-Version lautet 74HC03.&lt;br /&gt;
&lt;br /&gt;
Eine sogenannte H-Brücke, die nur aus zwei MOSFETSs und einem Logik-IC besteht. Mit zwei Controllerports kann diese Schaltung sowohl Geschwindigkeit als auch Drehrichtung regeln. Für die Geschwindigkeit ist ein sogenannter [[PWM]]-Port notwendig. Also ein Port, der durch ein gepulstes Signal den Motor etlichemal innerhalb einer Sekunde ein- und ausschaltet und somit quasi die Leistung regelt (siehe [[PWM]]).&lt;br /&gt;
Die Schaltung ist so konstruiert, dass immer nur zwei Transistoren durchschalten. Auf diese Weise fließt einmal der Strom von links oben nach rechts unten und einmal von rechts oben nach links unten, der Motor wird also ähnlich wie bei der Relaisschaltung umgepolt. &lt;br /&gt;
Bei niedriger [[PWM]]_Frequenz sollte die Schaltung durchaus für einige Ampere geeignet sein, wobei ca. 8 bis 13V ideal sein sollten.&lt;br /&gt;
&lt;br /&gt;
Das Logic-IC wurde durch 3x BC547 Transitoren ersetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hbrückenmosfet BD547.PNG|center|900px]]&lt;br /&gt;
&lt;br /&gt;
====Kritik an der Schaltung====&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung wird im Forum von mehreren Leuten, u.A. Ratber, shaun, massiv kritisiert, z.B. hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067&amp;amp;sid=892e80c6cd2d003292e607bcd7a7123a .&lt;br /&gt;
&lt;br /&gt;
Ich habe leider nicht das Wissen eine bessere Lösung zu liefern. Das Problem sind die Querströme: Im Umschaltmoment sind highside und lowside switch für kurze Zeit beide leitend. Das entspricht einem Kurzschluss der Versorgungsleitung bei jedem Umschalten mit allen damit verbundenen Problemen (Erwärmung, Schwingung, Sicherungen, Reset). Aus diesem Grund sind NAND-Gatter nicht geeignet!&lt;br /&gt;
&lt;br /&gt;
Zum Umschalten muss man&lt;br /&gt;
*den bisher leitenden Mosfet ausschalten,&lt;br /&gt;
*dann etwas warten,&lt;br /&gt;
*und schließlich den nächsten Mosfet schließen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man erreichen, indem man den Einschaltmoment &lt;br /&gt;
*durch RC-Glieder verzögert und &lt;br /&gt;
*den Ausschaltmoment durch Dioden beschleunigt.&lt;br /&gt;
Die entstehenden Schaltungen sind komplex, benötigen viele Bauteile und sind fehleranfällig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten sind integrierte Mosfet-Treiber. Diese haben oft eine einstellbare Tot-Zeit (''Dead-Time''), können hohe Leistungen zum Umladen der Gatekapazität liefern und beachten andere Effekte wie ''Propagation-Time'', Veränderung des Source Potentials beim Highside-switch, etc.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung von shaun:'''&lt;br /&gt;
&lt;br /&gt;
die gezeigte Schaltung taugt auch nur als Prinzipschaltung bedingt, da man einen variierenden Aufwand in eine sichere Verriegelung investieren müsste. Bei fixer und nicht zu hoher Betriebsspannung könnte man mit RD-Kombinationen in den Gateleitungen das Ausschalten beschleunigen und das Einschalten verzögern, so dass die Querleitung wegfällt. Allerdings bewirkt diese simple R-Cg-Verzögerung größere Schaltverluste. &lt;br /&gt;
&lt;br /&gt;
Setzt man die Vezögerung vor dedizierte Treiber, müssen diese wiederum leistungsfähig genug zum Umladen der Gates sein und bis an die Versorgung heranreichen, weshalb man an diesem Punkt überlegen sollte, ob 95% duty cycle nicht auch reichen würden ''(Anmerkung: Bezug auf bootstrapping?)'' und man integrierte Treiber für reine N-Kanal-Bestückung einsetzen sollte - spart dann wieder etwas Verluste am Highside-Switch, weil N-Kanäler gleicher Generation und Leistungsklasse einen niedrigeren Rds(on) als ihre P-Pendants haben.&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Eine vernünftige diskrete Ansteuerung für eine H-Brücke.&lt;br /&gt;
Korrektur auf Rechtschreibfehler, Zeichensetzung, Schreibstil, Fachausdrücke. Gibt's denn keinen der etwas verbessern möchte?}}&lt;br /&gt;
==Ansteuerung mit einem LeistungsOPV==&lt;br /&gt;
Die wohl preislich und platztechnisch günstigste Alternative zur Ansteuerung von Motoren in H-Brücken ist die Verwendung von (Leistungs-)Operationsverstärkern. &lt;br /&gt;
===Heidingscher Motortreiber=== &lt;br /&gt;
Bei dem Heidingschen Motortreiber wird jeder Anschluss des Motors mit einem Ausgang des Operationsverstärker verbunden, die Eingänge des OPVs selbst als Komparator. Diese Methode ist für kleine und mittlere Motoren(=&amp;lt; 1A) und mäßige PWM-Frequenzen(&amp;lt;10kHz) gut geeignet. Ein RB35 von Conrad kann damit problemlos angesteuert werden. Bei zu hohen PWM-Frequenzen ist die SlewRate von vielen OPVs zu gering und die entsprechenden OPVs sind dann viel zu teuer und man sollte eine Ansteuerung per Mosfet(s.o.) bevorzugen. Momentan hat sich der TCA 0372 DP1 (57ct bei Reichelt) Verwendung gefunden. &lt;br /&gt;
Weitere Informationen sind in folgendem Forumsbeitrag zu finden:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/viewtopic.php?t=38412&lt;br /&gt;
===Gleichstromansteuerung===&lt;br /&gt;
Eine weitere Möglichkeit ist es, dem Operationsverstärker eine Gleichspannung vorzugeben, mit denen der OPV die Motoren ansteuert. Diese Methode eignet sich sehr gut für analoge Schaltkreise. Der Wirkungsgrad ist allerdings nicht der beste, da die restliche Spannung in Wärme umgesetzt wird. Zudem werden viele weitere komponenten benötigt, dass den Aufbau treuerer und fehleranfälliger macht.&lt;br /&gt;
Der entsprechenden Schaltkreis ist im Datenblatt des TCA 0372 DP1 zu finden.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Treiber IC L293 D==&lt;br /&gt;
&lt;br /&gt;
Dies ist ohne Zweifel die am häufigsten genutzte Ansteuerung bei Roboter-Bastlern: Man nimmt einfach das IC L293D, denn darin sind sogar zwei H-Brücken enthalten. Also mit einem IC lassen sich ohne weiteres externe Bauteile gleich zwei Motoren ansteuern. Zwar nur bis ca. 600mA, aber das reicht oft schon für kleinere bis mittlere Roboteranwendungen aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:L293Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel293d.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wie aus dem Schaltbild zu ersehen ist, werden für die Ansteuerung jedes Motors 3 Ports benötigt. Die Enable-Leitung führt man oft auf einen PWM-Port welcher wie bei der MOS-FET Schaltung oben die Geschwindigkeit regelt. Die beiden anderen Ports geben die Drehrichtung an. Immer wenn die Ports unterschiedliche Polarität haben dreht der Motor in eine bestimmte Richtung, je nachdem wo Low und High anliegt. Das Besondere ist, dass wenn an beiden Ports der gleiche Pegel anliegt, also zweimal Low oder High, dann wird nämlich der Motor kurzgeschlossen - das fungiert als Bremse. Das Bremsen kann bei Robotern durchaus nützlich sein. Zudem ist bei schnellen Richtungswechseln immer zu empfehlen zuerst kurz zu bremsen, um nicht den Motor oder Motortreiber zu stark zu belasten.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit dem Schaltkreis L298==&lt;br /&gt;
&lt;br /&gt;
Der Schaltkreis L298 ist quasi der große Bruder des L293D. Er beinhaltet auch zwei komplette H-Brücken, kann also auch zwei Motoren ansteuern. Die Pinbelegung ist ebenfalls dem L293D sehr ähnlich, jedoch verfügt er über eine andere Bauform:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:L298Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Unterschied besteht jedoch darin, dass jede H-Brücke bei L298 bis zu 2A belastet werden kann. Damit lassen sich also schon wesentlich größere Motoren ansteuern. Ein weiterer Vorzug sind die sogenannten SENSE-Ausgänge, über die der komplette Strom fließt. Oft wird hier ein Hochlastwiderstand  angeschlossen, um aus der abfallenden Spannung den genauen Strom berechnen zu können. Dies machen sich Steuerungen wie [http://www.roboternetz.de/phpBB2/viewtopic.php?t=2741 RN-Motor] oder aber andere Schrittmotoransteuerungen zunutze, um den Strom genau zu regeln. Benötigt man keine Strommessung, so müssen die Sense-Ausgänge immer direkt mit GND verbunden werden. In diesem Fall muss allerdings eine andere Strombegrenzung eingeplant werden. Wird keine Strombegrenzung eingebaut, müssen diese Widerstände trotztem eingebaut werden, da der Treiber sonst heiss wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel298.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Schaltbild gibt es hier [http://www.roboternetz.de/bilder/schaltung298getriebe.gif]&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit L6205==&lt;br /&gt;
Der Schaltkreis L6205 stellt eine etwas modernere Alternative zur L298 Ansteuerung dar. Die Ansteuerung ist praktisch identisch, der Schaltungsaufbau in etwa gleich. Beim L6205 sind keine Freilaufdioden mehr notwendig, dafür ist ein Kondensator und zwei Dioden für die interne Spannungserzeugung notwendig.&lt;br /&gt;
Ein großer Vorteil  ist auch das kein extra Kühlkörper mehr notwendig ist. Viele integrierte Schutzfunktionen im L6205 sorgen dafür das der Chip nicht so einfach zerstört werden kann. In der Praxis sind die angegeben 2,8A jedoch mit Vorsicht zu geniesen. Bei Testlayouts erwärmten sich die IC´s bereits bei 2A Dauerstrom (PWM) oft so stark das die automatische Temperaturabschaltung reagierte, somit wird man vermutlich ohne Kühlung oder großes Kühllayout auf er Platine auch nicht mehr als beim L298 erreichen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205ic.gif]] [[Bild:l6205pinbelegung.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Noch mehr Power gewünscht?==&lt;br /&gt;
&lt;br /&gt;
Obwohl der L298 schon einiges abdeckt, so kommt er spätestens bei den Scheibenwischermotoren langsam an seine Grenzen. Bei starker Belastung können solche Motoren kurzzeitig bis ca. 10 A und mehr ziehen. Für solch starke Motoren gibt es jetzt einen ganz interessanten Motorchip aus dem KFZ-Bereich: vnh3sp (Datenblatt im Roboternetz Download-Bereich). &lt;br /&gt;
Mit ihm lassen sich sogar recht große Motoren ansteuern; vorausgesetzt, man kühlt ihn entsprechend, so verträgt der Chip bis zu 30A. Aber selbst ohne Kühlung bietet er bedeutet mehr Leistung als der L298. Das Schöne, die Ansteuerung ist kaum anders als beim L298 und L293D.&lt;br /&gt;
&lt;br /&gt;
Kleiner Nachteil: Da es ein SMD-Chip mit 1mm Kontaktabstand ist, muss man schon eine geeignete Platine (spezielles Layout mit Kühlflächen) und etwas Löterfahrung besitzen. Inzwischen gibt es aber schon verschiedene RN-Projekte mit dem Chip (RN-Power, RN-Mini H-Bridge), Platinen und Chip können über den [http://www.shop.robotikhardware.de/shop/catalog/index.php Robotikhardware.de-Platinenservice] bezogen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:minihbridge_ansteuerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ zum [[SMD]]-Chip VNH3SP30 gibt es noch die Alternative VNH2SP30. Dieser Chip erlaubt zwar nur Motorspannungen zwischen 6 und 16 Volt, jedoch hat er einen wesentlich geringeren Innenwiderstand und wird deshalb nur etwa halb so warm wie der VNH3SP30. &lt;br /&gt;
Aus diesem Grund eignet er sich auch ideal für kleine Doppelmotorsteuerungen.&lt;br /&gt;
Natürlich gibt's auch hierfür ein Projekt und eine Bauanleitung, siehe [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
Das Schöne ist, dass es dieses RN-Projekt jetzt auch auch als Fertigmodul gibt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:rndualmotoransteuerung.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
==Endstufen mit I2C-Bus / RS232==&lt;br /&gt;
[[Bild:motctrl.png|thumb|Motoransteuerung über RS232, I2C, RC]]Verwendet man eine der oben vorgestellten H-Bridges, so wird immer vorausgesetzt das ein PWM-Signal und mehrere Ports zur Ansteuerung bereitstehen. Ist dies nicht der Fall weil diese vielleicht schon belegt sind, so lassen sich Endstufen durch einen zusätzlichen Microcontroller auch um beliebige Schnittstellen erweitern. Insbesondere über I2C lassen sich dadurch mehrere Motorboards über einen einzigen Bus ansteuern. Ein Beispiel ist der programmierte Controller MOTCTRL, der speziell für diese Aufgabe gedacht ist. Die Grundscháltung sieht man in der rechten Skizze.&lt;br /&gt;
&lt;br /&gt;
==Und nie vergessen Motoren zu entstören==&lt;br /&gt;
&lt;br /&gt;
Das Entstören dient dazu, das sogenannte &amp;quot;Bürstenfeuer&amp;quot; zu verhindern, wodurch Störungen hervorgerufen werden könnten. Und so wirds gemacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:entstoerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Getriebemotoren]]&lt;br /&gt;
* [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Drehmoment Berechnung]&lt;br /&gt;
* [http://www.roboternetz.de/motoruebersicht.html Motoren Übersicht]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65 Bauteilesets]&lt;br /&gt;
* [http://www.roboternetz.de/robotertutorial.html Roboter-Tutorial]&lt;br /&gt;
* [http://www.roboternetz.de Roboternetz Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;br /&gt;
[[Category:Elektronik]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13281</id>
		<title>Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13281"/>
				<updated>2008-03-15T12:10:50Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hat man sich entschlossen, für seinen Roboter oder andere Konstruktion einen Getriebemotor zu verwenden, so muss man sich Gedanken machen, wie man ihn ansteuert. Gewöhnlich will man die Motoren ja sowohl in Bezug auf Drehrichtung und Geschwindigkeit über eine Programmiersprache steuern. Daher wird in der Regel erst mal ein Controllerboard benötigt. Leider kann man an die wenigsten Controllerboards einen Getriebemotor direkt anschließen, eine der wenigen Ausnahmen ist das [[RN-Control]]-Board und das RNBFRA-Board. Bei beiden Boards ist es einfach, dort müssen die Getriebemotoren einfach nur an die Schraubklemmen angeschlossen werden, danach kann man sofort mit der Programmierung loslegen.&lt;br /&gt;
&lt;br /&gt;
Ich möchte hier aber aufzeigen, wie man Motoren auch bei anderen Boards anschließen kann. Die gleiche Technik läßt sich natürlich auch nutzen, um z.B. mehr als zwei Motoren an [[RN-Control]] anzuschließen.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Relais==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode, um Motoren per [[Microcontroller|Controller]] anzusteuern, erreicht man durch die Verwendung von Relais. Mit einem Relais, das zwei Umschaltkontakte besitzt, lässt sich über einen einzelnen Controllerport bequem die Drehrichtung wechseln.&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckerelais.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Da auch Relais wegen des Strombedarfes nicht direkt vom Controller geschaltet werden können, wurde in dem oberen Beispiel ein Transistor vorangestellt. Die Diode dient nur dazu, die Spannungen, die beim Ausschalten des Relais induziert werden, abzuleiten. Ohne Diode funktioniert das Ganze in der Regel auch, jedoch könnte der Transistor oder sogar der Controller durch die induzierte Spannung beschädigt werden. &lt;br /&gt;
Die Schaltung ist also in der Lage, die Drehrichtung umzuschalten, jedoch nicht in der Lage, den Motor zu stoppen. Um den Motor ganz auszuschalten, müsste man noch ein weiteres Relais vorsehen, das die gesamte Motorspannung abschaltet. Ein Schaltbild können wir uns ersparen, da das Ganze recht ähnlich aussieht. &lt;br /&gt;
Der große Nachteil von Relaisschaltungen ist, dass die Geschwindigkeit des Motors nicht geregelt werden kann, zudem haben Relais bei sehr vielen Schaltvorgängen einen gewissen Verschleiß. &lt;br /&gt;
Vorteil der Schaltung ist jedoch, das man auch sehr große Lasten/Motoren schalten kann.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit MOS-FET==&lt;br /&gt;
===Neufassung===&lt;br /&gt;
{{Ausbauwunsch|Die Neufassung kann im momentanen Stand nur als Anregung verstanden werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere fehlen noch angepasste Schaltpläne.&lt;br /&gt;
&lt;br /&gt;
Einige der Anmerkungen aus dem Abschnitt &amp;quot;Kritik an der Schaltung&amp;quot; sind in der Neufassung noch nicht enthalten, die Beschreibung von Verzögerungsgliedern müsste auch eine Erklärung enthalten, welche Verzögerung mit welchen Werten erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung komplett fertig ist, sollten die alten Texte weg.&lt;br /&gt;
}}&lt;br /&gt;
====Grundprinzip====&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz.&lt;br /&gt;
&lt;br /&gt;
Die Grundschaltung besteht aus 2 N-Kanal-MOSFET (hier BUZ11) und zwei P-Kanal-MOSFET (hier IRF5305), mit denen die Motoranschlüsse nach GND bzw. UB geschaltet werden. Zusätzlich sind noch 4 Schottky-Dioden (z.B. SB530) erforderlich, um Induktionsströme des Motors abzuleiten. Die Dioden werden in Sperrichtung von den beiden Motoranschlüssen nach GND bzw. UB geschaltet.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss die Beschaltung der Gate-Eingänge so erfolgen, dass zum Starten des Motors die Transistoren einer Diagonale auf &amp;quot;leitend&amp;quot; und die der anderen auf &amp;quot;sperrend&amp;quot; geschaltet werden. Zum Anhalten des Motors werden z.B. die unteren auf leitend und die oberen auf sperrend geschaltet - Der Motor wird dadurch schnell abgebremst, denn durch einen Transistor und eine Freilaufdiode fließt ein nicht unerheblicher Bremsstrom.&lt;br /&gt;
Alternativ kann man auch alle Transistoren auf sperrend schalten, der Motor läuft dann im Leerlauf aus.&lt;br /&gt;
&lt;br /&gt;
Die Transistoren einer Seite dürfen nicht dauerhaft gleichzeitig auf &amp;quot;leitend&amp;quot; geschaltet werden, da dies einen Kurzschluss verursacht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindestens bei dem Transistor BUZ11 handelt es sich um ein veraltetes Modell. Wenn es auf hohe Leistung ankommt, sollte da ein anderer Transistor gewählt werden.&lt;br /&gt;
&lt;br /&gt;
====Elektrische Ansteuerung der Gates====&lt;br /&gt;
Beim Umschalten der Transistoren entsteht eine erhöhte Verlustleistung - der Widerstand wechselt von sperrend (sehr großer Widerstand) nach leitend (sehr kleiner Widerstand) und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Enden des Schaltvorgangs befindet sich der Transistor in der &amp;quot;Widerstandsphase&amp;quot; (weder ganz leitend, noch ganz sperrend), die eine erhebliche Verlustleistung und damit Erwärmung mit sich bringt.&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte der Schaltvorgang - insbesondere wenn für eine PWM-Gegelung sehr oft geschaltet werden soll - möglichst schnell erfolgen. Da zum Umschalten die durch den Aufbau des MOSFETs bedingte Gatekapazität umgeladen werden muss, ist hierzu (sehr kurzzeitig) ein hoher Stromfluss nötig.&lt;br /&gt;
=====Schaltung direkt am Port=====&lt;br /&gt;
Eine Ansteuerung unmittelbar über den Ausgang eines Mikrocontrollers (oder eines TTL-IC) ist schon wegen der benötigten Spannungen nicht möglich. &lt;br /&gt;
&lt;br /&gt;
Bei den N-FET könnte man sog. &amp;quot;Logik-MOSFET&amp;quot; nehmen, die bereits bei 5V ausreichend leitet. &lt;br /&gt;
&lt;br /&gt;
Bei den P-MOSFET bemisst sich die Schaltspannung gegen UB, mit einem 5V Port und UB=12V würde also zwischen -12V und -7V umgeschaltet, was einen P-MOSFET erfordern würde, der bereits bei -7V sperrt.&lt;br /&gt;
&lt;br /&gt;
Dass ein Portpin nur einen geringen Stromfluss (~20mA) zulässt, ist ein weiteres Problem und verhindert einen Schaltvorgang mit idealer steiler Flanke. Allerdings ist die Schaltungsvariante mit einem Transistor in diesem Punkt keinesfalls besser, wenn die Gatekapazität durch den PullUp-Widerstand umgeladen werden muss.&lt;br /&gt;
=====Schaltung mit einem Transistor=====&lt;br /&gt;
Eine einfache Steuerschaltung besteht aus einem Transistor-Schalter und einem Pull-Up-Widerstand. Als Schalter hab ich 1/7 eines ULN2003 IC verwendet, als PullUp 2200 Ohm. Ein diskreter Aufbau mit 1 Transistor und 2 Widerständen ist aber auch nicht komplizierter.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der Einfachheit, der Nachteil liegt darin, dass die Schaltung nicht sonderlich schnell vonstatten geht: Für die Schaltung des FET muss die Gate-Kapazität transferiert werden, was insbesondere beim Wechsel von 0V nach UB einen Moment dauert, da die Ladung durch den Widerstand hindurch muss.&lt;br /&gt;
&lt;br /&gt;
Ein kleinerer Widerstand könnte hier helfen, verursacht allerdings einen nicht unerheblichen Stromfluss im geschalteten Zustand (zulässige Verlustleistung beachten).&lt;br /&gt;
=====Schaltung mit zwei Transistoren=====&lt;br /&gt;
Eine bessere Ansteuerung sollte sich ergeben, wenn man zwei Transistoren zur Gate-Ansteuerung verwendet: Einer schaltet gegen 0V, der andere Gegen UC. So kann man erreichen, dass in beide Richtungen rasch umgeschaltet werden kann.&lt;br /&gt;
=====Integrierte Gate-Treiber=====&lt;br /&gt;
Statt der Beschaltung mit zwei Transistoren kann man auch einen integrierten MOSFET-Treiber verwenden. Mit derartige IC sind darauf ausgelegt, kurzfristig den für eine Umschaltung benötigten hohen Stromfluss zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Treiber-IC, die zur Ansteuerung der oberen Transistoren eine Spannung oberhalb von UB erzeugen. Mit solchen Highside-Treibern kann die H-Brücke auch aus 4 N-Kanal-Transistoren gebaut werden, was den Vorteil hat, dass N-Kanal-FET mit geringerem Schaltwiderstand zu bekommen sind.&lt;br /&gt;
&lt;br /&gt;
====Logische Ansteuerung der Gates====&lt;br /&gt;
Nach der elektrischen Ansteuerung ist die logische Ansteuerung durch den Mikrocontroller zu überlegen.&lt;br /&gt;
&lt;br /&gt;
=====Mögliche Querströme=====&lt;br /&gt;
In der H-Brücke sind zwei problematische Zustände zu berücksichtigen:&lt;br /&gt;
&lt;br /&gt;
1. Das offensichtliche Problem ist ein Kurzschluss: Wenn beide Transistoren einer Seite auf leitend geschaltet werden wird dadurch ein Kurzschluss erzeugt. Falls vorhanden brennt die Sicherung durch - ist keine Sicherung vorhanden, brennt was anderes durch.&lt;br /&gt;
&lt;br /&gt;
2. Ein nicht so offensichtliches Problem rührt daher, dass der Schaltvorgang nur mit endlicher Geschwindigkeit abläuft und der Transistor auch schon vor Erreichen des Zielwertes der Gate-Spannung erheblichen Strom leitet. Hierdurch kommt es zu einem Kurzschluss durch den nicht mehr richtig gesperrten und den noch nicht richtig gesperrten Transistor.&lt;br /&gt;
&lt;br /&gt;
Die Stromspitze selbst liegt noch im Rahmen der Spezifikationen der Transistoren. Sofern ein Messwiderstand von z.B. 0,1 Ohm da ist oder die Spannungsquelle einen vergleichbaren Innenwiderstand hat fließt ein Strom von weniger als 70A, die Transistoren sind jeweils für Spitzen von über 100A spezifiziert.&lt;br /&gt;
&lt;br /&gt;
Allerdings hat die Stromspitze drei Auswirkungen: &lt;br /&gt;
&lt;br /&gt;
# Die Transistoren erwärmen sich&lt;br /&gt;
# Es kann an einem Messwiderstand zu einer Spannungsspitze kommen&lt;br /&gt;
# Die Versorgungsspannung bricht kurzzeitig zusammen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Erwärmung des Transistors ist solange kein Problem, wie nur selten umgeschaltet wird. Bei einer Regelung per PWM könnten sich die kleinen Energiemengen zu einem relevanten Problem addieren. &lt;br /&gt;
&lt;br /&gt;
Da die Erwärmung - sofern sie relevant wird - leicht ohne Messinstrumente feststellbar ist, dürfte dieser Teil des Problems insofern handhabbar sein, als man leicht feststellen kann, ob das Problem relevant ist und das Problem auf die Transistoren beschränkt sind.&lt;br /&gt;
&lt;br /&gt;
Bei Leerlauf-Schaltvorgängen im Abstand von 1/15 Sekunden habe ich keine Erwärmung der Transistoren feststellen können, es wurden auch keine zusätzlichen Kühlkörper verwendet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die Spannungsspitze am Messwiderstand kann abgeleitet werden:&lt;br /&gt;
Als weitere Vorsichtsmaßnahme habe ich den Messport des Controllers mit einem Widerstand und einer Z5.1 Diode abgesichert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Störung der Versorgungsspannung lässt sich ohne Oszilloskop nicht messen. Insbesondere in umfangreicheren Schaltungen können Störungen an ganz anderen Stellen (z.B. bei Sensoren) auftreten, die man dann nicht gleich mit der Motorsteuerung in Verbindung bringt.&lt;br /&gt;
&lt;br /&gt;
Um die Störung vom Controller fernzuhalten habe ich dem Spannungswandler vorsichtshalber eine kleine Schottky-Diode (SB140) vorgeschaltet, um ein Entladen des Stützkondensators zu verhindern.&lt;br /&gt;
&lt;br /&gt;
=====softwaremäßige Ansteuerung=====&lt;br /&gt;
Die einfachste Art der Ansteuerung besteht darin, die Schalter der 4 Gates mit 4 Ausgängen des Controllers zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die korrekte Ansteuerung muss dann durch die Software garantiert werden. &lt;br /&gt;
&lt;br /&gt;
Eine Fehlschaltung der Software z.B. bei einem Absturz kann allerdings zur Zerstörung der Schaltung führen, die Schaltung sollte also in jedem Fall eine Sicherung haben.&lt;br /&gt;
&lt;br /&gt;
=====Einfache Ansteuerung=====&lt;br /&gt;
Etwas sicherer ist es, die Schaltung so aufzubauen, dass ein Kurzschluss nicht dauerhaft geschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
Hierzu habe ich die Schaltung so aufgebaut, dass die Gates einer Seite jeweils gemeinsam geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von 0V sperrt der N-MOSFET (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V), der P-MOSFET leitet bei dieser Gate-Spannung, da hier U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=-UB ist. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von UB verhält es sich genau umgekehrt: Der N-MOSFET leitet (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=UB) und der P-MOSFET sperrt (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V)&lt;br /&gt;
&lt;br /&gt;
Diese einfache Ansteuerung benötigt lediglich zwei Transistorschalter und auch nur 2 Port-Pins, hat jedoch den Nachteil, dass die oben beschriebenen Querströme auftreten.&lt;br /&gt;
=====Verbesserungsmöglichkeiten=====&lt;br /&gt;
Zur Lösung des Querstrom-Problems gibt es mehrere Ansatzmöglichkeiten, die ebenfalls mit zwei Controller-Ausgängen auskommen.&lt;br /&gt;
----&lt;br /&gt;
Mittels Logik-Bausteinen werden zwei Ausgänge des Controllers so umgesetzt, dass die folgenden Zustände geschaltet werden können:&lt;br /&gt;
&lt;br /&gt;
# Motor-Stop: untere Transistoren leitend, obere sperrend (oder umgekehrt)&lt;br /&gt;
# Motor-Vorlauf: 1. Diagolale leitend&lt;br /&gt;
# Motor-Rücklauf: 2. Diagonale leitend&lt;br /&gt;
# Motor-Leerlauf: Alle Transistoren sperrend&lt;br /&gt;
&lt;br /&gt;
Die Querstrom-Problematik kann hierbei softwaremäßig gelöst werden, indem beim Umschalten jeweils kurz der Leerlauf geschaltet wird, damit alle Transistoren sperren.&lt;br /&gt;
----&lt;br /&gt;
Eine andere Möglichkeit besteht darin, das Umladen der Gate-Kapazität asymmetrisch zu gestalten, so dass die Transistoren schneller auf sperrend als auf leitend geschaltet werden. Eine einfache Möglichkeit ist die Parallelschaltung einer Diode und eines Widerstandes: In Sperr-Richtung fließt die Ladung langsamer als in die Durchlass-Richtung.&lt;br /&gt;
===Heidingscher Encoder===&lt;br /&gt;
Aufgrund der Kritik an der Schaltung entschied ich mich einen neuen, einfachen sowie preisgünstigen Encoder zu entwickeln, den man mit der 74series aufbauen kann. Als Treiber können sowohl Transistoren verwendet werden, dabei aber Vorwiderstände nicht vergessen! Die 74series sind mit 20mA Treiberstrom also natürlich nicht zum direkten Treiben geeignet.&lt;br /&gt;
Die Logikanzeigen in den Grafiken sollen je einen Transistor bzw. Mosfet darstellen. Eventuelle Freilaufdioden müssen natürlich noch hinzugefügt werden.&lt;br /&gt;
====PR Encoder====&lt;br /&gt;
[[Bild:Prtreiber.png]]&lt;br /&gt;
&lt;br /&gt;
Der PR Encoder(PWM-Richtung Encoder) ist mit zwei NOR Gates sowie eines Inverters aufgebaut, d.h. man kann ihn mit nur einem IC(74HC(T)02) aufbauen. Will mein 2 Encoder verwenden, empfliehlt sich den Inverter auszulagern (74HC(T)04 oder 74HC(T)14 Sollte man keinen Schmitt-Trigger benötigen empfiehlt sich aus Schnelligkeitsgründen die 74HC(T)04 Variante). &lt;br /&gt;
Alternativ ist es noch möglich sich den Inverter zu sparen, und die Ansteuerung für den P(WM) Kanal invertiert laufen zu lassen.  &lt;br /&gt;
====PRK Encoder====&lt;br /&gt;
[[Bild:Prktreiber.png]]&lt;br /&gt;
&lt;br /&gt;
Der Prk-Encoder(PWM-Richtung-Kurzschluss-Encoder) ist eine Erweiterung des PR-Encoders. Er erlaubt es zusätzlich, die Motoren durch einen Kurzschluss zu stoppen.&lt;br /&gt;
Aufgebaut werden kann dieser aus 1 NOR und 1 Nand Gate. Dabei werden 3 Nand-Gates als Inverter beschaltet. (d.h. eine die Leitung die übrig bleibt auf Vcc).&lt;br /&gt;
====Support====&lt;br /&gt;
Fragen einfach in das Forum posten, oder mich anschreiben(User s.o.)&lt;br /&gt;
===Alte Schaltungsbeschreibung===&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung! Die Schaltung ist so nicht zu verwenden! Siehe unter '''Kritik an der Schaltung'''&lt;br /&gt;
}}&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz. Eine der interessantesten Schaltungen, die im Roboternetz vorgestellt wurde, dürfte diese sein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckemosfet.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Den 74HC26N gibts wohl nicht , nur die TTL-Version 74LS26, die HC-Mos-Version lautet 74HC03.&lt;br /&gt;
&lt;br /&gt;
Eine sogenannte H-Brücke, die nur aus zwei MOSFETSs und einem Logik-IC besteht. Mit zwei Controllerports kann diese Schaltung sowohl Geschwindigkeit als auch Drehrichtung regeln. Für die Geschwindigkeit ist ein sogenannter [[PWM]]-Port notwendig. Also ein Port, der durch ein gepulstes Signal den Motor etlichemal innerhalb einer Sekunde ein- und ausschaltet und somit quasi die Leistung regelt (siehe [[PWM]]).&lt;br /&gt;
Die Schaltung ist so konstruiert, dass immer nur zwei Transistoren durchschalten. Auf diese Weise fließt einmal der Strom von links oben nach rechts unten und einmal von rechts oben nach links unten, der Motor wird also ähnlich wie bei der Relaisschaltung umgepolt. &lt;br /&gt;
Bei niedriger [[PWM]]_Frequenz sollte die Schaltung durchaus für einige Ampere geeignet sein, wobei ca. 8 bis 13V ideal sein sollten.&lt;br /&gt;
&lt;br /&gt;
Das Logic-IC wurde durch 3x BC547 Transitoren ersetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hbrückenmosfet BD547.PNG|center|900px]]&lt;br /&gt;
&lt;br /&gt;
====Kritik an der Schaltung====&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung wird im Forum von mehreren Leuten, u.A. Ratber, shaun, massiv kritisiert, z.B. hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067&amp;amp;sid=892e80c6cd2d003292e607bcd7a7123a .&lt;br /&gt;
&lt;br /&gt;
Ich habe leider nicht das Wissen eine bessere Lösung zu liefern. Das Problem sind die Querströme: Im Umschaltmoment sind highside und lowside switch für kurze Zeit beide leitend. Das entspricht einem Kurzschluss der Versorgungsleitung bei jedem Umschalten mit allen damit verbundenen Problemen (Erwärmung, Schwingung, Sicherungen, Reset). Aus diesem Grund sind NAND-Gatter nicht geeignet!&lt;br /&gt;
&lt;br /&gt;
Zum Umschalten muss man&lt;br /&gt;
*den bisher leitenden Mosfet ausschalten,&lt;br /&gt;
*dann etwas warten,&lt;br /&gt;
*und schließlich den nächsten Mosfet schließen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man erreichen, indem man den Einschaltmoment &lt;br /&gt;
*durch RC-Glieder verzögert und &lt;br /&gt;
*den Ausschaltmoment durch Dioden beschleunigt.&lt;br /&gt;
Die entstehenden Schaltungen sind komplex, benötigen viele Bauteile und sind fehleranfällig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten sind integrierte Mosfet-Treiber. Diese haben oft eine einstellbare Tot-Zeit (''Dead-Time''), können hohe Leistungen zum Umladen der Gatekapazität liefern und beachten andere Effekte wie ''Propagation-Time'', Veränderung des Source Potentials beim Highside-switch, etc.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung von shaun:'''&lt;br /&gt;
&lt;br /&gt;
die gezeigte Schaltung taugt auch nur als Prinzipschaltung bedingt, da man einen variierenden Aufwand in eine sichere Verriegelung investieren müsste. Bei fixer und nicht zu hoher Betriebsspannung könnte man mit RD-Kombinationen in den Gateleitungen das Ausschalten beschleunigen und das Einschalten verzögern, so dass die Querleitung wegfällt. Allerdings bewirkt diese simple R-Cg-Verzögerung größere Schaltverluste. &lt;br /&gt;
&lt;br /&gt;
Setzt man die Vezögerung vor dedizierte Treiber, müssen diese wiederum leistungsfähig genug zum Umladen der Gates sein und bis an die Versorgung heranreichen, weshalb man an diesem Punkt überlegen sollte, ob 95% duty cycle nicht auch reichen würden ''(Anmerkung: Bezug auf bootstrapping?)'' und man integrierte Treiber für reine N-Kanal-Bestückung einsetzen sollte - spart dann wieder etwas Verluste am Highside-Switch, weil N-Kanäler gleicher Generation und Leistungsklasse einen niedrigeren Rds(on) als ihre P-Pendants haben.&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Eine vernünftige diskrete Ansteuerung für eine H-Brücke.&lt;br /&gt;
Korrektur auf Rechtschreibfehler, Zeichensetzung, Schreibstil, Fachausdrücke. Gibt's denn keinen der etwas verbessern möchte?}}&lt;br /&gt;
==Ansteuerung mit einem LeistungsOPV==&lt;br /&gt;
Die wohl preislich und platztechnisch günstigste Alternative zur Ansteuerung von Motoren in H-Brücken ist die Verwendung von (Leistungs-)Operationsverstärkern. &lt;br /&gt;
===Heidingscher Motortreiber=== &lt;br /&gt;
Bei dem Heidingschen Motortreiber wird jeder Anschluss des Motors mit einem Ausgang des Operationsverstärker verbunden, die Eingänge des OPVs selbst als Komparator. Diese Methode ist für kleine und mittlere Motoren(=&amp;lt; 1A) und mäßige PWM-Frequenzen(&amp;lt;10kHz) gut geeignet. Ein RB35 von Conrad kann damit problemlos angesteuert werden. Bei zu hohen PWM-Frequenzen ist die SlewRate von vielen OPVs zu gering und die entsprechenden OPVs sind dann viel zu teuer und man sollte eine Ansteuerung per Mosfet(s.o.) bevorzugen. Momentan hat sich der TCA 0372 DP1 (57ct bei Reichelt) Verwendung gefunden. &lt;br /&gt;
Weitere Informationen sind in folgendem Forumsbeitrag zu finden:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/viewtopic.php?t=38412&lt;br /&gt;
===Gleichstromansteuerung===&lt;br /&gt;
Eine weitere Möglichkeit ist es, dem Operationsverstärker eine Gleichspannung vorzugeben, mit denen der OPV die Motoren ansteuert. Diese Methode eignet sich sehr gut für analoge Schaltkreise. Der Wirkungsgrad ist allerdings nicht der beste, da die restliche Spannung in Wärme umgesetzt wird. Zudem werden viele weitere komponenten benötigt, dass den Aufbau treuerer und fehleranfälliger macht.&lt;br /&gt;
Der entsprechenden Schaltkreis ist im Datenblatt des TCA 0372 DP1 zu finden.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Treiber IC L293 D==&lt;br /&gt;
&lt;br /&gt;
Dies ist ohne Zweifel die am häufigsten genutzte Ansteuerung bei Roboter-Bastlern: Man nimmt einfach das IC L293D, denn darin sind sogar zwei H-Brücken enthalten. Also mit einem IC lassen sich ohne weiteres externe Bauteile gleich zwei Motoren ansteuern. Zwar nur bis ca. 600mA, aber das reicht oft schon für kleinere bis mittlere Roboteranwendungen aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:L293Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel293d.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wie aus dem Schaltbild zu ersehen ist, werden für die Ansteuerung jedes Motors 3 Ports benötigt. Die Enable-Leitung führt man oft auf einen PWM-Port welcher wie bei der MOS-FET Schaltung oben die Geschwindigkeit regelt. Die beiden anderen Ports geben die Drehrichtung an. Immer wenn die Ports unterschiedliche Polarität haben dreht der Motor in eine bestimmte Richtung, je nachdem wo Low und High anliegt. Das Besondere ist, dass wenn an beiden Ports der gleiche Pegel anliegt, also zweimal Low oder High, dann wird nämlich der Motor kurzgeschlossen - das fungiert als Bremse. Das Bremsen kann bei Robotern durchaus nützlich sein. Zudem ist bei schnellen Richtungswechseln immer zu empfehlen zuerst kurz zu bremsen, um nicht den Motor oder Motortreiber zu stark zu belasten.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit dem Schaltkreis L298==&lt;br /&gt;
&lt;br /&gt;
Der Schaltkreis L298 ist quasi der große Bruder des L293D. Er beinhaltet auch zwei komplette H-Brücken, kann also auch zwei Motoren ansteuern. Die Pinbelegung ist ebenfalls dem L293D sehr ähnlich, jedoch verfügt er über eine andere Bauform:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:L298Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Unterschied besteht jedoch darin, dass jede H-Brücke bei L298 bis zu 2A belastet werden kann. Damit lassen sich also schon wesentlich größere Motoren ansteuern. Ein weiterer Vorzug sind die sogenannten SENSE-Ausgänge, über die der komplette Strom fließt. Oft wird hier ein Hochlastwiderstand  angeschlossen, um aus der abfallenden Spannung den genauen Strom berechnen zu können. Dies machen sich Steuerungen wie [http://www.roboternetz.de/phpBB2/viewtopic.php?t=2741 RN-Motor] oder aber andere Schrittmotoransteuerungen zunutze, um den Strom genau zu regeln. Benötigt man keine Strommessung, so müssen die Sense-Ausgänge immer direkt mit GND verbunden werden. In diesem Fall muss allerdings eine andere Strombegrenzung eingeplant werden. Wird keine Strombegrenzung eingebaut, müssen diese Widerstände trotztem eingebaut werden, da der Treiber sonst heiss wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel298.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Schaltbild gibt es hier [http://www.roboternetz.de/bilder/schaltung298getriebe.gif]&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit L6205==&lt;br /&gt;
Der Schaltkreis L6205 stellt eine etwas modernere Alternative zur L298 Ansteuerung dar. Die Ansteuerung ist praktisch identisch, der Schaltungsaufbau in etwa gleich. Beim L6205 sind keine Freilaufdioden mehr notwendig, dafür ist ein Kondensator und zwei Dioden für die interne Spannungserzeugung notwendig.&lt;br /&gt;
Ein großer Vorteil  ist auch das kein extra Kühlkörper mehr notwendig ist. Viele integrierte Schutzfunktionen im L6205 sorgen dafür das der Chip nicht so einfach zerstört werden kann. In der Praxis sind die angegeben 2,8A jedoch mit Vorsicht zu geniesen. Bei Testlayouts erwärmten sich die IC´s bereits bei 2A Dauerstrom (PWM) oft so stark das die automatische Temperaturabschaltung reagierte, somit wird man vermutlich ohne Kühlung oder großes Kühllayout auf er Platine auch nicht mehr als beim L298 erreichen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205ic.gif]] [[Bild:l6205pinbelegung.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Noch mehr Power gewünscht?==&lt;br /&gt;
&lt;br /&gt;
Obwohl der L298 schon einiges abdeckt, so kommt er spätestens bei den Scheibenwischermotoren langsam an seine Grenzen. Bei starker Belastung können solche Motoren kurzzeitig bis ca. 10 A und mehr ziehen. Für solch starke Motoren gibt es jetzt einen ganz interessanten Motorchip aus dem KFZ-Bereich: vnh3sp (Datenblatt im Roboternetz Download-Bereich). &lt;br /&gt;
Mit ihm lassen sich sogar recht große Motoren ansteuern; vorausgesetzt, man kühlt ihn entsprechend, so verträgt der Chip bis zu 30A. Aber selbst ohne Kühlung bietet er bedeutet mehr Leistung als der L298. Das Schöne, die Ansteuerung ist kaum anders als beim L298 und L293D.&lt;br /&gt;
&lt;br /&gt;
Kleiner Nachteil: Da es ein SMD-Chip mit 1mm Kontaktabstand ist, muss man schon eine geeignete Platine (spezielles Layout mit Kühlflächen) und etwas Löterfahrung besitzen. Inzwischen gibt es aber schon verschiedene RN-Projekte mit dem Chip (RN-Power, RN-Mini H-Bridge), Platinen und Chip können über den [http://www.shop.robotikhardware.de/shop/catalog/index.php Robotikhardware.de-Platinenservice] bezogen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:minihbridge_ansteuerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ zum [[SMD]]-Chip VNH3SP30 gibt es noch die Alternative VNH2SP30. Dieser Chip erlaubt zwar nur Motorspannungen zwischen 6 und 16 Volt, jedoch hat er einen wesentlich geringeren Innenwiderstand und wird deshalb nur etwa halb so warm wie der VNH3SP30. &lt;br /&gt;
Aus diesem Grund eignet er sich auch ideal für kleine Doppelmotorsteuerungen.&lt;br /&gt;
Natürlich gibt's auch hierfür ein Projekt und eine Bauanleitung, siehe [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
Das Schöne ist, dass es dieses RN-Projekt jetzt auch auch als Fertigmodul gibt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:rndualmotoransteuerung.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
==Endstufen mit I2C-Bus / RS232==&lt;br /&gt;
[[Bild:motctrl.png|thumb|Motoransteuerung über RS232, I2C, RC]]Verwendet man eine der oben vorgestellten H-Bridges, so wird immer vorausgesetzt das ein PWM-Signal und mehrere Ports zur Ansteuerung bereitstehen. Ist dies nicht der Fall weil diese vielleicht schon belegt sind, so lassen sich Endstufen durch einen zusätzlichen Microcontroller auch um beliebige Schnittstellen erweitern. Insbesondere über I2C lassen sich dadurch mehrere Motorboards über einen einzigen Bus ansteuern. Ein Beispiel ist der programmierte Controller MOTCTRL, der speziell für diese Aufgabe gedacht ist. Die Grundscháltung sieht man in der rechten Skizze.&lt;br /&gt;
&lt;br /&gt;
==Und nie vergessen Motoren zu entstören==&lt;br /&gt;
&lt;br /&gt;
Das Entstören dient dazu, das sogenannte &amp;quot;Bürstenfeuer&amp;quot; zu verhindern, wodurch Störungen hervorgerufen werden könnten. Und so wirds gemacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:entstoerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Getriebemotoren]]&lt;br /&gt;
* [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Drehmoment Berechnung]&lt;br /&gt;
* [http://www.roboternetz.de/motoruebersicht.html Motoren Übersicht]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65 Bauteilesets]&lt;br /&gt;
* [http://www.roboternetz.de/robotertutorial.html Roboter-Tutorial]&lt;br /&gt;
* [http://www.roboternetz.de Roboternetz Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;br /&gt;
[[Category:Elektronik]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13280</id>
		<title>Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13280"/>
				<updated>2008-03-15T12:10:22Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: nochmals layout gefixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hat man sich entschlossen, für seinen Roboter oder andere Konstruktion einen Getriebemotor zu verwenden, so muss man sich Gedanken machen, wie man ihn ansteuert. Gewöhnlich will man die Motoren ja sowohl in Bezug auf Drehrichtung und Geschwindigkeit über eine Programmiersprache steuern. Daher wird in der Regel erst mal ein Controllerboard benötigt. Leider kann man an die wenigsten Controllerboards einen Getriebemotor direkt anschließen, eine der wenigen Ausnahmen ist das [[RN-Control]]-Board und das RNBFRA-Board. Bei beiden Boards ist es einfach, dort müssen die Getriebemotoren einfach nur an die Schraubklemmen angeschlossen werden, danach kann man sofort mit der Programmierung loslegen.&lt;br /&gt;
&lt;br /&gt;
Ich möchte hier aber aufzeigen, wie man Motoren auch bei anderen Boards anschließen kann. Die gleiche Technik läßt sich natürlich auch nutzen, um z.B. mehr als zwei Motoren an [[RN-Control]] anzuschließen.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Relais==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode, um Motoren per [[Microcontroller|Controller]] anzusteuern, erreicht man durch die Verwendung von Relais. Mit einem Relais, das zwei Umschaltkontakte besitzt, lässt sich über einen einzelnen Controllerport bequem die Drehrichtung wechseln.&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckerelais.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Da auch Relais wegen des Strombedarfes nicht direkt vom Controller geschaltet werden können, wurde in dem oberen Beispiel ein Transistor vorangestellt. Die Diode dient nur dazu, die Spannungen, die beim Ausschalten des Relais induziert werden, abzuleiten. Ohne Diode funktioniert das Ganze in der Regel auch, jedoch könnte der Transistor oder sogar der Controller durch die induzierte Spannung beschädigt werden. &lt;br /&gt;
Die Schaltung ist also in der Lage, die Drehrichtung umzuschalten, jedoch nicht in der Lage, den Motor zu stoppen. Um den Motor ganz auszuschalten, müsste man noch ein weiteres Relais vorsehen, das die gesamte Motorspannung abschaltet. Ein Schaltbild können wir uns ersparen, da das Ganze recht ähnlich aussieht. &lt;br /&gt;
Der große Nachteil von Relaisschaltungen ist, dass die Geschwindigkeit des Motors nicht geregelt werden kann, zudem haben Relais bei sehr vielen Schaltvorgängen einen gewissen Verschleiß. &lt;br /&gt;
Vorteil der Schaltung ist jedoch, das man auch sehr große Lasten/Motoren schalten kann.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit MOS-FET==&lt;br /&gt;
===Neufassung===&lt;br /&gt;
{{Ausbauwunsch|Die Neufassung kann im momentanen Stand nur als Anregung verstanden werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere fehlen noch angepasste Schaltpläne.&lt;br /&gt;
&lt;br /&gt;
Einige der Anmerkungen aus dem Abschnitt &amp;quot;Kritik an der Schaltung&amp;quot; sind in der Neufassung noch nicht enthalten, die Beschreibung von Verzögerungsgliedern müsste auch eine Erklärung enthalten, welche Verzögerung mit welchen Werten erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung komplett fertig ist, sollten die alten Texte weg.&lt;br /&gt;
}}&lt;br /&gt;
====Grundprinzip====&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz.&lt;br /&gt;
&lt;br /&gt;
Die Grundschaltung besteht aus 2 N-Kanal-MOSFET (hier BUZ11) und zwei P-Kanal-MOSFET (hier IRF5305), mit denen die Motoranschlüsse nach GND bzw. UB geschaltet werden. Zusätzlich sind noch 4 Schottky-Dioden (z.B. SB530) erforderlich, um Induktionsströme des Motors abzuleiten. Die Dioden werden in Sperrichtung von den beiden Motoranschlüssen nach GND bzw. UB geschaltet.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss die Beschaltung der Gate-Eingänge so erfolgen, dass zum Starten des Motors die Transistoren einer Diagonale auf &amp;quot;leitend&amp;quot; und die der anderen auf &amp;quot;sperrend&amp;quot; geschaltet werden. Zum Anhalten des Motors werden z.B. die unteren auf leitend und die oberen auf sperrend geschaltet - Der Motor wird dadurch schnell abgebremst, denn durch einen Transistor und eine Freilaufdiode fließt ein nicht unerheblicher Bremsstrom.&lt;br /&gt;
Alternativ kann man auch alle Transistoren auf sperrend schalten, der Motor läuft dann im Leerlauf aus.&lt;br /&gt;
&lt;br /&gt;
Die Transistoren einer Seite dürfen nicht dauerhaft gleichzeitig auf &amp;quot;leitend&amp;quot; geschaltet werden, da dies einen Kurzschluss verursacht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindestens bei dem Transistor BUZ11 handelt es sich um ein veraltetes Modell. Wenn es auf hohe Leistung ankommt, sollte da ein anderer Transistor gewählt werden.&lt;br /&gt;
&lt;br /&gt;
====Elektrische Ansteuerung der Gates====&lt;br /&gt;
Beim Umschalten der Transistoren entsteht eine erhöhte Verlustleistung - der Widerstand wechselt von sperrend (sehr großer Widerstand) nach leitend (sehr kleiner Widerstand) und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Enden des Schaltvorgangs befindet sich der Transistor in der &amp;quot;Widerstandsphase&amp;quot; (weder ganz leitend, noch ganz sperrend), die eine erhebliche Verlustleistung und damit Erwärmung mit sich bringt.&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte der Schaltvorgang - insbesondere wenn für eine PWM-Gegelung sehr oft geschaltet werden soll - möglichst schnell erfolgen. Da zum Umschalten die durch den Aufbau des MOSFETs bedingte Gatekapazität umgeladen werden muss, ist hierzu (sehr kurzzeitig) ein hoher Stromfluss nötig.&lt;br /&gt;
=====Schaltung direkt am Port=====&lt;br /&gt;
Eine Ansteuerung unmittelbar über den Ausgang eines Mikrocontrollers (oder eines TTL-IC) ist schon wegen der benötigten Spannungen nicht möglich. &lt;br /&gt;
&lt;br /&gt;
Bei den N-FET könnte man sog. &amp;quot;Logik-MOSFET&amp;quot; nehmen, die bereits bei 5V ausreichend leitet. &lt;br /&gt;
&lt;br /&gt;
Bei den P-MOSFET bemisst sich die Schaltspannung gegen UB, mit einem 5V Port und UB=12V würde also zwischen -12V und -7V umgeschaltet, was einen P-MOSFET erfordern würde, der bereits bei -7V sperrt.&lt;br /&gt;
&lt;br /&gt;
Dass ein Portpin nur einen geringen Stromfluss (~20mA) zulässt, ist ein weiteres Problem und verhindert einen Schaltvorgang mit idealer steiler Flanke. Allerdings ist die Schaltungsvariante mit einem Transistor in diesem Punkt keinesfalls besser, wenn die Gatekapazität durch den PullUp-Widerstand umgeladen werden muss.&lt;br /&gt;
=====Schaltung mit einem Transistor=====&lt;br /&gt;
Eine einfache Steuerschaltung besteht aus einem Transistor-Schalter und einem Pull-Up-Widerstand. Als Schalter hab ich 1/7 eines ULN2003 IC verwendet, als PullUp 2200 Ohm. Ein diskreter Aufbau mit 1 Transistor und 2 Widerständen ist aber auch nicht komplizierter.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der Einfachheit, der Nachteil liegt darin, dass die Schaltung nicht sonderlich schnell vonstatten geht: Für die Schaltung des FET muss die Gate-Kapazität transferiert werden, was insbesondere beim Wechsel von 0V nach UB einen Moment dauert, da die Ladung durch den Widerstand hindurch muss.&lt;br /&gt;
&lt;br /&gt;
Ein kleinerer Widerstand könnte hier helfen, verursacht allerdings einen nicht unerheblichen Stromfluss im geschalteten Zustand (zulässige Verlustleistung beachten).&lt;br /&gt;
=====Schaltung mit zwei Transistoren=====&lt;br /&gt;
Eine bessere Ansteuerung sollte sich ergeben, wenn man zwei Transistoren zur Gate-Ansteuerung verwendet: Einer schaltet gegen 0V, der andere Gegen UC. So kann man erreichen, dass in beide Richtungen rasch umgeschaltet werden kann.&lt;br /&gt;
=====Integrierte Gate-Treiber=====&lt;br /&gt;
Statt der Beschaltung mit zwei Transistoren kann man auch einen integrierten MOSFET-Treiber verwenden. Mit derartige IC sind darauf ausgelegt, kurzfristig den für eine Umschaltung benötigten hohen Stromfluss zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Treiber-IC, die zur Ansteuerung der oberen Transistoren eine Spannung oberhalb von UB erzeugen. Mit solchen Highside-Treibern kann die H-Brücke auch aus 4 N-Kanal-Transistoren gebaut werden, was den Vorteil hat, dass N-Kanal-FET mit geringerem Schaltwiderstand zu bekommen sind.&lt;br /&gt;
&lt;br /&gt;
====Logische Ansteuerung der Gates====&lt;br /&gt;
Nach der elektrischen Ansteuerung ist die logische Ansteuerung durch den Mikrocontroller zu überlegen.&lt;br /&gt;
&lt;br /&gt;
=====Mögliche Querströme=====&lt;br /&gt;
In der H-Brücke sind zwei problematische Zustände zu berücksichtigen:&lt;br /&gt;
&lt;br /&gt;
1. Das offensichtliche Problem ist ein Kurzschluss: Wenn beide Transistoren einer Seite auf leitend geschaltet werden wird dadurch ein Kurzschluss erzeugt. Falls vorhanden brennt die Sicherung durch - ist keine Sicherung vorhanden, brennt was anderes durch.&lt;br /&gt;
&lt;br /&gt;
2. Ein nicht so offensichtliches Problem rührt daher, dass der Schaltvorgang nur mit endlicher Geschwindigkeit abläuft und der Transistor auch schon vor Erreichen des Zielwertes der Gate-Spannung erheblichen Strom leitet. Hierdurch kommt es zu einem Kurzschluss durch den nicht mehr richtig gesperrten und den noch nicht richtig gesperrten Transistor.&lt;br /&gt;
&lt;br /&gt;
Die Stromspitze selbst liegt noch im Rahmen der Spezifikationen der Transistoren. Sofern ein Messwiderstand von z.B. 0,1 Ohm da ist oder die Spannungsquelle einen vergleichbaren Innenwiderstand hat fließt ein Strom von weniger als 70A, die Transistoren sind jeweils für Spitzen von über 100A spezifiziert.&lt;br /&gt;
&lt;br /&gt;
Allerdings hat die Stromspitze drei Auswirkungen: &lt;br /&gt;
&lt;br /&gt;
# Die Transistoren erwärmen sich&lt;br /&gt;
# Es kann an einem Messwiderstand zu einer Spannungsspitze kommen&lt;br /&gt;
# Die Versorgungsspannung bricht kurzzeitig zusammen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Erwärmung des Transistors ist solange kein Problem, wie nur selten umgeschaltet wird. Bei einer Regelung per PWM könnten sich die kleinen Energiemengen zu einem relevanten Problem addieren. &lt;br /&gt;
&lt;br /&gt;
Da die Erwärmung - sofern sie relevant wird - leicht ohne Messinstrumente feststellbar ist, dürfte dieser Teil des Problems insofern handhabbar sein, als man leicht feststellen kann, ob das Problem relevant ist und das Problem auf die Transistoren beschränkt sind.&lt;br /&gt;
&lt;br /&gt;
Bei Leerlauf-Schaltvorgängen im Abstand von 1/15 Sekunden habe ich keine Erwärmung der Transistoren feststellen können, es wurden auch keine zusätzlichen Kühlkörper verwendet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die Spannungsspitze am Messwiderstand kann abgeleitet werden:&lt;br /&gt;
Als weitere Vorsichtsmaßnahme habe ich den Messport des Controllers mit einem Widerstand und einer Z5.1 Diode abgesichert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Störung der Versorgungsspannung lässt sich ohne Oszilloskop nicht messen. Insbesondere in umfangreicheren Schaltungen können Störungen an ganz anderen Stellen (z.B. bei Sensoren) auftreten, die man dann nicht gleich mit der Motorsteuerung in Verbindung bringt.&lt;br /&gt;
&lt;br /&gt;
Um die Störung vom Controller fernzuhalten habe ich dem Spannungswandler vorsichtshalber eine kleine Schottky-Diode (SB140) vorgeschaltet, um ein Entladen des Stützkondensators zu verhindern.&lt;br /&gt;
&lt;br /&gt;
=====softwaremäßige Ansteuerung=====&lt;br /&gt;
Die einfachste Art der Ansteuerung besteht darin, die Schalter der 4 Gates mit 4 Ausgängen des Controllers zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die korrekte Ansteuerung muss dann durch die Software garantiert werden. &lt;br /&gt;
&lt;br /&gt;
Eine Fehlschaltung der Software z.B. bei einem Absturz kann allerdings zur Zerstörung der Schaltung führen, die Schaltung sollte also in jedem Fall eine Sicherung haben.&lt;br /&gt;
&lt;br /&gt;
=====Einfache Ansteuerung=====&lt;br /&gt;
Etwas sicherer ist es, die Schaltung so aufzubauen, dass ein Kurzschluss nicht dauerhaft geschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
Hierzu habe ich die Schaltung so aufgebaut, dass die Gates einer Seite jeweils gemeinsam geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von 0V sperrt der N-MOSFET (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V), der P-MOSFET leitet bei dieser Gate-Spannung, da hier U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=-UB ist. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von UB verhält es sich genau umgekehrt: Der N-MOSFET leitet (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=UB) und der P-MOSFET sperrt (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V)&lt;br /&gt;
&lt;br /&gt;
Diese einfache Ansteuerung benötigt lediglich zwei Transistorschalter und auch nur 2 Port-Pins, hat jedoch den Nachteil, dass die oben beschriebenen Querströme auftreten.&lt;br /&gt;
=====Verbesserungsmöglichkeiten=====&lt;br /&gt;
Zur Lösung des Querstrom-Problems gibt es mehrere Ansatzmöglichkeiten, die ebenfalls mit zwei Controller-Ausgängen auskommen.&lt;br /&gt;
----&lt;br /&gt;
Mittels Logik-Bausteinen werden zwei Ausgänge des Controllers so umgesetzt, dass die folgenden Zustände geschaltet werden können:&lt;br /&gt;
&lt;br /&gt;
# Motor-Stop: untere Transistoren leitend, obere sperrend (oder umgekehrt)&lt;br /&gt;
# Motor-Vorlauf: 1. Diagolale leitend&lt;br /&gt;
# Motor-Rücklauf: 2. Diagonale leitend&lt;br /&gt;
# Motor-Leerlauf: Alle Transistoren sperrend&lt;br /&gt;
&lt;br /&gt;
Die Querstrom-Problematik kann hierbei softwaremäßig gelöst werden, indem beim Umschalten jeweils kurz der Leerlauf geschaltet wird, damit alle Transistoren sperren.&lt;br /&gt;
----&lt;br /&gt;
Eine andere Möglichkeit besteht darin, das Umladen der Gate-Kapazität asymmetrisch zu gestalten, so dass die Transistoren schneller auf sperrend als auf leitend geschaltet werden. Eine einfache Möglichkeit ist die Parallelschaltung einer Diode und eines Widerstandes: In Sperr-Richtung fließt die Ladung langsamer als in die Durchlass-Richtung.&lt;br /&gt;
===Heidingscher Encoder===&lt;br /&gt;
Aufgrund der Kritik an der Schaltung entschied ich mich einen neuen, einfachen sowie preisgünstigen Encoder zu entwickeln, den man mit der 74series aufbauen kann. Als Treiber können sowohl Transistoren verwendet werden, dabei aber Vorwiderstände nicht vergessen! Die 74series sind mit 20mA Treiberstrom also natürlich nicht zum direkten Treiben geeignet.&lt;br /&gt;
Die Logikanzeigen in den Grafiken sollen je einen Transistor bzw. Mosfet darstellen. Eventuelle Freilaufdioden müssen natürlich noch hinzugefügt werden.&lt;br /&gt;
====PR Encoder====&lt;br /&gt;
[[Bild:Prtreiber.png]]&lt;br /&gt;
&lt;br /&gt;
Der PR Encoder(PWM-Richtung Encoder) ist mit zwei NOR Gates sowie eines Inverters aufgebaut, d.h. man kann ihn mit nur einem IC(74HC(T)02) aufbauen. Will mein 2 Encoder verwenden, empfliehlt sich den Inverter auszulagern (74HC(T)04 oder 74HC(T)14 Sollte man keinen Schmitt-Trigger benötigen empfiehlt sich aus Schnelligkeitsgründen die 74HC(T)04 Variante). &lt;br /&gt;
Alternativ ist es noch möglich sich den Inverter zu sparen, und die Ansteuerung für den P(WM) Kanal invertiert laufen zu lassen.  &lt;br /&gt;
====PRK Encoder===&lt;br /&gt;
[[Bild:Prktreiber.png]]&lt;br /&gt;
&lt;br /&gt;
Der Prk-Encoder(PWM-Richtung-Kurzschluss-Encoder) ist eine Erweiterung des PR-Encoders. Er erlaubt es zusätzlich, die Motoren durch einen Kurzschluss zu stoppen.&lt;br /&gt;
Aufgebaut werden kann dieser aus 1 NOR und 1 Nand Gate. Dabei werden 3 Nand-Gates als Inverter beschaltet. (d.h. eine die Leitung die übrig bleibt auf Vcc).&lt;br /&gt;
====Support====&lt;br /&gt;
Fragen einfach in das Forum posten, oder mich anschreiben(User s.o.)&lt;br /&gt;
===Alte Schaltungsbeschreibung===&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung! Die Schaltung ist so nicht zu verwenden! Siehe unter '''Kritik an der Schaltung'''&lt;br /&gt;
}}&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz. Eine der interessantesten Schaltungen, die im Roboternetz vorgestellt wurde, dürfte diese sein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckemosfet.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Den 74HC26N gibts wohl nicht , nur die TTL-Version 74LS26, die HC-Mos-Version lautet 74HC03.&lt;br /&gt;
&lt;br /&gt;
Eine sogenannte H-Brücke, die nur aus zwei MOSFETSs und einem Logik-IC besteht. Mit zwei Controllerports kann diese Schaltung sowohl Geschwindigkeit als auch Drehrichtung regeln. Für die Geschwindigkeit ist ein sogenannter [[PWM]]-Port notwendig. Also ein Port, der durch ein gepulstes Signal den Motor etlichemal innerhalb einer Sekunde ein- und ausschaltet und somit quasi die Leistung regelt (siehe [[PWM]]).&lt;br /&gt;
Die Schaltung ist so konstruiert, dass immer nur zwei Transistoren durchschalten. Auf diese Weise fließt einmal der Strom von links oben nach rechts unten und einmal von rechts oben nach links unten, der Motor wird also ähnlich wie bei der Relaisschaltung umgepolt. &lt;br /&gt;
Bei niedriger [[PWM]]_Frequenz sollte die Schaltung durchaus für einige Ampere geeignet sein, wobei ca. 8 bis 13V ideal sein sollten.&lt;br /&gt;
&lt;br /&gt;
Das Logic-IC wurde durch 3x BC547 Transitoren ersetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hbrückenmosfet BD547.PNG|center|900px]]&lt;br /&gt;
&lt;br /&gt;
====Kritik an der Schaltung====&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung wird im Forum von mehreren Leuten, u.A. Ratber, shaun, massiv kritisiert, z.B. hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067&amp;amp;sid=892e80c6cd2d003292e607bcd7a7123a .&lt;br /&gt;
&lt;br /&gt;
Ich habe leider nicht das Wissen eine bessere Lösung zu liefern. Das Problem sind die Querströme: Im Umschaltmoment sind highside und lowside switch für kurze Zeit beide leitend. Das entspricht einem Kurzschluss der Versorgungsleitung bei jedem Umschalten mit allen damit verbundenen Problemen (Erwärmung, Schwingung, Sicherungen, Reset). Aus diesem Grund sind NAND-Gatter nicht geeignet!&lt;br /&gt;
&lt;br /&gt;
Zum Umschalten muss man&lt;br /&gt;
*den bisher leitenden Mosfet ausschalten,&lt;br /&gt;
*dann etwas warten,&lt;br /&gt;
*und schließlich den nächsten Mosfet schließen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man erreichen, indem man den Einschaltmoment &lt;br /&gt;
*durch RC-Glieder verzögert und &lt;br /&gt;
*den Ausschaltmoment durch Dioden beschleunigt.&lt;br /&gt;
Die entstehenden Schaltungen sind komplex, benötigen viele Bauteile und sind fehleranfällig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten sind integrierte Mosfet-Treiber. Diese haben oft eine einstellbare Tot-Zeit (''Dead-Time''), können hohe Leistungen zum Umladen der Gatekapazität liefern und beachten andere Effekte wie ''Propagation-Time'', Veränderung des Source Potentials beim Highside-switch, etc.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung von shaun:'''&lt;br /&gt;
&lt;br /&gt;
die gezeigte Schaltung taugt auch nur als Prinzipschaltung bedingt, da man einen variierenden Aufwand in eine sichere Verriegelung investieren müsste. Bei fixer und nicht zu hoher Betriebsspannung könnte man mit RD-Kombinationen in den Gateleitungen das Ausschalten beschleunigen und das Einschalten verzögern, so dass die Querleitung wegfällt. Allerdings bewirkt diese simple R-Cg-Verzögerung größere Schaltverluste. &lt;br /&gt;
&lt;br /&gt;
Setzt man die Vezögerung vor dedizierte Treiber, müssen diese wiederum leistungsfähig genug zum Umladen der Gates sein und bis an die Versorgung heranreichen, weshalb man an diesem Punkt überlegen sollte, ob 95% duty cycle nicht auch reichen würden ''(Anmerkung: Bezug auf bootstrapping?)'' und man integrierte Treiber für reine N-Kanal-Bestückung einsetzen sollte - spart dann wieder etwas Verluste am Highside-Switch, weil N-Kanäler gleicher Generation und Leistungsklasse einen niedrigeren Rds(on) als ihre P-Pendants haben.&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Eine vernünftige diskrete Ansteuerung für eine H-Brücke.&lt;br /&gt;
Korrektur auf Rechtschreibfehler, Zeichensetzung, Schreibstil, Fachausdrücke. Gibt's denn keinen der etwas verbessern möchte?}}&lt;br /&gt;
==Ansteuerung mit einem LeistungsOPV==&lt;br /&gt;
Die wohl preislich und platztechnisch günstigste Alternative zur Ansteuerung von Motoren in H-Brücken ist die Verwendung von (Leistungs-)Operationsverstärkern. &lt;br /&gt;
===Heidingscher Motortreiber=== &lt;br /&gt;
Bei dem Heidingschen Motortreiber wird jeder Anschluss des Motors mit einem Ausgang des Operationsverstärker verbunden, die Eingänge des OPVs selbst als Komparator. Diese Methode ist für kleine und mittlere Motoren(=&amp;lt; 1A) und mäßige PWM-Frequenzen(&amp;lt;10kHz) gut geeignet. Ein RB35 von Conrad kann damit problemlos angesteuert werden. Bei zu hohen PWM-Frequenzen ist die SlewRate von vielen OPVs zu gering und die entsprechenden OPVs sind dann viel zu teuer und man sollte eine Ansteuerung per Mosfet(s.o.) bevorzugen. Momentan hat sich der TCA 0372 DP1 (57ct bei Reichelt) Verwendung gefunden. &lt;br /&gt;
Weitere Informationen sind in folgendem Forumsbeitrag zu finden:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/viewtopic.php?t=38412&lt;br /&gt;
===Gleichstromansteuerung===&lt;br /&gt;
Eine weitere Möglichkeit ist es, dem Operationsverstärker eine Gleichspannung vorzugeben, mit denen der OPV die Motoren ansteuert. Diese Methode eignet sich sehr gut für analoge Schaltkreise. Der Wirkungsgrad ist allerdings nicht der beste, da die restliche Spannung in Wärme umgesetzt wird. Zudem werden viele weitere komponenten benötigt, dass den Aufbau treuerer und fehleranfälliger macht.&lt;br /&gt;
Der entsprechenden Schaltkreis ist im Datenblatt des TCA 0372 DP1 zu finden.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Treiber IC L293 D==&lt;br /&gt;
&lt;br /&gt;
Dies ist ohne Zweifel die am häufigsten genutzte Ansteuerung bei Roboter-Bastlern: Man nimmt einfach das IC L293D, denn darin sind sogar zwei H-Brücken enthalten. Also mit einem IC lassen sich ohne weiteres externe Bauteile gleich zwei Motoren ansteuern. Zwar nur bis ca. 600mA, aber das reicht oft schon für kleinere bis mittlere Roboteranwendungen aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:L293Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel293d.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wie aus dem Schaltbild zu ersehen ist, werden für die Ansteuerung jedes Motors 3 Ports benötigt. Die Enable-Leitung führt man oft auf einen PWM-Port welcher wie bei der MOS-FET Schaltung oben die Geschwindigkeit regelt. Die beiden anderen Ports geben die Drehrichtung an. Immer wenn die Ports unterschiedliche Polarität haben dreht der Motor in eine bestimmte Richtung, je nachdem wo Low und High anliegt. Das Besondere ist, dass wenn an beiden Ports der gleiche Pegel anliegt, also zweimal Low oder High, dann wird nämlich der Motor kurzgeschlossen - das fungiert als Bremse. Das Bremsen kann bei Robotern durchaus nützlich sein. Zudem ist bei schnellen Richtungswechseln immer zu empfehlen zuerst kurz zu bremsen, um nicht den Motor oder Motortreiber zu stark zu belasten.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit dem Schaltkreis L298==&lt;br /&gt;
&lt;br /&gt;
Der Schaltkreis L298 ist quasi der große Bruder des L293D. Er beinhaltet auch zwei komplette H-Brücken, kann also auch zwei Motoren ansteuern. Die Pinbelegung ist ebenfalls dem L293D sehr ähnlich, jedoch verfügt er über eine andere Bauform:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:L298Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Unterschied besteht jedoch darin, dass jede H-Brücke bei L298 bis zu 2A belastet werden kann. Damit lassen sich also schon wesentlich größere Motoren ansteuern. Ein weiterer Vorzug sind die sogenannten SENSE-Ausgänge, über die der komplette Strom fließt. Oft wird hier ein Hochlastwiderstand  angeschlossen, um aus der abfallenden Spannung den genauen Strom berechnen zu können. Dies machen sich Steuerungen wie [http://www.roboternetz.de/phpBB2/viewtopic.php?t=2741 RN-Motor] oder aber andere Schrittmotoransteuerungen zunutze, um den Strom genau zu regeln. Benötigt man keine Strommessung, so müssen die Sense-Ausgänge immer direkt mit GND verbunden werden. In diesem Fall muss allerdings eine andere Strombegrenzung eingeplant werden. Wird keine Strombegrenzung eingebaut, müssen diese Widerstände trotztem eingebaut werden, da der Treiber sonst heiss wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel298.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Schaltbild gibt es hier [http://www.roboternetz.de/bilder/schaltung298getriebe.gif]&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit L6205==&lt;br /&gt;
Der Schaltkreis L6205 stellt eine etwas modernere Alternative zur L298 Ansteuerung dar. Die Ansteuerung ist praktisch identisch, der Schaltungsaufbau in etwa gleich. Beim L6205 sind keine Freilaufdioden mehr notwendig, dafür ist ein Kondensator und zwei Dioden für die interne Spannungserzeugung notwendig.&lt;br /&gt;
Ein großer Vorteil  ist auch das kein extra Kühlkörper mehr notwendig ist. Viele integrierte Schutzfunktionen im L6205 sorgen dafür das der Chip nicht so einfach zerstört werden kann. In der Praxis sind die angegeben 2,8A jedoch mit Vorsicht zu geniesen. Bei Testlayouts erwärmten sich die IC´s bereits bei 2A Dauerstrom (PWM) oft so stark das die automatische Temperaturabschaltung reagierte, somit wird man vermutlich ohne Kühlung oder großes Kühllayout auf er Platine auch nicht mehr als beim L298 erreichen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205ic.gif]] [[Bild:l6205pinbelegung.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Noch mehr Power gewünscht?==&lt;br /&gt;
&lt;br /&gt;
Obwohl der L298 schon einiges abdeckt, so kommt er spätestens bei den Scheibenwischermotoren langsam an seine Grenzen. Bei starker Belastung können solche Motoren kurzzeitig bis ca. 10 A und mehr ziehen. Für solch starke Motoren gibt es jetzt einen ganz interessanten Motorchip aus dem KFZ-Bereich: vnh3sp (Datenblatt im Roboternetz Download-Bereich). &lt;br /&gt;
Mit ihm lassen sich sogar recht große Motoren ansteuern; vorausgesetzt, man kühlt ihn entsprechend, so verträgt der Chip bis zu 30A. Aber selbst ohne Kühlung bietet er bedeutet mehr Leistung als der L298. Das Schöne, die Ansteuerung ist kaum anders als beim L298 und L293D.&lt;br /&gt;
&lt;br /&gt;
Kleiner Nachteil: Da es ein SMD-Chip mit 1mm Kontaktabstand ist, muss man schon eine geeignete Platine (spezielles Layout mit Kühlflächen) und etwas Löterfahrung besitzen. Inzwischen gibt es aber schon verschiedene RN-Projekte mit dem Chip (RN-Power, RN-Mini H-Bridge), Platinen und Chip können über den [http://www.shop.robotikhardware.de/shop/catalog/index.php Robotikhardware.de-Platinenservice] bezogen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:minihbridge_ansteuerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ zum [[SMD]]-Chip VNH3SP30 gibt es noch die Alternative VNH2SP30. Dieser Chip erlaubt zwar nur Motorspannungen zwischen 6 und 16 Volt, jedoch hat er einen wesentlich geringeren Innenwiderstand und wird deshalb nur etwa halb so warm wie der VNH3SP30. &lt;br /&gt;
Aus diesem Grund eignet er sich auch ideal für kleine Doppelmotorsteuerungen.&lt;br /&gt;
Natürlich gibt's auch hierfür ein Projekt und eine Bauanleitung, siehe [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
Das Schöne ist, dass es dieses RN-Projekt jetzt auch auch als Fertigmodul gibt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:rndualmotoransteuerung.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
==Endstufen mit I2C-Bus / RS232==&lt;br /&gt;
[[Bild:motctrl.png|thumb|Motoransteuerung über RS232, I2C, RC]]Verwendet man eine der oben vorgestellten H-Bridges, so wird immer vorausgesetzt das ein PWM-Signal und mehrere Ports zur Ansteuerung bereitstehen. Ist dies nicht der Fall weil diese vielleicht schon belegt sind, so lassen sich Endstufen durch einen zusätzlichen Microcontroller auch um beliebige Schnittstellen erweitern. Insbesondere über I2C lassen sich dadurch mehrere Motorboards über einen einzigen Bus ansteuern. Ein Beispiel ist der programmierte Controller MOTCTRL, der speziell für diese Aufgabe gedacht ist. Die Grundscháltung sieht man in der rechten Skizze.&lt;br /&gt;
&lt;br /&gt;
==Und nie vergessen Motoren zu entstören==&lt;br /&gt;
&lt;br /&gt;
Das Entstören dient dazu, das sogenannte &amp;quot;Bürstenfeuer&amp;quot; zu verhindern, wodurch Störungen hervorgerufen werden könnten. Und so wirds gemacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:entstoerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Getriebemotoren]]&lt;br /&gt;
* [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Drehmoment Berechnung]&lt;br /&gt;
* [http://www.roboternetz.de/motoruebersicht.html Motoren Übersicht]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65 Bauteilesets]&lt;br /&gt;
* [http://www.roboternetz.de/robotertutorial.html Roboter-Tutorial]&lt;br /&gt;
* [http://www.roboternetz.de Roboternetz Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;br /&gt;
[[Category:Elektronik]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13279</id>
		<title>Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13279"/>
				<updated>2008-03-15T12:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: layout gefixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hat man sich entschlossen, für seinen Roboter oder andere Konstruktion einen Getriebemotor zu verwenden, so muss man sich Gedanken machen, wie man ihn ansteuert. Gewöhnlich will man die Motoren ja sowohl in Bezug auf Drehrichtung und Geschwindigkeit über eine Programmiersprache steuern. Daher wird in der Regel erst mal ein Controllerboard benötigt. Leider kann man an die wenigsten Controllerboards einen Getriebemotor direkt anschließen, eine der wenigen Ausnahmen ist das [[RN-Control]]-Board und das RNBFRA-Board. Bei beiden Boards ist es einfach, dort müssen die Getriebemotoren einfach nur an die Schraubklemmen angeschlossen werden, danach kann man sofort mit der Programmierung loslegen.&lt;br /&gt;
&lt;br /&gt;
Ich möchte hier aber aufzeigen, wie man Motoren auch bei anderen Boards anschließen kann. Die gleiche Technik läßt sich natürlich auch nutzen, um z.B. mehr als zwei Motoren an [[RN-Control]] anzuschließen.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Relais==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode, um Motoren per [[Microcontroller|Controller]] anzusteuern, erreicht man durch die Verwendung von Relais. Mit einem Relais, das zwei Umschaltkontakte besitzt, lässt sich über einen einzelnen Controllerport bequem die Drehrichtung wechseln.&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckerelais.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Da auch Relais wegen des Strombedarfes nicht direkt vom Controller geschaltet werden können, wurde in dem oberen Beispiel ein Transistor vorangestellt. Die Diode dient nur dazu, die Spannungen, die beim Ausschalten des Relais induziert werden, abzuleiten. Ohne Diode funktioniert das Ganze in der Regel auch, jedoch könnte der Transistor oder sogar der Controller durch die induzierte Spannung beschädigt werden. &lt;br /&gt;
Die Schaltung ist also in der Lage, die Drehrichtung umzuschalten, jedoch nicht in der Lage, den Motor zu stoppen. Um den Motor ganz auszuschalten, müsste man noch ein weiteres Relais vorsehen, das die gesamte Motorspannung abschaltet. Ein Schaltbild können wir uns ersparen, da das Ganze recht ähnlich aussieht. &lt;br /&gt;
Der große Nachteil von Relaisschaltungen ist, dass die Geschwindigkeit des Motors nicht geregelt werden kann, zudem haben Relais bei sehr vielen Schaltvorgängen einen gewissen Verschleiß. &lt;br /&gt;
Vorteil der Schaltung ist jedoch, das man auch sehr große Lasten/Motoren schalten kann.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit MOS-FET==&lt;br /&gt;
===Neufassung===&lt;br /&gt;
{{Ausbauwunsch|Die Neufassung kann im momentanen Stand nur als Anregung verstanden werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere fehlen noch angepasste Schaltpläne.&lt;br /&gt;
&lt;br /&gt;
Einige der Anmerkungen aus dem Abschnitt &amp;quot;Kritik an der Schaltung&amp;quot; sind in der Neufassung noch nicht enthalten, die Beschreibung von Verzögerungsgliedern müsste auch eine Erklärung enthalten, welche Verzögerung mit welchen Werten erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung komplett fertig ist, sollten die alten Texte weg.&lt;br /&gt;
}}&lt;br /&gt;
====Grundprinzip====&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz.&lt;br /&gt;
&lt;br /&gt;
Die Grundschaltung besteht aus 2 N-Kanal-MOSFET (hier BUZ11) und zwei P-Kanal-MOSFET (hier IRF5305), mit denen die Motoranschlüsse nach GND bzw. UB geschaltet werden. Zusätzlich sind noch 4 Schottky-Dioden (z.B. SB530) erforderlich, um Induktionsströme des Motors abzuleiten. Die Dioden werden in Sperrichtung von den beiden Motoranschlüssen nach GND bzw. UB geschaltet.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss die Beschaltung der Gate-Eingänge so erfolgen, dass zum Starten des Motors die Transistoren einer Diagonale auf &amp;quot;leitend&amp;quot; und die der anderen auf &amp;quot;sperrend&amp;quot; geschaltet werden. Zum Anhalten des Motors werden z.B. die unteren auf leitend und die oberen auf sperrend geschaltet - Der Motor wird dadurch schnell abgebremst, denn durch einen Transistor und eine Freilaufdiode fließt ein nicht unerheblicher Bremsstrom.&lt;br /&gt;
Alternativ kann man auch alle Transistoren auf sperrend schalten, der Motor läuft dann im Leerlauf aus.&lt;br /&gt;
&lt;br /&gt;
Die Transistoren einer Seite dürfen nicht dauerhaft gleichzeitig auf &amp;quot;leitend&amp;quot; geschaltet werden, da dies einen Kurzschluss verursacht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindestens bei dem Transistor BUZ11 handelt es sich um ein veraltetes Modell. Wenn es auf hohe Leistung ankommt, sollte da ein anderer Transistor gewählt werden.&lt;br /&gt;
&lt;br /&gt;
====Elektrische Ansteuerung der Gates====&lt;br /&gt;
Beim Umschalten der Transistoren entsteht eine erhöhte Verlustleistung - der Widerstand wechselt von sperrend (sehr großer Widerstand) nach leitend (sehr kleiner Widerstand) und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Enden des Schaltvorgangs befindet sich der Transistor in der &amp;quot;Widerstandsphase&amp;quot; (weder ganz leitend, noch ganz sperrend), die eine erhebliche Verlustleistung und damit Erwärmung mit sich bringt.&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte der Schaltvorgang - insbesondere wenn für eine PWM-Gegelung sehr oft geschaltet werden soll - möglichst schnell erfolgen. Da zum Umschalten die durch den Aufbau des MOSFETs bedingte Gatekapazität umgeladen werden muss, ist hierzu (sehr kurzzeitig) ein hoher Stromfluss nötig.&lt;br /&gt;
=====Schaltung direkt am Port=====&lt;br /&gt;
Eine Ansteuerung unmittelbar über den Ausgang eines Mikrocontrollers (oder eines TTL-IC) ist schon wegen der benötigten Spannungen nicht möglich. &lt;br /&gt;
&lt;br /&gt;
Bei den N-FET könnte man sog. &amp;quot;Logik-MOSFET&amp;quot; nehmen, die bereits bei 5V ausreichend leitet. &lt;br /&gt;
&lt;br /&gt;
Bei den P-MOSFET bemisst sich die Schaltspannung gegen UB, mit einem 5V Port und UB=12V würde also zwischen -12V und -7V umgeschaltet, was einen P-MOSFET erfordern würde, der bereits bei -7V sperrt.&lt;br /&gt;
&lt;br /&gt;
Dass ein Portpin nur einen geringen Stromfluss (~20mA) zulässt, ist ein weiteres Problem und verhindert einen Schaltvorgang mit idealer steiler Flanke. Allerdings ist die Schaltungsvariante mit einem Transistor in diesem Punkt keinesfalls besser, wenn die Gatekapazität durch den PullUp-Widerstand umgeladen werden muss.&lt;br /&gt;
=====Schaltung mit einem Transistor=====&lt;br /&gt;
Eine einfache Steuerschaltung besteht aus einem Transistor-Schalter und einem Pull-Up-Widerstand. Als Schalter hab ich 1/7 eines ULN2003 IC verwendet, als PullUp 2200 Ohm. Ein diskreter Aufbau mit 1 Transistor und 2 Widerständen ist aber auch nicht komplizierter.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der Einfachheit, der Nachteil liegt darin, dass die Schaltung nicht sonderlich schnell vonstatten geht: Für die Schaltung des FET muss die Gate-Kapazität transferiert werden, was insbesondere beim Wechsel von 0V nach UB einen Moment dauert, da die Ladung durch den Widerstand hindurch muss.&lt;br /&gt;
&lt;br /&gt;
Ein kleinerer Widerstand könnte hier helfen, verursacht allerdings einen nicht unerheblichen Stromfluss im geschalteten Zustand (zulässige Verlustleistung beachten).&lt;br /&gt;
=====Schaltung mit zwei Transistoren=====&lt;br /&gt;
Eine bessere Ansteuerung sollte sich ergeben, wenn man zwei Transistoren zur Gate-Ansteuerung verwendet: Einer schaltet gegen 0V, der andere Gegen UC. So kann man erreichen, dass in beide Richtungen rasch umgeschaltet werden kann.&lt;br /&gt;
=====Integrierte Gate-Treiber=====&lt;br /&gt;
Statt der Beschaltung mit zwei Transistoren kann man auch einen integrierten MOSFET-Treiber verwenden. Mit derartige IC sind darauf ausgelegt, kurzfristig den für eine Umschaltung benötigten hohen Stromfluss zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Treiber-IC, die zur Ansteuerung der oberen Transistoren eine Spannung oberhalb von UB erzeugen. Mit solchen Highside-Treibern kann die H-Brücke auch aus 4 N-Kanal-Transistoren gebaut werden, was den Vorteil hat, dass N-Kanal-FET mit geringerem Schaltwiderstand zu bekommen sind.&lt;br /&gt;
&lt;br /&gt;
====Logische Ansteuerung der Gates====&lt;br /&gt;
Nach der elektrischen Ansteuerung ist die logische Ansteuerung durch den Mikrocontroller zu überlegen.&lt;br /&gt;
&lt;br /&gt;
=====Mögliche Querströme=====&lt;br /&gt;
In der H-Brücke sind zwei problematische Zustände zu berücksichtigen:&lt;br /&gt;
&lt;br /&gt;
1. Das offensichtliche Problem ist ein Kurzschluss: Wenn beide Transistoren einer Seite auf leitend geschaltet werden wird dadurch ein Kurzschluss erzeugt. Falls vorhanden brennt die Sicherung durch - ist keine Sicherung vorhanden, brennt was anderes durch.&lt;br /&gt;
&lt;br /&gt;
2. Ein nicht so offensichtliches Problem rührt daher, dass der Schaltvorgang nur mit endlicher Geschwindigkeit abläuft und der Transistor auch schon vor Erreichen des Zielwertes der Gate-Spannung erheblichen Strom leitet. Hierdurch kommt es zu einem Kurzschluss durch den nicht mehr richtig gesperrten und den noch nicht richtig gesperrten Transistor.&lt;br /&gt;
&lt;br /&gt;
Die Stromspitze selbst liegt noch im Rahmen der Spezifikationen der Transistoren. Sofern ein Messwiderstand von z.B. 0,1 Ohm da ist oder die Spannungsquelle einen vergleichbaren Innenwiderstand hat fließt ein Strom von weniger als 70A, die Transistoren sind jeweils für Spitzen von über 100A spezifiziert.&lt;br /&gt;
&lt;br /&gt;
Allerdings hat die Stromspitze drei Auswirkungen: &lt;br /&gt;
&lt;br /&gt;
# Die Transistoren erwärmen sich&lt;br /&gt;
# Es kann an einem Messwiderstand zu einer Spannungsspitze kommen&lt;br /&gt;
# Die Versorgungsspannung bricht kurzzeitig zusammen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Erwärmung des Transistors ist solange kein Problem, wie nur selten umgeschaltet wird. Bei einer Regelung per PWM könnten sich die kleinen Energiemengen zu einem relevanten Problem addieren. &lt;br /&gt;
&lt;br /&gt;
Da die Erwärmung - sofern sie relevant wird - leicht ohne Messinstrumente feststellbar ist, dürfte dieser Teil des Problems insofern handhabbar sein, als man leicht feststellen kann, ob das Problem relevant ist und das Problem auf die Transistoren beschränkt sind.&lt;br /&gt;
&lt;br /&gt;
Bei Leerlauf-Schaltvorgängen im Abstand von 1/15 Sekunden habe ich keine Erwärmung der Transistoren feststellen können, es wurden auch keine zusätzlichen Kühlkörper verwendet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die Spannungsspitze am Messwiderstand kann abgeleitet werden:&lt;br /&gt;
Als weitere Vorsichtsmaßnahme habe ich den Messport des Controllers mit einem Widerstand und einer Z5.1 Diode abgesichert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Störung der Versorgungsspannung lässt sich ohne Oszilloskop nicht messen. Insbesondere in umfangreicheren Schaltungen können Störungen an ganz anderen Stellen (z.B. bei Sensoren) auftreten, die man dann nicht gleich mit der Motorsteuerung in Verbindung bringt.&lt;br /&gt;
&lt;br /&gt;
Um die Störung vom Controller fernzuhalten habe ich dem Spannungswandler vorsichtshalber eine kleine Schottky-Diode (SB140) vorgeschaltet, um ein Entladen des Stützkondensators zu verhindern.&lt;br /&gt;
&lt;br /&gt;
=====softwaremäßige Ansteuerung=====&lt;br /&gt;
Die einfachste Art der Ansteuerung besteht darin, die Schalter der 4 Gates mit 4 Ausgängen des Controllers zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die korrekte Ansteuerung muss dann durch die Software garantiert werden. &lt;br /&gt;
&lt;br /&gt;
Eine Fehlschaltung der Software z.B. bei einem Absturz kann allerdings zur Zerstörung der Schaltung führen, die Schaltung sollte also in jedem Fall eine Sicherung haben.&lt;br /&gt;
&lt;br /&gt;
=====Einfache Ansteuerung=====&lt;br /&gt;
Etwas sicherer ist es, die Schaltung so aufzubauen, dass ein Kurzschluss nicht dauerhaft geschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
Hierzu habe ich die Schaltung so aufgebaut, dass die Gates einer Seite jeweils gemeinsam geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von 0V sperrt der N-MOSFET (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V), der P-MOSFET leitet bei dieser Gate-Spannung, da hier U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=-UB ist. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von UB verhält es sich genau umgekehrt: Der N-MOSFET leitet (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=UB) und der P-MOSFET sperrt (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V)&lt;br /&gt;
&lt;br /&gt;
Diese einfache Ansteuerung benötigt lediglich zwei Transistorschalter und auch nur 2 Port-Pins, hat jedoch den Nachteil, dass die oben beschriebenen Querströme auftreten.&lt;br /&gt;
=====Verbesserungsmöglichkeiten=====&lt;br /&gt;
Zur Lösung des Querstrom-Problems gibt es mehrere Ansatzmöglichkeiten, die ebenfalls mit zwei Controller-Ausgängen auskommen.&lt;br /&gt;
----&lt;br /&gt;
Mittels Logik-Bausteinen werden zwei Ausgänge des Controllers so umgesetzt, dass die folgenden Zustände geschaltet werden können:&lt;br /&gt;
&lt;br /&gt;
# Motor-Stop: untere Transistoren leitend, obere sperrend (oder umgekehrt)&lt;br /&gt;
# Motor-Vorlauf: 1. Diagolale leitend&lt;br /&gt;
# Motor-Rücklauf: 2. Diagonale leitend&lt;br /&gt;
# Motor-Leerlauf: Alle Transistoren sperrend&lt;br /&gt;
&lt;br /&gt;
Die Querstrom-Problematik kann hierbei softwaremäßig gelöst werden, indem beim Umschalten jeweils kurz der Leerlauf geschaltet wird, damit alle Transistoren sperren.&lt;br /&gt;
----&lt;br /&gt;
Eine andere Möglichkeit besteht darin, das Umladen der Gate-Kapazität asymmetrisch zu gestalten, so dass die Transistoren schneller auf sperrend als auf leitend geschaltet werden. Eine einfache Möglichkeit ist die Parallelschaltung einer Diode und eines Widerstandes: In Sperr-Richtung fließt die Ladung langsamer als in die Durchlass-Richtung.&lt;br /&gt;
===Heidingscher Encoder===&lt;br /&gt;
Aufgrund der Kritik an der Schaltung entschied ich mich einen neuen, einfachen sowie preisgünstigen Encoder zu entwickeln, den man mit der 74series aufbauen kann. Als Treiber können sowohl Transistoren verwendet werden, dabei aber Vorwiderstände nicht vergessen! Die 74series sind mit 20mA Treiberstrom also natürlich nicht zum direkten Treiben geeignet.&lt;br /&gt;
Die Logikanzeigen in den Grafiken sollen je einen Transistor bzw. Mosfet darstellen. Eventuelle Freilaufdioden müssen natürlich noch hinzugefügt werden.&lt;br /&gt;
====PR Encoder====&lt;br /&gt;
[[Bild:Prtreiber.png]]&lt;br /&gt;
Der PR Encoder(PWM-Richtung Encoder) ist mit zwei NOR Gates sowie eines Inverters aufgebaut, d.h. man kann ihn mit nur einem IC(74HC(T)02) aufbauen. Will mein 2 Encoder verwenden, empfliehlt sich den Inverter auszulagern (74HC(T)04 oder 74HC(T)14 Sollte man keinen Schmitt-Trigger benötigen empfiehlt sich aus Schnelligkeitsgründen die 74HC(T)04 Variante). &lt;br /&gt;
Alternativ ist es noch möglich sich den Inverter zu sparen, und die Ansteuerung für den P(WM) Kanal invertiert laufen zu lassen.  &lt;br /&gt;
====PRK Encoder===0&lt;br /&gt;
[[Bild:Prktreiber.png]]&lt;br /&gt;
Der Prk-Encoder(PWM-Richtung-Kurzschluss-Encoder) ist eine Erweiterung des PR-Encoders. Er erlaubt es zusätzlich, die Motoren durch einen Kurzschluss zu stoppen.&lt;br /&gt;
Aufgebaut werden kann dieser aus 1 NOR und 1 Nand Gate. Dabei werden 3 Nand-Gates als Inverter beschaltet. (d.h. eine die Leitung die übrig bleibt auf Vcc).&lt;br /&gt;
====Support====&lt;br /&gt;
Fragen einfach in das Forum posten, oder mich anschreiben(User s.o.)&lt;br /&gt;
===Alte Schaltungsbeschreibung===&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung! Die Schaltung ist so nicht zu verwenden! Siehe unter '''Kritik an der Schaltung'''&lt;br /&gt;
}}&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz. Eine der interessantesten Schaltungen, die im Roboternetz vorgestellt wurde, dürfte diese sein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckemosfet.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Den 74HC26N gibts wohl nicht , nur die TTL-Version 74LS26, die HC-Mos-Version lautet 74HC03.&lt;br /&gt;
&lt;br /&gt;
Eine sogenannte H-Brücke, die nur aus zwei MOSFETSs und einem Logik-IC besteht. Mit zwei Controllerports kann diese Schaltung sowohl Geschwindigkeit als auch Drehrichtung regeln. Für die Geschwindigkeit ist ein sogenannter [[PWM]]-Port notwendig. Also ein Port, der durch ein gepulstes Signal den Motor etlichemal innerhalb einer Sekunde ein- und ausschaltet und somit quasi die Leistung regelt (siehe [[PWM]]).&lt;br /&gt;
Die Schaltung ist so konstruiert, dass immer nur zwei Transistoren durchschalten. Auf diese Weise fließt einmal der Strom von links oben nach rechts unten und einmal von rechts oben nach links unten, der Motor wird also ähnlich wie bei der Relaisschaltung umgepolt. &lt;br /&gt;
Bei niedriger [[PWM]]_Frequenz sollte die Schaltung durchaus für einige Ampere geeignet sein, wobei ca. 8 bis 13V ideal sein sollten.&lt;br /&gt;
&lt;br /&gt;
Das Logic-IC wurde durch 3x BC547 Transitoren ersetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hbrückenmosfet BD547.PNG|center|900px]]&lt;br /&gt;
&lt;br /&gt;
====Kritik an der Schaltung====&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung wird im Forum von mehreren Leuten, u.A. Ratber, shaun, massiv kritisiert, z.B. hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067&amp;amp;sid=892e80c6cd2d003292e607bcd7a7123a .&lt;br /&gt;
&lt;br /&gt;
Ich habe leider nicht das Wissen eine bessere Lösung zu liefern. Das Problem sind die Querströme: Im Umschaltmoment sind highside und lowside switch für kurze Zeit beide leitend. Das entspricht einem Kurzschluss der Versorgungsleitung bei jedem Umschalten mit allen damit verbundenen Problemen (Erwärmung, Schwingung, Sicherungen, Reset). Aus diesem Grund sind NAND-Gatter nicht geeignet!&lt;br /&gt;
&lt;br /&gt;
Zum Umschalten muss man&lt;br /&gt;
*den bisher leitenden Mosfet ausschalten,&lt;br /&gt;
*dann etwas warten,&lt;br /&gt;
*und schließlich den nächsten Mosfet schließen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man erreichen, indem man den Einschaltmoment &lt;br /&gt;
*durch RC-Glieder verzögert und &lt;br /&gt;
*den Ausschaltmoment durch Dioden beschleunigt.&lt;br /&gt;
Die entstehenden Schaltungen sind komplex, benötigen viele Bauteile und sind fehleranfällig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten sind integrierte Mosfet-Treiber. Diese haben oft eine einstellbare Tot-Zeit (''Dead-Time''), können hohe Leistungen zum Umladen der Gatekapazität liefern und beachten andere Effekte wie ''Propagation-Time'', Veränderung des Source Potentials beim Highside-switch, etc.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung von shaun:'''&lt;br /&gt;
&lt;br /&gt;
die gezeigte Schaltung taugt auch nur als Prinzipschaltung bedingt, da man einen variierenden Aufwand in eine sichere Verriegelung investieren müsste. Bei fixer und nicht zu hoher Betriebsspannung könnte man mit RD-Kombinationen in den Gateleitungen das Ausschalten beschleunigen und das Einschalten verzögern, so dass die Querleitung wegfällt. Allerdings bewirkt diese simple R-Cg-Verzögerung größere Schaltverluste. &lt;br /&gt;
&lt;br /&gt;
Setzt man die Vezögerung vor dedizierte Treiber, müssen diese wiederum leistungsfähig genug zum Umladen der Gates sein und bis an die Versorgung heranreichen, weshalb man an diesem Punkt überlegen sollte, ob 95% duty cycle nicht auch reichen würden ''(Anmerkung: Bezug auf bootstrapping?)'' und man integrierte Treiber für reine N-Kanal-Bestückung einsetzen sollte - spart dann wieder etwas Verluste am Highside-Switch, weil N-Kanäler gleicher Generation und Leistungsklasse einen niedrigeren Rds(on) als ihre P-Pendants haben.&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Eine vernünftige diskrete Ansteuerung für eine H-Brücke.&lt;br /&gt;
Korrektur auf Rechtschreibfehler, Zeichensetzung, Schreibstil, Fachausdrücke. Gibt's denn keinen der etwas verbessern möchte?}}&lt;br /&gt;
==Ansteuerung mit einem LeistungsOPV==&lt;br /&gt;
Die wohl preislich und platztechnisch günstigste Alternative zur Ansteuerung von Motoren in H-Brücken ist die Verwendung von (Leistungs-)Operationsverstärkern. &lt;br /&gt;
===Heidingscher Motortreiber=== &lt;br /&gt;
Bei dem Heidingschen Motortreiber wird jeder Anschluss des Motors mit einem Ausgang des Operationsverstärker verbunden, die Eingänge des OPVs selbst als Komparator. Diese Methode ist für kleine und mittlere Motoren(=&amp;lt; 1A) und mäßige PWM-Frequenzen(&amp;lt;10kHz) gut geeignet. Ein RB35 von Conrad kann damit problemlos angesteuert werden. Bei zu hohen PWM-Frequenzen ist die SlewRate von vielen OPVs zu gering und die entsprechenden OPVs sind dann viel zu teuer und man sollte eine Ansteuerung per Mosfet(s.o.) bevorzugen. Momentan hat sich der TCA 0372 DP1 (57ct bei Reichelt) Verwendung gefunden. &lt;br /&gt;
Weitere Informationen sind in folgendem Forumsbeitrag zu finden:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/viewtopic.php?t=38412&lt;br /&gt;
===Gleichstromansteuerung===&lt;br /&gt;
Eine weitere Möglichkeit ist es, dem Operationsverstärker eine Gleichspannung vorzugeben, mit denen der OPV die Motoren ansteuert. Diese Methode eignet sich sehr gut für analoge Schaltkreise. Der Wirkungsgrad ist allerdings nicht der beste, da die restliche Spannung in Wärme umgesetzt wird. Zudem werden viele weitere komponenten benötigt, dass den Aufbau treuerer und fehleranfälliger macht.&lt;br /&gt;
Der entsprechenden Schaltkreis ist im Datenblatt des TCA 0372 DP1 zu finden.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Treiber IC L293 D==&lt;br /&gt;
&lt;br /&gt;
Dies ist ohne Zweifel die am häufigsten genutzte Ansteuerung bei Roboter-Bastlern: Man nimmt einfach das IC L293D, denn darin sind sogar zwei H-Brücken enthalten. Also mit einem IC lassen sich ohne weiteres externe Bauteile gleich zwei Motoren ansteuern. Zwar nur bis ca. 600mA, aber das reicht oft schon für kleinere bis mittlere Roboteranwendungen aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:L293Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel293d.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wie aus dem Schaltbild zu ersehen ist, werden für die Ansteuerung jedes Motors 3 Ports benötigt. Die Enable-Leitung führt man oft auf einen PWM-Port welcher wie bei der MOS-FET Schaltung oben die Geschwindigkeit regelt. Die beiden anderen Ports geben die Drehrichtung an. Immer wenn die Ports unterschiedliche Polarität haben dreht der Motor in eine bestimmte Richtung, je nachdem wo Low und High anliegt. Das Besondere ist, dass wenn an beiden Ports der gleiche Pegel anliegt, also zweimal Low oder High, dann wird nämlich der Motor kurzgeschlossen - das fungiert als Bremse. Das Bremsen kann bei Robotern durchaus nützlich sein. Zudem ist bei schnellen Richtungswechseln immer zu empfehlen zuerst kurz zu bremsen, um nicht den Motor oder Motortreiber zu stark zu belasten.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit dem Schaltkreis L298==&lt;br /&gt;
&lt;br /&gt;
Der Schaltkreis L298 ist quasi der große Bruder des L293D. Er beinhaltet auch zwei komplette H-Brücken, kann also auch zwei Motoren ansteuern. Die Pinbelegung ist ebenfalls dem L293D sehr ähnlich, jedoch verfügt er über eine andere Bauform:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:L298Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Unterschied besteht jedoch darin, dass jede H-Brücke bei L298 bis zu 2A belastet werden kann. Damit lassen sich also schon wesentlich größere Motoren ansteuern. Ein weiterer Vorzug sind die sogenannten SENSE-Ausgänge, über die der komplette Strom fließt. Oft wird hier ein Hochlastwiderstand  angeschlossen, um aus der abfallenden Spannung den genauen Strom berechnen zu können. Dies machen sich Steuerungen wie [http://www.roboternetz.de/phpBB2/viewtopic.php?t=2741 RN-Motor] oder aber andere Schrittmotoransteuerungen zunutze, um den Strom genau zu regeln. Benötigt man keine Strommessung, so müssen die Sense-Ausgänge immer direkt mit GND verbunden werden. In diesem Fall muss allerdings eine andere Strombegrenzung eingeplant werden. Wird keine Strombegrenzung eingebaut, müssen diese Widerstände trotztem eingebaut werden, da der Treiber sonst heiss wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel298.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Schaltbild gibt es hier [http://www.roboternetz.de/bilder/schaltung298getriebe.gif]&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit L6205==&lt;br /&gt;
Der Schaltkreis L6205 stellt eine etwas modernere Alternative zur L298 Ansteuerung dar. Die Ansteuerung ist praktisch identisch, der Schaltungsaufbau in etwa gleich. Beim L6205 sind keine Freilaufdioden mehr notwendig, dafür ist ein Kondensator und zwei Dioden für die interne Spannungserzeugung notwendig.&lt;br /&gt;
Ein großer Vorteil  ist auch das kein extra Kühlkörper mehr notwendig ist. Viele integrierte Schutzfunktionen im L6205 sorgen dafür das der Chip nicht so einfach zerstört werden kann. In der Praxis sind die angegeben 2,8A jedoch mit Vorsicht zu geniesen. Bei Testlayouts erwärmten sich die IC´s bereits bei 2A Dauerstrom (PWM) oft so stark das die automatische Temperaturabschaltung reagierte, somit wird man vermutlich ohne Kühlung oder großes Kühllayout auf er Platine auch nicht mehr als beim L298 erreichen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205ic.gif]] [[Bild:l6205pinbelegung.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Noch mehr Power gewünscht?==&lt;br /&gt;
&lt;br /&gt;
Obwohl der L298 schon einiges abdeckt, so kommt er spätestens bei den Scheibenwischermotoren langsam an seine Grenzen. Bei starker Belastung können solche Motoren kurzzeitig bis ca. 10 A und mehr ziehen. Für solch starke Motoren gibt es jetzt einen ganz interessanten Motorchip aus dem KFZ-Bereich: vnh3sp (Datenblatt im Roboternetz Download-Bereich). &lt;br /&gt;
Mit ihm lassen sich sogar recht große Motoren ansteuern; vorausgesetzt, man kühlt ihn entsprechend, so verträgt der Chip bis zu 30A. Aber selbst ohne Kühlung bietet er bedeutet mehr Leistung als der L298. Das Schöne, die Ansteuerung ist kaum anders als beim L298 und L293D.&lt;br /&gt;
&lt;br /&gt;
Kleiner Nachteil: Da es ein SMD-Chip mit 1mm Kontaktabstand ist, muss man schon eine geeignete Platine (spezielles Layout mit Kühlflächen) und etwas Löterfahrung besitzen. Inzwischen gibt es aber schon verschiedene RN-Projekte mit dem Chip (RN-Power, RN-Mini H-Bridge), Platinen und Chip können über den [http://www.shop.robotikhardware.de/shop/catalog/index.php Robotikhardware.de-Platinenservice] bezogen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:minihbridge_ansteuerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ zum [[SMD]]-Chip VNH3SP30 gibt es noch die Alternative VNH2SP30. Dieser Chip erlaubt zwar nur Motorspannungen zwischen 6 und 16 Volt, jedoch hat er einen wesentlich geringeren Innenwiderstand und wird deshalb nur etwa halb so warm wie der VNH3SP30. &lt;br /&gt;
Aus diesem Grund eignet er sich auch ideal für kleine Doppelmotorsteuerungen.&lt;br /&gt;
Natürlich gibt's auch hierfür ein Projekt und eine Bauanleitung, siehe [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
Das Schöne ist, dass es dieses RN-Projekt jetzt auch auch als Fertigmodul gibt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:rndualmotoransteuerung.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
==Endstufen mit I2C-Bus / RS232==&lt;br /&gt;
[[Bild:motctrl.png|thumb|Motoransteuerung über RS232, I2C, RC]]Verwendet man eine der oben vorgestellten H-Bridges, so wird immer vorausgesetzt das ein PWM-Signal und mehrere Ports zur Ansteuerung bereitstehen. Ist dies nicht der Fall weil diese vielleicht schon belegt sind, so lassen sich Endstufen durch einen zusätzlichen Microcontroller auch um beliebige Schnittstellen erweitern. Insbesondere über I2C lassen sich dadurch mehrere Motorboards über einen einzigen Bus ansteuern. Ein Beispiel ist der programmierte Controller MOTCTRL, der speziell für diese Aufgabe gedacht ist. Die Grundscháltung sieht man in der rechten Skizze.&lt;br /&gt;
&lt;br /&gt;
==Und nie vergessen Motoren zu entstören==&lt;br /&gt;
&lt;br /&gt;
Das Entstören dient dazu, das sogenannte &amp;quot;Bürstenfeuer&amp;quot; zu verhindern, wodurch Störungen hervorgerufen werden könnten. Und so wirds gemacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:entstoerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Getriebemotoren]]&lt;br /&gt;
* [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Drehmoment Berechnung]&lt;br /&gt;
* [http://www.roboternetz.de/motoruebersicht.html Motoren Übersicht]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65 Bauteilesets]&lt;br /&gt;
* [http://www.roboternetz.de/robotertutorial.html Roboter-Tutorial]&lt;br /&gt;
* [http://www.roboternetz.de Roboternetz Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;br /&gt;
[[Category:Elektronik]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13278</id>
		<title>Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13278"/>
				<updated>2008-03-15T12:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: pr(k) encoder hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hat man sich entschlossen, für seinen Roboter oder andere Konstruktion einen Getriebemotor zu verwenden, so muss man sich Gedanken machen, wie man ihn ansteuert. Gewöhnlich will man die Motoren ja sowohl in Bezug auf Drehrichtung und Geschwindigkeit über eine Programmiersprache steuern. Daher wird in der Regel erst mal ein Controllerboard benötigt. Leider kann man an die wenigsten Controllerboards einen Getriebemotor direkt anschließen, eine der wenigen Ausnahmen ist das [[RN-Control]]-Board und das RNBFRA-Board. Bei beiden Boards ist es einfach, dort müssen die Getriebemotoren einfach nur an die Schraubklemmen angeschlossen werden, danach kann man sofort mit der Programmierung loslegen.&lt;br /&gt;
&lt;br /&gt;
Ich möchte hier aber aufzeigen, wie man Motoren auch bei anderen Boards anschließen kann. Die gleiche Technik läßt sich natürlich auch nutzen, um z.B. mehr als zwei Motoren an [[RN-Control]] anzuschließen.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Relais==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode, um Motoren per [[Microcontroller|Controller]] anzusteuern, erreicht man durch die Verwendung von Relais. Mit einem Relais, das zwei Umschaltkontakte besitzt, lässt sich über einen einzelnen Controllerport bequem die Drehrichtung wechseln.&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckerelais.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Da auch Relais wegen des Strombedarfes nicht direkt vom Controller geschaltet werden können, wurde in dem oberen Beispiel ein Transistor vorangestellt. Die Diode dient nur dazu, die Spannungen, die beim Ausschalten des Relais induziert werden, abzuleiten. Ohne Diode funktioniert das Ganze in der Regel auch, jedoch könnte der Transistor oder sogar der Controller durch die induzierte Spannung beschädigt werden. &lt;br /&gt;
Die Schaltung ist also in der Lage, die Drehrichtung umzuschalten, jedoch nicht in der Lage, den Motor zu stoppen. Um den Motor ganz auszuschalten, müsste man noch ein weiteres Relais vorsehen, das die gesamte Motorspannung abschaltet. Ein Schaltbild können wir uns ersparen, da das Ganze recht ähnlich aussieht. &lt;br /&gt;
Der große Nachteil von Relaisschaltungen ist, dass die Geschwindigkeit des Motors nicht geregelt werden kann, zudem haben Relais bei sehr vielen Schaltvorgängen einen gewissen Verschleiß. &lt;br /&gt;
Vorteil der Schaltung ist jedoch, das man auch sehr große Lasten/Motoren schalten kann.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit MOS-FET==&lt;br /&gt;
===Neufassung===&lt;br /&gt;
{{Ausbauwunsch|Die Neufassung kann im momentanen Stand nur als Anregung verstanden werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere fehlen noch angepasste Schaltpläne.&lt;br /&gt;
&lt;br /&gt;
Einige der Anmerkungen aus dem Abschnitt &amp;quot;Kritik an der Schaltung&amp;quot; sind in der Neufassung noch nicht enthalten, die Beschreibung von Verzögerungsgliedern müsste auch eine Erklärung enthalten, welche Verzögerung mit welchen Werten erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung komplett fertig ist, sollten die alten Texte weg.&lt;br /&gt;
}}&lt;br /&gt;
====Grundprinzip====&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz.&lt;br /&gt;
&lt;br /&gt;
Die Grundschaltung besteht aus 2 N-Kanal-MOSFET (hier BUZ11) und zwei P-Kanal-MOSFET (hier IRF5305), mit denen die Motoranschlüsse nach GND bzw. UB geschaltet werden. Zusätzlich sind noch 4 Schottky-Dioden (z.B. SB530) erforderlich, um Induktionsströme des Motors abzuleiten. Die Dioden werden in Sperrichtung von den beiden Motoranschlüssen nach GND bzw. UB geschaltet.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss die Beschaltung der Gate-Eingänge so erfolgen, dass zum Starten des Motors die Transistoren einer Diagonale auf &amp;quot;leitend&amp;quot; und die der anderen auf &amp;quot;sperrend&amp;quot; geschaltet werden. Zum Anhalten des Motors werden z.B. die unteren auf leitend und die oberen auf sperrend geschaltet - Der Motor wird dadurch schnell abgebremst, denn durch einen Transistor und eine Freilaufdiode fließt ein nicht unerheblicher Bremsstrom.&lt;br /&gt;
Alternativ kann man auch alle Transistoren auf sperrend schalten, der Motor läuft dann im Leerlauf aus.&lt;br /&gt;
&lt;br /&gt;
Die Transistoren einer Seite dürfen nicht dauerhaft gleichzeitig auf &amp;quot;leitend&amp;quot; geschaltet werden, da dies einen Kurzschluss verursacht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindestens bei dem Transistor BUZ11 handelt es sich um ein veraltetes Modell. Wenn es auf hohe Leistung ankommt, sollte da ein anderer Transistor gewählt werden.&lt;br /&gt;
&lt;br /&gt;
====Elektrische Ansteuerung der Gates====&lt;br /&gt;
Beim Umschalten der Transistoren entsteht eine erhöhte Verlustleistung - der Widerstand wechselt von sperrend (sehr großer Widerstand) nach leitend (sehr kleiner Widerstand) und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Enden des Schaltvorgangs befindet sich der Transistor in der &amp;quot;Widerstandsphase&amp;quot; (weder ganz leitend, noch ganz sperrend), die eine erhebliche Verlustleistung und damit Erwärmung mit sich bringt.&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte der Schaltvorgang - insbesondere wenn für eine PWM-Gegelung sehr oft geschaltet werden soll - möglichst schnell erfolgen. Da zum Umschalten die durch den Aufbau des MOSFETs bedingte Gatekapazität umgeladen werden muss, ist hierzu (sehr kurzzeitig) ein hoher Stromfluss nötig.&lt;br /&gt;
=====Schaltung direkt am Port=====&lt;br /&gt;
Eine Ansteuerung unmittelbar über den Ausgang eines Mikrocontrollers (oder eines TTL-IC) ist schon wegen der benötigten Spannungen nicht möglich. &lt;br /&gt;
&lt;br /&gt;
Bei den N-FET könnte man sog. &amp;quot;Logik-MOSFET&amp;quot; nehmen, die bereits bei 5V ausreichend leitet. &lt;br /&gt;
&lt;br /&gt;
Bei den P-MOSFET bemisst sich die Schaltspannung gegen UB, mit einem 5V Port und UB=12V würde also zwischen -12V und -7V umgeschaltet, was einen P-MOSFET erfordern würde, der bereits bei -7V sperrt.&lt;br /&gt;
&lt;br /&gt;
Dass ein Portpin nur einen geringen Stromfluss (~20mA) zulässt, ist ein weiteres Problem und verhindert einen Schaltvorgang mit idealer steiler Flanke. Allerdings ist die Schaltungsvariante mit einem Transistor in diesem Punkt keinesfalls besser, wenn die Gatekapazität durch den PullUp-Widerstand umgeladen werden muss.&lt;br /&gt;
=====Schaltung mit einem Transistor=====&lt;br /&gt;
Eine einfache Steuerschaltung besteht aus einem Transistor-Schalter und einem Pull-Up-Widerstand. Als Schalter hab ich 1/7 eines ULN2003 IC verwendet, als PullUp 2200 Ohm. Ein diskreter Aufbau mit 1 Transistor und 2 Widerständen ist aber auch nicht komplizierter.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der Einfachheit, der Nachteil liegt darin, dass die Schaltung nicht sonderlich schnell vonstatten geht: Für die Schaltung des FET muss die Gate-Kapazität transferiert werden, was insbesondere beim Wechsel von 0V nach UB einen Moment dauert, da die Ladung durch den Widerstand hindurch muss.&lt;br /&gt;
&lt;br /&gt;
Ein kleinerer Widerstand könnte hier helfen, verursacht allerdings einen nicht unerheblichen Stromfluss im geschalteten Zustand (zulässige Verlustleistung beachten).&lt;br /&gt;
=====Schaltung mit zwei Transistoren=====&lt;br /&gt;
Eine bessere Ansteuerung sollte sich ergeben, wenn man zwei Transistoren zur Gate-Ansteuerung verwendet: Einer schaltet gegen 0V, der andere Gegen UC. So kann man erreichen, dass in beide Richtungen rasch umgeschaltet werden kann.&lt;br /&gt;
=====Integrierte Gate-Treiber=====&lt;br /&gt;
Statt der Beschaltung mit zwei Transistoren kann man auch einen integrierten MOSFET-Treiber verwenden. Mit derartige IC sind darauf ausgelegt, kurzfristig den für eine Umschaltung benötigten hohen Stromfluss zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Treiber-IC, die zur Ansteuerung der oberen Transistoren eine Spannung oberhalb von UB erzeugen. Mit solchen Highside-Treibern kann die H-Brücke auch aus 4 N-Kanal-Transistoren gebaut werden, was den Vorteil hat, dass N-Kanal-FET mit geringerem Schaltwiderstand zu bekommen sind.&lt;br /&gt;
&lt;br /&gt;
====Logische Ansteuerung der Gates====&lt;br /&gt;
Nach der elektrischen Ansteuerung ist die logische Ansteuerung durch den Mikrocontroller zu überlegen.&lt;br /&gt;
&lt;br /&gt;
=====Mögliche Querströme=====&lt;br /&gt;
In der H-Brücke sind zwei problematische Zustände zu berücksichtigen:&lt;br /&gt;
&lt;br /&gt;
1. Das offensichtliche Problem ist ein Kurzschluss: Wenn beide Transistoren einer Seite auf leitend geschaltet werden wird dadurch ein Kurzschluss erzeugt. Falls vorhanden brennt die Sicherung durch - ist keine Sicherung vorhanden, brennt was anderes durch.&lt;br /&gt;
&lt;br /&gt;
2. Ein nicht so offensichtliches Problem rührt daher, dass der Schaltvorgang nur mit endlicher Geschwindigkeit abläuft und der Transistor auch schon vor Erreichen des Zielwertes der Gate-Spannung erheblichen Strom leitet. Hierdurch kommt es zu einem Kurzschluss durch den nicht mehr richtig gesperrten und den noch nicht richtig gesperrten Transistor.&lt;br /&gt;
&lt;br /&gt;
Die Stromspitze selbst liegt noch im Rahmen der Spezifikationen der Transistoren. Sofern ein Messwiderstand von z.B. 0,1 Ohm da ist oder die Spannungsquelle einen vergleichbaren Innenwiderstand hat fließt ein Strom von weniger als 70A, die Transistoren sind jeweils für Spitzen von über 100A spezifiziert.&lt;br /&gt;
&lt;br /&gt;
Allerdings hat die Stromspitze drei Auswirkungen: &lt;br /&gt;
&lt;br /&gt;
# Die Transistoren erwärmen sich&lt;br /&gt;
# Es kann an einem Messwiderstand zu einer Spannungsspitze kommen&lt;br /&gt;
# Die Versorgungsspannung bricht kurzzeitig zusammen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Erwärmung des Transistors ist solange kein Problem, wie nur selten umgeschaltet wird. Bei einer Regelung per PWM könnten sich die kleinen Energiemengen zu einem relevanten Problem addieren. &lt;br /&gt;
&lt;br /&gt;
Da die Erwärmung - sofern sie relevant wird - leicht ohne Messinstrumente feststellbar ist, dürfte dieser Teil des Problems insofern handhabbar sein, als man leicht feststellen kann, ob das Problem relevant ist und das Problem auf die Transistoren beschränkt sind.&lt;br /&gt;
&lt;br /&gt;
Bei Leerlauf-Schaltvorgängen im Abstand von 1/15 Sekunden habe ich keine Erwärmung der Transistoren feststellen können, es wurden auch keine zusätzlichen Kühlkörper verwendet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die Spannungsspitze am Messwiderstand kann abgeleitet werden:&lt;br /&gt;
Als weitere Vorsichtsmaßnahme habe ich den Messport des Controllers mit einem Widerstand und einer Z5.1 Diode abgesichert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Störung der Versorgungsspannung lässt sich ohne Oszilloskop nicht messen. Insbesondere in umfangreicheren Schaltungen können Störungen an ganz anderen Stellen (z.B. bei Sensoren) auftreten, die man dann nicht gleich mit der Motorsteuerung in Verbindung bringt.&lt;br /&gt;
&lt;br /&gt;
Um die Störung vom Controller fernzuhalten habe ich dem Spannungswandler vorsichtshalber eine kleine Schottky-Diode (SB140) vorgeschaltet, um ein Entladen des Stützkondensators zu verhindern.&lt;br /&gt;
&lt;br /&gt;
=====softwaremäßige Ansteuerung=====&lt;br /&gt;
Die einfachste Art der Ansteuerung besteht darin, die Schalter der 4 Gates mit 4 Ausgängen des Controllers zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die korrekte Ansteuerung muss dann durch die Software garantiert werden. &lt;br /&gt;
&lt;br /&gt;
Eine Fehlschaltung der Software z.B. bei einem Absturz kann allerdings zur Zerstörung der Schaltung führen, die Schaltung sollte also in jedem Fall eine Sicherung haben.&lt;br /&gt;
&lt;br /&gt;
=====Einfache Ansteuerung=====&lt;br /&gt;
Etwas sicherer ist es, die Schaltung so aufzubauen, dass ein Kurzschluss nicht dauerhaft geschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
Hierzu habe ich die Schaltung so aufgebaut, dass die Gates einer Seite jeweils gemeinsam geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von 0V sperrt der N-MOSFET (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V), der P-MOSFET leitet bei dieser Gate-Spannung, da hier U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=-UB ist. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von UB verhält es sich genau umgekehrt: Der N-MOSFET leitet (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=UB) und der P-MOSFET sperrt (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V)&lt;br /&gt;
&lt;br /&gt;
Diese einfache Ansteuerung benötigt lediglich zwei Transistorschalter und auch nur 2 Port-Pins, hat jedoch den Nachteil, dass die oben beschriebenen Querströme auftreten.&lt;br /&gt;
=====Verbesserungsmöglichkeiten=====&lt;br /&gt;
Zur Lösung des Querstrom-Problems gibt es mehrere Ansatzmöglichkeiten, die ebenfalls mit zwei Controller-Ausgängen auskommen.&lt;br /&gt;
----&lt;br /&gt;
Mittels Logik-Bausteinen werden zwei Ausgänge des Controllers so umgesetzt, dass die folgenden Zustände geschaltet werden können:&lt;br /&gt;
&lt;br /&gt;
# Motor-Stop: untere Transistoren leitend, obere sperrend (oder umgekehrt)&lt;br /&gt;
# Motor-Vorlauf: 1. Diagolale leitend&lt;br /&gt;
# Motor-Rücklauf: 2. Diagonale leitend&lt;br /&gt;
# Motor-Leerlauf: Alle Transistoren sperrend&lt;br /&gt;
&lt;br /&gt;
Die Querstrom-Problematik kann hierbei softwaremäßig gelöst werden, indem beim Umschalten jeweils kurz der Leerlauf geschaltet wird, damit alle Transistoren sperren.&lt;br /&gt;
----&lt;br /&gt;
Eine andere Möglichkeit besteht darin, das Umladen der Gate-Kapazität asymmetrisch zu gestalten, so dass die Transistoren schneller auf sperrend als auf leitend geschaltet werden. Eine einfache Möglichkeit ist die Parallelschaltung einer Diode und eines Widerstandes: In Sperr-Richtung fließt die Ladung langsamer als in die Durchlass-Richtung.&lt;br /&gt;
===Heidingscher Encoder===&lt;br /&gt;
Aufgrund der Kritik an der Schaltung entschied ich mich einen neuen, einfachen sowie preisgünstigen Encoder zu entwickeln, den man mit der 74series aufbauen kann. Als Treiber können sowohl Transistoren verwendet werden, dabei aber Vorwiderstände nicht vergessen! Die 74series sind mit 20mA Treiberstrom also natürlich nicht zum direkten Treiben geeignet.&lt;br /&gt;
Die Logikanzeigen in den Grafiken sollen je einen Transistor bzw. Mosfet darstellen.&lt;br /&gt;
====PR Encoder===&lt;br /&gt;
[[Bild:Prtreiber.png]]&lt;br /&gt;
Der PR Encoder(PWM-Richtung Encoder) ist mit zwei NOR Gates sowie eines Inverters aufgebaut, d.h. man kann ihn mit nur einem IC(74HC(T)02) aufbauen. Will mein 2 Encoder verwenden, empfliehlt sich den Inverter auszulagern (74HC(T)04 oder 74HC(T)14 Sollte man keinen Schmitt-Trigger benötigen empfiehlt sich aus Schnelligkeitsgründen die 74HC(T)04 Variante). &lt;br /&gt;
Alternativ ist es noch möglich sich den Inverter zu sparen, und die Ansteuerung für den P(WM) Kanal invertiert laufen zu lassen.  &lt;br /&gt;
====PRK Encoder===&lt;br /&gt;
[[Bild:Prktreiber.png]]&lt;br /&gt;
Der Prk-Encoder(PWM-Richtung-Kurzschluss-Treiber) ist eine Erweiterung des PR-Encoders. Er erlaubt es zusätzlich, die Motoren durch einen Kurzschluss zu stoppen.&lt;br /&gt;
Aufgebaut werden kann dieser aus 1 NOR und 1 Nand Gate. Dabei werden 3 Nand-Gates als Inverter beschaltet. (d.h. eine die Leitung die übrig bleibt auf Vcc).&lt;br /&gt;
====Support====&lt;br /&gt;
Fragen einfach in das Forum posten, oder mich anschreiben(User s.o.)&lt;br /&gt;
===Alte Schaltungsbeschreibung===&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung! Die Schaltung ist so nicht zu verwenden! Siehe unter '''Kritik an der Schaltung'''&lt;br /&gt;
}}&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz. Eine der interessantesten Schaltungen, die im Roboternetz vorgestellt wurde, dürfte diese sein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckemosfet.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Den 74HC26N gibts wohl nicht , nur die TTL-Version 74LS26, die HC-Mos-Version lautet 74HC03.&lt;br /&gt;
&lt;br /&gt;
Eine sogenannte H-Brücke, die nur aus zwei MOSFETSs und einem Logik-IC besteht. Mit zwei Controllerports kann diese Schaltung sowohl Geschwindigkeit als auch Drehrichtung regeln. Für die Geschwindigkeit ist ein sogenannter [[PWM]]-Port notwendig. Also ein Port, der durch ein gepulstes Signal den Motor etlichemal innerhalb einer Sekunde ein- und ausschaltet und somit quasi die Leistung regelt (siehe [[PWM]]).&lt;br /&gt;
Die Schaltung ist so konstruiert, dass immer nur zwei Transistoren durchschalten. Auf diese Weise fließt einmal der Strom von links oben nach rechts unten und einmal von rechts oben nach links unten, der Motor wird also ähnlich wie bei der Relaisschaltung umgepolt. &lt;br /&gt;
Bei niedriger [[PWM]]_Frequenz sollte die Schaltung durchaus für einige Ampere geeignet sein, wobei ca. 8 bis 13V ideal sein sollten.&lt;br /&gt;
&lt;br /&gt;
Das Logic-IC wurde durch 3x BC547 Transitoren ersetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hbrückenmosfet BD547.PNG|center|900px]]&lt;br /&gt;
&lt;br /&gt;
====Kritik an der Schaltung====&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung wird im Forum von mehreren Leuten, u.A. Ratber, shaun, massiv kritisiert, z.B. hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067&amp;amp;sid=892e80c6cd2d003292e607bcd7a7123a .&lt;br /&gt;
&lt;br /&gt;
Ich habe leider nicht das Wissen eine bessere Lösung zu liefern. Das Problem sind die Querströme: Im Umschaltmoment sind highside und lowside switch für kurze Zeit beide leitend. Das entspricht einem Kurzschluss der Versorgungsleitung bei jedem Umschalten mit allen damit verbundenen Problemen (Erwärmung, Schwingung, Sicherungen, Reset). Aus diesem Grund sind NAND-Gatter nicht geeignet!&lt;br /&gt;
&lt;br /&gt;
Zum Umschalten muss man&lt;br /&gt;
*den bisher leitenden Mosfet ausschalten,&lt;br /&gt;
*dann etwas warten,&lt;br /&gt;
*und schließlich den nächsten Mosfet schließen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man erreichen, indem man den Einschaltmoment &lt;br /&gt;
*durch RC-Glieder verzögert und &lt;br /&gt;
*den Ausschaltmoment durch Dioden beschleunigt.&lt;br /&gt;
Die entstehenden Schaltungen sind komplex, benötigen viele Bauteile und sind fehleranfällig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten sind integrierte Mosfet-Treiber. Diese haben oft eine einstellbare Tot-Zeit (''Dead-Time''), können hohe Leistungen zum Umladen der Gatekapazität liefern und beachten andere Effekte wie ''Propagation-Time'', Veränderung des Source Potentials beim Highside-switch, etc.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung von shaun:'''&lt;br /&gt;
&lt;br /&gt;
die gezeigte Schaltung taugt auch nur als Prinzipschaltung bedingt, da man einen variierenden Aufwand in eine sichere Verriegelung investieren müsste. Bei fixer und nicht zu hoher Betriebsspannung könnte man mit RD-Kombinationen in den Gateleitungen das Ausschalten beschleunigen und das Einschalten verzögern, so dass die Querleitung wegfällt. Allerdings bewirkt diese simple R-Cg-Verzögerung größere Schaltverluste. &lt;br /&gt;
&lt;br /&gt;
Setzt man die Vezögerung vor dedizierte Treiber, müssen diese wiederum leistungsfähig genug zum Umladen der Gates sein und bis an die Versorgung heranreichen, weshalb man an diesem Punkt überlegen sollte, ob 95% duty cycle nicht auch reichen würden ''(Anmerkung: Bezug auf bootstrapping?)'' und man integrierte Treiber für reine N-Kanal-Bestückung einsetzen sollte - spart dann wieder etwas Verluste am Highside-Switch, weil N-Kanäler gleicher Generation und Leistungsklasse einen niedrigeren Rds(on) als ihre P-Pendants haben.&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Eine vernünftige diskrete Ansteuerung für eine H-Brücke.&lt;br /&gt;
Korrektur auf Rechtschreibfehler, Zeichensetzung, Schreibstil, Fachausdrücke. Gibt's denn keinen der etwas verbessern möchte?}}&lt;br /&gt;
==Ansteuerung mit einem LeistungsOPV==&lt;br /&gt;
Die wohl preislich und platztechnisch günstigste Alternative zur Ansteuerung von Motoren in H-Brücken ist die Verwendung von (Leistungs-)Operationsverstärkern. &lt;br /&gt;
===Heidingscher Motortreiber=== &lt;br /&gt;
Bei dem Heidingschen Motortreiber wird jeder Anschluss des Motors mit einem Ausgang des Operationsverstärker verbunden, die Eingänge des OPVs selbst als Komparator. Diese Methode ist für kleine und mittlere Motoren(=&amp;lt; 1A) und mäßige PWM-Frequenzen(&amp;lt;10kHz) gut geeignet. Ein RB35 von Conrad kann damit problemlos angesteuert werden. Bei zu hohen PWM-Frequenzen ist die SlewRate von vielen OPVs zu gering und die entsprechenden OPVs sind dann viel zu teuer und man sollte eine Ansteuerung per Mosfet(s.o.) bevorzugen. Momentan hat sich der TCA 0372 DP1 (57ct bei Reichelt) Verwendung gefunden. &lt;br /&gt;
Weitere Informationen sind in folgendem Forumsbeitrag zu finden:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/viewtopic.php?t=38412&lt;br /&gt;
===Gleichstromansteuerung===&lt;br /&gt;
Eine weitere Möglichkeit ist es, dem Operationsverstärker eine Gleichspannung vorzugeben, mit denen der OPV die Motoren ansteuert. Diese Methode eignet sich sehr gut für analoge Schaltkreise. Der Wirkungsgrad ist allerdings nicht der beste, da die restliche Spannung in Wärme umgesetzt wird. Zudem werden viele weitere komponenten benötigt, dass den Aufbau treuerer und fehleranfälliger macht.&lt;br /&gt;
Der entsprechenden Schaltkreis ist im Datenblatt des TCA 0372 DP1 zu finden.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Treiber IC L293 D==&lt;br /&gt;
&lt;br /&gt;
Dies ist ohne Zweifel die am häufigsten genutzte Ansteuerung bei Roboter-Bastlern: Man nimmt einfach das IC L293D, denn darin sind sogar zwei H-Brücken enthalten. Also mit einem IC lassen sich ohne weiteres externe Bauteile gleich zwei Motoren ansteuern. Zwar nur bis ca. 600mA, aber das reicht oft schon für kleinere bis mittlere Roboteranwendungen aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:L293Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel293d.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wie aus dem Schaltbild zu ersehen ist, werden für die Ansteuerung jedes Motors 3 Ports benötigt. Die Enable-Leitung führt man oft auf einen PWM-Port welcher wie bei der MOS-FET Schaltung oben die Geschwindigkeit regelt. Die beiden anderen Ports geben die Drehrichtung an. Immer wenn die Ports unterschiedliche Polarität haben dreht der Motor in eine bestimmte Richtung, je nachdem wo Low und High anliegt. Das Besondere ist, dass wenn an beiden Ports der gleiche Pegel anliegt, also zweimal Low oder High, dann wird nämlich der Motor kurzgeschlossen - das fungiert als Bremse. Das Bremsen kann bei Robotern durchaus nützlich sein. Zudem ist bei schnellen Richtungswechseln immer zu empfehlen zuerst kurz zu bremsen, um nicht den Motor oder Motortreiber zu stark zu belasten.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit dem Schaltkreis L298==&lt;br /&gt;
&lt;br /&gt;
Der Schaltkreis L298 ist quasi der große Bruder des L293D. Er beinhaltet auch zwei komplette H-Brücken, kann also auch zwei Motoren ansteuern. Die Pinbelegung ist ebenfalls dem L293D sehr ähnlich, jedoch verfügt er über eine andere Bauform:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:L298Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Unterschied besteht jedoch darin, dass jede H-Brücke bei L298 bis zu 2A belastet werden kann. Damit lassen sich also schon wesentlich größere Motoren ansteuern. Ein weiterer Vorzug sind die sogenannten SENSE-Ausgänge, über die der komplette Strom fließt. Oft wird hier ein Hochlastwiderstand  angeschlossen, um aus der abfallenden Spannung den genauen Strom berechnen zu können. Dies machen sich Steuerungen wie [http://www.roboternetz.de/phpBB2/viewtopic.php?t=2741 RN-Motor] oder aber andere Schrittmotoransteuerungen zunutze, um den Strom genau zu regeln. Benötigt man keine Strommessung, so müssen die Sense-Ausgänge immer direkt mit GND verbunden werden. In diesem Fall muss allerdings eine andere Strombegrenzung eingeplant werden. Wird keine Strombegrenzung eingebaut, müssen diese Widerstände trotztem eingebaut werden, da der Treiber sonst heiss wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel298.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Schaltbild gibt es hier [http://www.roboternetz.de/bilder/schaltung298getriebe.gif]&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit L6205==&lt;br /&gt;
Der Schaltkreis L6205 stellt eine etwas modernere Alternative zur L298 Ansteuerung dar. Die Ansteuerung ist praktisch identisch, der Schaltungsaufbau in etwa gleich. Beim L6205 sind keine Freilaufdioden mehr notwendig, dafür ist ein Kondensator und zwei Dioden für die interne Spannungserzeugung notwendig.&lt;br /&gt;
Ein großer Vorteil  ist auch das kein extra Kühlkörper mehr notwendig ist. Viele integrierte Schutzfunktionen im L6205 sorgen dafür das der Chip nicht so einfach zerstört werden kann. In der Praxis sind die angegeben 2,8A jedoch mit Vorsicht zu geniesen. Bei Testlayouts erwärmten sich die IC´s bereits bei 2A Dauerstrom (PWM) oft so stark das die automatische Temperaturabschaltung reagierte, somit wird man vermutlich ohne Kühlung oder großes Kühllayout auf er Platine auch nicht mehr als beim L298 erreichen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205ic.gif]] [[Bild:l6205pinbelegung.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Noch mehr Power gewünscht?==&lt;br /&gt;
&lt;br /&gt;
Obwohl der L298 schon einiges abdeckt, so kommt er spätestens bei den Scheibenwischermotoren langsam an seine Grenzen. Bei starker Belastung können solche Motoren kurzzeitig bis ca. 10 A und mehr ziehen. Für solch starke Motoren gibt es jetzt einen ganz interessanten Motorchip aus dem KFZ-Bereich: vnh3sp (Datenblatt im Roboternetz Download-Bereich). &lt;br /&gt;
Mit ihm lassen sich sogar recht große Motoren ansteuern; vorausgesetzt, man kühlt ihn entsprechend, so verträgt der Chip bis zu 30A. Aber selbst ohne Kühlung bietet er bedeutet mehr Leistung als der L298. Das Schöne, die Ansteuerung ist kaum anders als beim L298 und L293D.&lt;br /&gt;
&lt;br /&gt;
Kleiner Nachteil: Da es ein SMD-Chip mit 1mm Kontaktabstand ist, muss man schon eine geeignete Platine (spezielles Layout mit Kühlflächen) und etwas Löterfahrung besitzen. Inzwischen gibt es aber schon verschiedene RN-Projekte mit dem Chip (RN-Power, RN-Mini H-Bridge), Platinen und Chip können über den [http://www.shop.robotikhardware.de/shop/catalog/index.php Robotikhardware.de-Platinenservice] bezogen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:minihbridge_ansteuerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ zum [[SMD]]-Chip VNH3SP30 gibt es noch die Alternative VNH2SP30. Dieser Chip erlaubt zwar nur Motorspannungen zwischen 6 und 16 Volt, jedoch hat er einen wesentlich geringeren Innenwiderstand und wird deshalb nur etwa halb so warm wie der VNH3SP30. &lt;br /&gt;
Aus diesem Grund eignet er sich auch ideal für kleine Doppelmotorsteuerungen.&lt;br /&gt;
Natürlich gibt's auch hierfür ein Projekt und eine Bauanleitung, siehe [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
Das Schöne ist, dass es dieses RN-Projekt jetzt auch auch als Fertigmodul gibt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:rndualmotoransteuerung.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
==Endstufen mit I2C-Bus / RS232==&lt;br /&gt;
[[Bild:motctrl.png|thumb|Motoransteuerung über RS232, I2C, RC]]Verwendet man eine der oben vorgestellten H-Bridges, so wird immer vorausgesetzt das ein PWM-Signal und mehrere Ports zur Ansteuerung bereitstehen. Ist dies nicht der Fall weil diese vielleicht schon belegt sind, so lassen sich Endstufen durch einen zusätzlichen Microcontroller auch um beliebige Schnittstellen erweitern. Insbesondere über I2C lassen sich dadurch mehrere Motorboards über einen einzigen Bus ansteuern. Ein Beispiel ist der programmierte Controller MOTCTRL, der speziell für diese Aufgabe gedacht ist. Die Grundscháltung sieht man in der rechten Skizze.&lt;br /&gt;
&lt;br /&gt;
==Und nie vergessen Motoren zu entstören==&lt;br /&gt;
&lt;br /&gt;
Das Entstören dient dazu, das sogenannte &amp;quot;Bürstenfeuer&amp;quot; zu verhindern, wodurch Störungen hervorgerufen werden könnten. Und so wirds gemacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:entstoerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Getriebemotoren]]&lt;br /&gt;
* [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Drehmoment Berechnung]&lt;br /&gt;
* [http://www.roboternetz.de/motoruebersicht.html Motoren Übersicht]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65 Bauteilesets]&lt;br /&gt;
* [http://www.roboternetz.de/robotertutorial.html Roboter-Tutorial]&lt;br /&gt;
* [http://www.roboternetz.de Roboternetz Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;br /&gt;
[[Category:Elektronik]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Prktreiber.png&amp;diff=13277</id>
		<title>Datei:Prktreiber.png</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Prktreiber.png&amp;diff=13277"/>
				<updated>2008-03-15T12:03:32Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Datei:Prtreiber.png&amp;diff=13276</id>
		<title>Datei:Prtreiber.png</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Datei:Prtreiber.png&amp;diff=13276"/>
				<updated>2008-03-15T11:51:19Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: Heidingscher Encoder für P(WM) und R(richtungs)ansteuerung bei Mosfetansteuerung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Heidingscher Encoder für P(WM) und R(richtungs)ansteuerung bei Mosfetansteuerung&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13219</id>
		<title>Getriebemotoren Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren_Ansteuerung&amp;diff=13219"/>
				<updated>2008-02-25T15:20:52Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hat man sich entschlossen, für seinen Roboter oder andere Konstruktion einen Getriebemotor zu verwenden, so muss man sich Gedanken machen, wie man ihn ansteuert. Gewöhnlich will man die Motoren ja sowohl in Bezug auf Drehrichtung und Geschwindigkeit über eine Programmiersprache steuern. Daher wird in der Regel erst mal ein Controllerboard benötigt. Leider kann man an die wenigsten Controllerboards einen Getriebemotor direkt anschließen, eine der wenigen Ausnahmen ist das [[RN-Control]]-Board und das RNBFRA-Board. Bei beiden Boards ist es einfach, dort müssen die Getriebemotoren einfach nur an die Schraubklemmen angeschlossen werden, danach kann man sofort mit der Programmierung loslegen.&lt;br /&gt;
&lt;br /&gt;
Ich möchte hier aber aufzeigen, wie man Motoren auch bei anderen Boards anschließen kann. Die gleiche Technik läßt sich natürlich auch nutzen, um z.B. mehr als zwei Motoren an [[RN-Control]] anzuschließen.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Relais==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode, um Motoren per [[Microcontroller|Controller]] anzusteuern, erreicht man durch die Verwendung von Relais. Mit einem Relais, das zwei Umschaltkontakte besitzt, lässt sich über einen einzelnen Controllerport bequem die Drehrichtung wechseln.&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckerelais.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Da auch Relais wegen des Strombedarfes nicht direkt vom Controller geschaltet werden können, wurde in dem oberen Beispiel ein Transistor vorangestellt. Die Diode dient nur dazu, die Spannungen, die beim Ausschalten des Relais induziert werden, abzuleiten. Ohne Diode funktioniert das Ganze in der Regel auch, jedoch könnte der Transistor oder sogar der Controller durch die induzierte Spannung beschädigt werden. &lt;br /&gt;
Die Schaltung ist also in der Lage, die Drehrichtung umzuschalten, jedoch nicht in der Lage, den Motor zu stoppen. Um den Motor ganz auszuschalten, müsste man noch ein weiteres Relais vorsehen, das die gesamte Motorspannung abschaltet. Ein Schaltbild können wir uns ersparen, da das Ganze recht ähnlich aussieht. &lt;br /&gt;
Der große Nachteil von Relaisschaltungen ist, dass die Geschwindigkeit des Motors nicht geregelt werden kann, zudem haben Relais bei sehr vielen Schaltvorgängen einen gewissen Verschleiß. &lt;br /&gt;
Vorteil der Schaltung ist jedoch, das man auch sehr große Lasten/Motoren schalten kann.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit MOS-FET==&lt;br /&gt;
===Neufassung===&lt;br /&gt;
{{Ausbauwunsch|Die Neufassung kann im momentanen Stand nur als Anregung verstanden werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere fehlen noch angepasste Schaltpläne.&lt;br /&gt;
&lt;br /&gt;
Einige der Anmerkungen aus dem Abschnitt &amp;quot;Kritik an der Schaltung&amp;quot; sind in der Neufassung noch nicht enthalten, die Beschreibung von Verzögerungsgliedern müsste auch eine Erklärung enthalten, welche Verzögerung mit welchen Werten erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Wenn die Neufassung komplett fertig ist, sollten die alten Texte weg.&lt;br /&gt;
}}&lt;br /&gt;
====Grundprinzip====&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz.&lt;br /&gt;
&lt;br /&gt;
Die Grundschaltung besteht aus 2 N-Kanal-MOSFET (hier BUZ11) und zwei P-Kanal-MOSFET (hier IRF5305), mit denen die Motoranschlüsse nach GND bzw. UB geschaltet werden. Zusätzlich sind noch 4 Schottky-Dioden (z.B. SB530) erforderlich, um Induktionsströme des Motors abzuleiten. Die Dioden werden in Sperrichtung von den beiden Motoranschlüssen nach GND bzw. UB geschaltet.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich muss die Beschaltung der Gate-Eingänge so erfolgen, dass zum Starten des Motors die Transistoren einer Diagonale auf &amp;quot;leitend&amp;quot; und die der anderen auf &amp;quot;sperrend&amp;quot; geschaltet werden. Zum Anhalten des Motors werden z.B. die unteren auf leitend und die oberen auf sperrend geschaltet - Der Motor wird dadurch schnell abgebremst, denn durch einen Transistor und eine Freilaufdiode fließt ein nicht unerheblicher Bremsstrom.&lt;br /&gt;
Alternativ kann man auch alle Transistoren auf sperrend schalten, der Motor läuft dann im Leerlauf aus.&lt;br /&gt;
&lt;br /&gt;
Die Transistoren einer Seite dürfen nicht dauerhaft gleichzeitig auf &amp;quot;leitend&amp;quot; geschaltet werden, da dies einen Kurzschluss verursacht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Zumindestens bei dem Transistor BUZ11 handelt es sich um ein veraltetes Modell. Wenn es auf hohe Leistung ankommt, sollte da ein anderer Transistor gewählt werden.&lt;br /&gt;
&lt;br /&gt;
====Elektrische Ansteuerung der Gates====&lt;br /&gt;
Beim Umschalten der Transistoren entsteht eine erhöhte Verlustleistung - der Widerstand wechselt von sperrend (sehr großer Widerstand) nach leitend (sehr kleiner Widerstand) und umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Zwischen beiden Enden des Schaltvorgangs befindet sich der Transistor in der &amp;quot;Widerstandsphase&amp;quot; (weder ganz leitend, noch ganz sperrend), die eine erhebliche Verlustleistung und damit Erwärmung mit sich bringt.&lt;br /&gt;
&lt;br /&gt;
Deshalb sollte der Schaltvorgang - insbesondere wenn für eine PWM-Gegelung sehr oft geschaltet werden soll - möglichst schnell erfolgen. Da zum Umschalten die durch den Aufbau des MOSFETs bedingte Gatekapazität umgeladen werden muss, ist hierzu (sehr kurzzeitig) ein hoher Stromfluss nötig.&lt;br /&gt;
=====Schaltung direkt am Port=====&lt;br /&gt;
Eine Ansteuerung unmittelbar über den Ausgang eines Mikrocontrollers (oder eines TTL-IC) ist schon wegen der benötigten Spannungen nicht möglich. &lt;br /&gt;
&lt;br /&gt;
Bei den N-FET könnte man sog. &amp;quot;Logik-MOSFET&amp;quot; nehmen, die bereits bei 5V ausreichend leitet. &lt;br /&gt;
&lt;br /&gt;
Bei den P-MOSFET bemisst sich die Schaltspannung gegen UB, mit einem 5V Port und UB=12V würde also zwischen -12V und -7V umgeschaltet, was einen P-MOSFET erfordern würde, der bereits bei -7V sperrt.&lt;br /&gt;
&lt;br /&gt;
Dass ein Portpin nur einen geringen Stromfluss (~20mA) zulässt, ist ein weiteres Problem und verhindert einen Schaltvorgang mit idealer steiler Flanke. Allerdings ist die Schaltungsvariante mit einem Transistor in diesem Punkt keinesfalls besser, wenn die Gatekapazität durch den PullUp-Widerstand umgeladen werden muss.&lt;br /&gt;
=====Schaltung mit einem Transistor=====&lt;br /&gt;
Eine einfache Steuerschaltung besteht aus einem Transistor-Schalter und einem Pull-Up-Widerstand. Als Schalter hab ich 1/7 eines ULN2003 IC verwendet, als PullUp 2200 Ohm. Ein diskreter Aufbau mit 1 Transistor und 2 Widerständen ist aber auch nicht komplizierter.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der Einfachheit, der Nachteil liegt darin, dass die Schaltung nicht sonderlich schnell vonstatten geht: Für die Schaltung des FET muss die Gate-Kapazität transferiert werden, was insbesondere beim Wechsel von 0V nach UB einen Moment dauert, da die Ladung durch den Widerstand hindurch muss.&lt;br /&gt;
&lt;br /&gt;
Ein kleinerer Widerstand könnte hier helfen, verursacht allerdings einen nicht unerheblichen Stromfluss im geschalteten Zustand (zulässige Verlustleistung beachten).&lt;br /&gt;
=====Schaltung mit zwei Transistoren=====&lt;br /&gt;
Eine bessere Ansteuerung sollte sich ergeben, wenn man zwei Transistoren zur Gate-Ansteuerung verwendet: Einer schaltet gegen 0V, der andere Gegen UC. So kann man erreichen, dass in beide Richtungen rasch umgeschaltet werden kann.&lt;br /&gt;
=====Integrierte Gate-Treiber=====&lt;br /&gt;
Statt der Beschaltung mit zwei Transistoren kann man auch einen integrierten MOSFET-Treiber verwenden. Mit derartige IC sind darauf ausgelegt, kurzfristig den für eine Umschaltung benötigten hohen Stromfluss zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Treiber-IC, die zur Ansteuerung der oberen Transistoren eine Spannung oberhalb von UB erzeugen. Mit solchen Highside-Treibern kann die H-Brücke auch aus 4 N-Kanal-Transistoren gebaut werden, was den Vorteil hat, dass N-Kanal-FET mit geringerem Schaltwiderstand zu bekommen sind.&lt;br /&gt;
&lt;br /&gt;
====Logische Ansteuerung der Gates====&lt;br /&gt;
Nach der elektrischen Ansteuerung ist die logische Ansteuerung durch den Mikrocontroller zu überlegen.&lt;br /&gt;
&lt;br /&gt;
=====Mögliche Querströme=====&lt;br /&gt;
In der H-Brücke sind zwei problematische Zustände zu berücksichtigen:&lt;br /&gt;
&lt;br /&gt;
1. Das offensichtliche Problem ist ein Kurzschluss: Wenn beide Transistoren einer Seite auf leitend geschaltet werden wird dadurch ein Kurzschluss erzeugt. Falls vorhanden brennt die Sicherung durch - ist keine Sicherung vorhanden, brennt was anderes durch.&lt;br /&gt;
&lt;br /&gt;
2. Ein nicht so offensichtliches Problem rührt daher, dass der Schaltvorgang nur mit endlicher Geschwindigkeit abläuft und der Transistor auch schon vor Erreichen des Zielwertes der Gate-Spannung erheblichen Strom leitet. Hierdurch kommt es zu einem Kurzschluss durch den nicht mehr richtig gesperrten und den noch nicht richtig gesperrten Transistor.&lt;br /&gt;
&lt;br /&gt;
Die Stromspitze selbst liegt noch im Rahmen der Spezifikationen der Transistoren. Sofern ein Messwiderstand von z.B. 0,1 Ohm da ist oder die Spannungsquelle einen vergleichbaren Innenwiderstand hat fließt ein Strom von weniger als 70A, die Transistoren sind jeweils für Spitzen von über 100A spezifiziert.&lt;br /&gt;
&lt;br /&gt;
Allerdings hat die Stromspitze drei Auswirkungen: &lt;br /&gt;
&lt;br /&gt;
# Die Transistoren erwärmen sich&lt;br /&gt;
# Es kann an einem Messwiderstand zu einer Spannungsspitze kommen&lt;br /&gt;
# Die Versorgungsspannung bricht kurzzeitig zusammen&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Erwärmung des Transistors ist solange kein Problem, wie nur selten umgeschaltet wird. Bei einer Regelung per PWM könnten sich die kleinen Energiemengen zu einem relevanten Problem addieren. &lt;br /&gt;
&lt;br /&gt;
Da die Erwärmung - sofern sie relevant wird - leicht ohne Messinstrumente feststellbar ist, dürfte dieser Teil des Problems insofern handhabbar sein, als man leicht feststellen kann, ob das Problem relevant ist und das Problem auf die Transistoren beschränkt sind.&lt;br /&gt;
&lt;br /&gt;
Bei Leerlauf-Schaltvorgängen im Abstand von 1/15 Sekunden habe ich keine Erwärmung der Transistoren feststellen können, es wurden auch keine zusätzlichen Kühlkörper verwendet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Die Spannungsspitze am Messwiderstand kann abgeleitet werden:&lt;br /&gt;
Als weitere Vorsichtsmaßnahme habe ich den Messport des Controllers mit einem Widerstand und einer Z5.1 Diode abgesichert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Die Störung der Versorgungsspannung lässt sich ohne Oszilloskop nicht messen. Insbesondere in umfangreicheren Schaltungen können Störungen an ganz anderen Stellen (z.B. bei Sensoren) auftreten, die man dann nicht gleich mit der Motorsteuerung in Verbindung bringt.&lt;br /&gt;
&lt;br /&gt;
Um die Störung vom Controller fernzuhalten habe ich dem Spannungswandler vorsichtshalber eine kleine Schottky-Diode (SB140) vorgeschaltet, um ein Entladen des Stützkondensators zu verhindern.&lt;br /&gt;
&lt;br /&gt;
=====softwaremäßige Ansteuerung=====&lt;br /&gt;
Die einfachste Art der Ansteuerung besteht darin, die Schalter der 4 Gates mit 4 Ausgängen des Controllers zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Die korrekte Ansteuerung muss dann durch die Software garantiert werden. &lt;br /&gt;
&lt;br /&gt;
Eine Fehlschaltung der Software z.B. bei einem Absturz kann allerdings zur Zerstörung der Schaltung führen, die Schaltung sollte also in jedem Fall eine Sicherung haben.&lt;br /&gt;
&lt;br /&gt;
=====Einfache Ansteuerung=====&lt;br /&gt;
Etwas sicherer ist es, die Schaltung so aufzubauen, dass ein Kurzschluss nicht dauerhaft geschaltet werden kann.&lt;br /&gt;
&lt;br /&gt;
Hierzu habe ich die Schaltung so aufgebaut, dass die Gates einer Seite jeweils gemeinsam geschaltet werden. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von 0V sperrt der N-MOSFET (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V), der P-MOSFET leitet bei dieser Gate-Spannung, da hier U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=-UB ist. &lt;br /&gt;
&lt;br /&gt;
Bei einer Gate-Spannung von UB verhält es sich genau umgekehrt: Der N-MOSFET leitet (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=UB) und der P-MOSFET sperrt (U&amp;lt;sub&amp;gt;GS&amp;lt;/sub&amp;gt;=0V)&lt;br /&gt;
&lt;br /&gt;
Diese einfache Ansteuerung benötigt lediglich zwei Transistorschalter und auch nur 2 Port-Pins, hat jedoch den Nachteil, dass die oben beschriebenen Querströme auftreten.&lt;br /&gt;
=====Verbesserungsmöglichkeiten=====&lt;br /&gt;
Zur Lösung des Querstrom-Problems gibt es mehrere Ansatzmöglichkeiten, die ebenfalls mit zwei Controller-Ausgängen auskommen.&lt;br /&gt;
----&lt;br /&gt;
Mittels Logik-Bausteinen werden zwei Ausgänge des Controllers so umgesetzt, dass die folgenden Zustände geschaltet werden können:&lt;br /&gt;
&lt;br /&gt;
# Motor-Stop: untere Transistoren leitend, obere sperrend (oder umgekehrt)&lt;br /&gt;
# Motor-Vorlauf: 1. Diagolale leitend&lt;br /&gt;
# Motor-Rücklauf: 2. Diagonale leitend&lt;br /&gt;
# Motor-Leerlauf: Alle Transistoren sperrend&lt;br /&gt;
&lt;br /&gt;
Die Querstrom-Problematik kann hierbei softwaremäßig gelöst werden, indem beim Umschalten jeweils kurz der Leerlauf geschaltet wird, damit alle Transistoren sperren.&lt;br /&gt;
----&lt;br /&gt;
Eine andere Möglichkeit besteht darin, das Umladen der Gate-Kapazität asymmetrisch zu gestalten, so dass die Transistoren schneller auf sperrend als auf leitend geschaltet werden. Eine einfache Möglichkeit ist die Parallelschaltung einer Diode und eines Widerstandes: In Sperr-Richtung fließt die Ladung langsamer als in die Durchlass-Richtung.&lt;br /&gt;
&lt;br /&gt;
===Alte Schaltungsbeschreibung===&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Achtung! Die Schaltung ist so nicht zu verwenden! Siehe unter '''Kritik an der Schaltung'''&lt;br /&gt;
}}&lt;br /&gt;
Wesentlich günstiger und auch beliebter ist die Ansteuerung von Motoren mit MOS-FETs. Also Transistoren, die quasi leistungslos nur durch Spannungen geschaltet werden und extrem hohe Ströme verkraften. Zu diesem Thema findet man unzählige Beiträge im Roboternetz. Eine der interessantesten Schaltungen, die im Roboternetz vorgestellt wurde, dürfte diese sein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckemosfet.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Den 74HC26N gibts wohl nicht , nur die TTL-Version 74LS26, die HC-Mos-Version lautet 74HC03.&lt;br /&gt;
&lt;br /&gt;
Eine sogenannte H-Brücke, die nur aus zwei MOSFETSs und einem Logik-IC besteht. Mit zwei Controllerports kann diese Schaltung sowohl Geschwindigkeit als auch Drehrichtung regeln. Für die Geschwindigkeit ist ein sogenannter [[PWM]]-Port notwendig. Also ein Port, der durch ein gepulstes Signal den Motor etlichemal innerhalb einer Sekunde ein- und ausschaltet und somit quasi die Leistung regelt (siehe [[PWM]]).&lt;br /&gt;
Die Schaltung ist so konstruiert, dass immer nur zwei Transistoren durchschalten. Auf diese Weise fließt einmal der Strom von links oben nach rechts unten und einmal von rechts oben nach links unten, der Motor wird also ähnlich wie bei der Relaisschaltung umgepolt. &lt;br /&gt;
Bei niedriger [[PWM]]_Frequenz sollte die Schaltung durchaus für einige Ampere geeignet sein, wobei ca. 8 bis 13V ideal sein sollten.&lt;br /&gt;
&lt;br /&gt;
Das Logic-IC wurde durch 3x BC547 Transitoren ersetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Hbrückenmosfet BD547.PNG|center|900px]]&lt;br /&gt;
&lt;br /&gt;
====Kritik an der Schaltung====&lt;br /&gt;
&lt;br /&gt;
Diese Schaltung wird im Forum von mehreren Leuten, u.A. Ratber, shaun, massiv kritisiert, z.B. hier: http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067&amp;amp;sid=892e80c6cd2d003292e607bcd7a7123a .&lt;br /&gt;
&lt;br /&gt;
Ich habe leider nicht das Wissen eine bessere Lösung zu liefern. Das Problem sind die Querströme: Im Umschaltmoment sind highside und lowside switch für kurze Zeit beide leitend. Das entspricht einem Kurzschluss der Versorgungsleitung bei jedem Umschalten mit allen damit verbundenen Problemen (Erwärmung, Schwingung, Sicherungen, Reset). Aus diesem Grund sind NAND-Gatter nicht geeignet!&lt;br /&gt;
&lt;br /&gt;
Zum Umschalten muss man&lt;br /&gt;
*den bisher leitenden Mosfet ausschalten,&lt;br /&gt;
*dann etwas warten,&lt;br /&gt;
*und schließlich den nächsten Mosfet schließen.&lt;br /&gt;
&lt;br /&gt;
Dies kann man erreichen, indem man den Einschaltmoment &lt;br /&gt;
*durch RC-Glieder verzögert und &lt;br /&gt;
*den Ausschaltmoment durch Dioden beschleunigt.&lt;br /&gt;
Die entstehenden Schaltungen sind komplex, benötigen viele Bauteile und sind fehleranfällig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am sinnvollsten sind integrierte Mosfet-Treiber. Diese haben oft eine einstellbare Tot-Zeit (''Dead-Time''), können hohe Leistungen zum Umladen der Gatekapazität liefern und beachten andere Effekte wie ''Propagation-Time'', Veränderung des Source Potentials beim Highside-switch, etc.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung von shaun:'''&lt;br /&gt;
&lt;br /&gt;
die gezeigte Schaltung taugt auch nur als Prinzipschaltung bedingt, da man einen variierenden Aufwand in eine sichere Verriegelung investieren müsste. Bei fixer und nicht zu hoher Betriebsspannung könnte man mit RD-Kombinationen in den Gateleitungen das Ausschalten beschleunigen und das Einschalten verzögern, so dass die Querleitung wegfällt. Allerdings bewirkt diese simple R-Cg-Verzögerung größere Schaltverluste. &lt;br /&gt;
&lt;br /&gt;
Setzt man die Vezögerung vor dedizierte Treiber, müssen diese wiederum leistungsfähig genug zum Umladen der Gates sein und bis an die Versorgung heranreichen, weshalb man an diesem Punkt überlegen sollte, ob 95% duty cycle nicht auch reichen würden ''(Anmerkung: Bezug auf bootstrapping?)'' und man integrierte Treiber für reine N-Kanal-Bestückung einsetzen sollte - spart dann wieder etwas Verluste am Highside-Switch, weil N-Kanäler gleicher Generation und Leistungsklasse einen niedrigeren Rds(on) als ihre P-Pendants haben.&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Eine vernünftige diskrete Ansteuerung für eine H-Brücke.&lt;br /&gt;
Korrektur auf Rechtschreibfehler, Zeichensetzung, Schreibstil, Fachausdrücke. Gibt's denn keinen der etwas verbessern möchte?}}&lt;br /&gt;
==Ansteuerung mit einem LeistungsOPV==&lt;br /&gt;
Die wohl preislich und platztechnisch günstigste Alternative zur Ansteuerung von Motoren in H-Brücken ist die Verwendung von (Leistungs-)Operationsverstärkern. &lt;br /&gt;
===Heidingscher Motortreiber=== &lt;br /&gt;
Bei dem Heidingschen Motortreiber wird jeder Anschluss des Motors mit einem Ausgang des Operationsverstärker verbunden, die Eingänge des OPVs selbst als Komparator. Diese Methode ist für kleine und mittlere Motoren(=&amp;lt; 1A) und mäßige PWM-Frequenzen(&amp;lt;10kHz) gut geeignet. Ein RB35 von Conrad kann damit problemlos angesteuert werden. Bei zu hohen PWM-Frequenzen ist die SlewRate von vielen OPVs zu gering und die entsprechenden OPVs sind dann viel zu teuer und man sollte eine Ansteuerung per Mosfet(s.o.) bevorzugen. Momentan hat sich der TCA 0372 DP1 (57ct bei Reichelt) Verwendung gefunden. &lt;br /&gt;
Weitere Informationen sind in folgendem Forumsbeitrag zu finden:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/viewtopic.php?t=38412&lt;br /&gt;
===Gleichstromansteuerung===&lt;br /&gt;
Eine weitere Möglichkeit ist es, dem Operationsverstärker eine Gleichspannung vorzugeben, mit denen der OPV die Motoren ansteuert. Diese Methode eignet sich sehr gut für analoge Schaltkreise. Der Wirkungsgrad ist allerdings nicht der beste, da die restliche Spannung in Wärme umgesetzt wird. Zudem werden viele weitere komponenten benötigt, dass den Aufbau treuerer und fehleranfälliger macht.&lt;br /&gt;
Der entsprechenden Schaltkreis ist im Datenblatt des TCA 0372 DP1 zu finden.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit Treiber IC L293 D==&lt;br /&gt;
&lt;br /&gt;
Dies ist ohne Zweifel die am häufigsten genutzte Ansteuerung bei Roboter-Bastlern: Man nimmt einfach das IC L293D, denn darin sind sogar zwei H-Brücken enthalten. Also mit einem IC lassen sich ohne weiteres externe Bauteile gleich zwei Motoren ansteuern. Zwar nur bis ca. 600mA, aber das reicht oft schon für kleinere bis mittlere Roboteranwendungen aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:L293Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel293d.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Wie aus dem Schaltbild zu ersehen ist, werden für die Ansteuerung jedes Motors 3 Ports benötigt. Die Enable-Leitung führt man oft auf einen PWM-Port welcher wie bei der MOS-FET Schaltung oben die Geschwindigkeit regelt. Die beiden anderen Ports geben die Drehrichtung an. Immer wenn die Ports unterschiedliche Polarität haben dreht der Motor in eine bestimmte Richtung, je nachdem wo Low und High anliegt. Das Besondere ist, dass wenn an beiden Ports der gleiche Pegel anliegt, also zweimal Low oder High, dann wird nämlich der Motor kurzgeschlossen - das fungiert als Bremse. Das Bremsen kann bei Robotern durchaus nützlich sein. Zudem ist bei schnellen Richtungswechseln immer zu empfehlen zuerst kurz zu bremsen, um nicht den Motor oder Motortreiber zu stark zu belasten.&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit dem Schaltkreis L298==&lt;br /&gt;
&lt;br /&gt;
Der Schaltkreis L298 ist quasi der große Bruder des L293D. Er beinhaltet auch zwei komplette H-Brücken, kann also auch zwei Motoren ansteuern. Die Pinbelegung ist ebenfalls dem L293D sehr ähnlich, jedoch verfügt er über eine andere Bauform:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:L298Pinout.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Unterschied besteht jedoch darin, dass jede H-Brücke bei L298 bis zu 2A belastet werden kann. Damit lassen sich also schon wesentlich größere Motoren ansteuern. Ein weiterer Vorzug sind die sogenannten SENSE-Ausgänge, über die der komplette Strom fließt. Oft wird hier ein Hochlastwiderstand  angeschlossen, um aus der abfallenden Spannung den genauen Strom berechnen zu können. Dies machen sich Steuerungen wie [http://www.roboternetz.de/phpBB2/viewtopic.php?t=2741 RN-Motor] oder aber andere Schrittmotoransteuerungen zunutze, um den Strom genau zu regeln. Benötigt man keine Strommessung, so müssen die Sense-Ausgänge immer direkt mit GND verbunden werden. In diesem Fall muss allerdings eine andere Strombegrenzung eingeplant werden. Wird keine Strombegrenzung eingebaut, müssen diese Widerstände trotztem eingebaut werden, da der Treiber sonst heiss wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:hbrueckel298.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Schaltbild gibt es hier [http://www.roboternetz.de/bilder/schaltung298getriebe.gif]&lt;br /&gt;
&lt;br /&gt;
==Ansteuerung mit L6205==&lt;br /&gt;
Der Schaltkreis L6205 stellt eine etwas modernere Alternative zur L298 Ansteuerung dar. Die Ansteuerung ist praktisch identisch, der Schaltungsaufbau in etwa gleich. Beim L6205 sind keine Freilaufdioden mehr notwendig, dafür ist ein Kondensator und zwei Dioden für die interne Spannungserzeugung notwendig.&lt;br /&gt;
Ein großer Vorteil  ist auch das kein extra Kühlkörper mehr notwendig ist. Viele integrierte Schutzfunktionen im L6205 sorgen dafür das der Chip nicht so einfach zerstört werden kann. In der Praxis sind die angegeben 2,8A jedoch mit Vorsicht zu geniesen. Bei Testlayouts erwärmten sich die IC´s bereits bei 2A Dauerstrom (PWM) oft so stark das die automatische Temperaturabschaltung reagierte, somit wird man vermutlich ohne Kühlung oder großes Kühllayout auf er Platine auch nicht mehr als beim L298 erreichen. &lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205ic.gif]] [[Bild:l6205pinbelegung.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:l6205.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Noch mehr Power gewünscht?==&lt;br /&gt;
&lt;br /&gt;
Obwohl der L298 schon einiges abdeckt, so kommt er spätestens bei den Scheibenwischermotoren langsam an seine Grenzen. Bei starker Belastung können solche Motoren kurzzeitig bis ca. 10 A und mehr ziehen. Für solch starke Motoren gibt es jetzt einen ganz interessanten Motorchip aus dem KFZ-Bereich: vnh3sp (Datenblatt im Roboternetz Download-Bereich). &lt;br /&gt;
Mit ihm lassen sich sogar recht große Motoren ansteuern; vorausgesetzt, man kühlt ihn entsprechend, so verträgt der Chip bis zu 30A. Aber selbst ohne Kühlung bietet er bedeutet mehr Leistung als der L298. Das Schöne, die Ansteuerung ist kaum anders als beim L298 und L293D.&lt;br /&gt;
&lt;br /&gt;
Kleiner Nachteil: Da es ein SMD-Chip mit 1mm Kontaktabstand ist, muss man schon eine geeignete Platine (spezielles Layout mit Kühlflächen) und etwas Löterfahrung besitzen. Inzwischen gibt es aber schon verschiedene RN-Projekte mit dem Chip (RN-Power, RN-Mini H-Bridge), Platinen und Chip können über den [http://www.shop.robotikhardware.de/shop/catalog/index.php Robotikhardware.de-Platinenservice] bezogen werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:minihbridge_ansteuerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativ zum [[SMD]]-Chip VNH3SP30 gibt es noch die Alternative VNH2SP30. Dieser Chip erlaubt zwar nur Motorspannungen zwischen 6 und 16 Volt, jedoch hat er einen wesentlich geringeren Innenwiderstand und wird deshalb nur etwa halb so warm wie der VNH3SP30. &lt;br /&gt;
Aus diesem Grund eignet er sich auch ideal für kleine Doppelmotorsteuerungen.&lt;br /&gt;
Natürlich gibt's auch hierfür ein Projekt und eine Bauanleitung, siehe [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
Das Schöne ist, dass es dieses RN-Projekt jetzt auch auch als Fertigmodul gibt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:rndualmotoransteuerung.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
==Endstufen mit I2C-Bus / RS232==&lt;br /&gt;
[[Bild:motctrl.png|thumb|Motoransteuerung über RS232, I2C, RC]]Verwendet man eine der oben vorgestellten H-Bridges, so wird immer vorausgesetzt das ein PWM-Signal und mehrere Ports zur Ansteuerung bereitstehen. Ist dies nicht der Fall weil diese vielleicht schon belegt sind, so lassen sich Endstufen durch einen zusätzlichen Microcontroller auch um beliebige Schnittstellen erweitern. Insbesondere über I2C lassen sich dadurch mehrere Motorboards über einen einzigen Bus ansteuern. Ein Beispiel ist der programmierte Controller MOTCTRL, der speziell für diese Aufgabe gedacht ist. Die Grundscháltung sieht man in der rechten Skizze.&lt;br /&gt;
&lt;br /&gt;
==Und nie vergessen Motoren zu entstören==&lt;br /&gt;
&lt;br /&gt;
Das Entstören dient dazu, das sogenannte &amp;quot;Bürstenfeuer&amp;quot; zu verhindern, wodurch Störungen hervorgerufen werden könnten. Und so wirds gemacht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:entstoerung.gif|center]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Getriebemotoren]]&lt;br /&gt;
* [[RN-VNH2Dualmotor]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Drehmoment Berechnung]&lt;br /&gt;
* [http://www.roboternetz.de/motoruebersicht.html Motoren Übersicht]&lt;br /&gt;
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65 Bauteilesets]&lt;br /&gt;
* [http://www.roboternetz.de/robotertutorial.html Roboter-Tutorial]&lt;br /&gt;
* [http://www.roboternetz.de Roboternetz Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;br /&gt;
[[Category:Elektronik]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=13120</id>
		<title>Avr-gcc und avrdude installieren</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=13120"/>
				<updated>2008-01-30T18:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es gibt bereits eine sehr gute Anleitung für das Installieren vom [[avr-gcc]], aber sie ist etwas veraltet. Für den original Text siehe [http://www.tldp.org/linuxfocus/English/November2004/article352.shtml].&lt;br /&gt;
Ich werde im folgenden nur das nötigste von diesem Artikel kopieren.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Teile. Im ersten Teil wird die Installation erklärt, im zweiten wird gezeigt, wie man damit denn nun seine Programme für den [[Microcontroller|MCU]] erstellt. Im dritten Teil stehen noch ein paar typische Fehlermeldungen und die Lösungen.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Also los. Wir brauchen folgende Software:&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/binutils/ binutils-2.17.tar.bz2]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/gcc/gcc-4.1.2/ gcc-core-4.1.2.tar.bz2] &lt;br /&gt;
* [http://savannah.nongnu.org/download/avr-libc/ avr-libc-1.4.5.tar.bz2]    Dort findet ihr auch das Manual der avr-libc&lt;br /&gt;
* [http://savannah.nongnu.org/download/avrdude/ avrdude-5.3.1.tar.gz]       &lt;br /&gt;
&lt;br /&gt;
Als erstes erstellen wir das Verzeichnis, in das der avr-gcc installiert wird:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr&lt;br /&gt;
&lt;br /&gt;
Und das Verzeichnis in dem die Programme liegen werden:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Dieses Verzeichnis wird auch gleich in die &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;-Variable geschrieben:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Achtung, dieser Befehl ist nur in dieser eine Konsole in der ihr seid gültig und auch nur solange wie diese offen ist. Um die Änderung systemweit wirksam zu machen, müsst ihr in die Datei &amp;lt;tt&amp;gt;/etc/profile&amp;lt;/tt&amp;gt; den &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt; nachtragen. Bei mir sieht das z.B. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set the default system $PATH:&lt;br /&gt;
PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games[b]:/usr/local/avr/bin[/b]&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[binutils]]==&lt;br /&gt;
&lt;br /&gt;
Mit den binutils bekommt ihr Programme wie z.b. &amp;lt;tt&amp;gt;avr-as&amp;lt;/tt&amp;gt; (Assembler), &amp;lt;tt&amp;gt;avr-ld&amp;lt;/tt&amp;gt; (Linker), &amp;lt;tt&amp;gt;avr-objcopy&amp;lt;/tt&amp;gt; (Um die Intel-Hex-Files zu erstellen).&lt;br /&gt;
&lt;br /&gt;
Und so wird's gemacht (Das entpacken kann eine Weile dauern):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf binutils-2.17.tar.bz2&lt;br /&gt;
cd binutils-2.17/&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==[[avr-gcc]]==&lt;br /&gt;
&lt;br /&gt;
avr-gcc ist unser eigentlicher Compiler. Er installiert sich wie folgt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf gcc-core-4.1.2.tar.bz2&lt;br /&gt;
cd gcc-4.1.2&lt;br /&gt;
&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-languages=c --disable-libssp&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Falls ihr jetzt beim Installieren Fehler bekommt die sich z.B so äussern:&lt;br /&gt;
 make[2]: avr-ranlib: Command not found&lt;br /&gt;
Dann liegt &amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; wider erwarten nicht in &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;. Führt diesen Befehl als root nochmal aus, dann sollte es gehen:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==avr C-library ([[avr-libc]])==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf avr-libc-1.4.5.tar.bz2&lt;br /&gt;
cd avr-libc-1.4.5&lt;br /&gt;
&lt;br /&gt;
./configure --prefix=/usr/local/avr --build=`./config.guess` --host=avr&lt;br /&gt;
&lt;br /&gt;
make &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[avrdude]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf avrdude-5.3.1.tar.gz&lt;br /&gt;
cd avrdude-5.3.1&lt;br /&gt;
./configure --prefix=/usr/local/avr&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
Wer den avr910 Programmer benutzt, muss avrdude erst fit für einige neuere Controller machen.&lt;br /&gt;
([[ATtiny2313]], [[ATmega162]], ...). Dazu müsst ihr die Configdatei von avrdude anpassen. Ihr findet sie unter &amp;lt;tt&amp;gt;/usr/local/avr/etc/avrdude.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Zeilen müssen ergänzt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATtiny2313&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
     id            = &amp;quot;t2313&amp;quot;;&lt;br /&gt;
     desc          = &amp;quot;ATtiny2313&amp;quot;;&lt;br /&gt;
     stk500_devcode   = 0x23;&lt;br /&gt;
##  Try the STK500 devcode:&lt;br /&gt;
   [b]avr910_devcode   = 0x23;[/b]&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATmega8535&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
    id               = &amp;quot;m8535&amp;quot;;&lt;br /&gt;
    desc             = &amp;quot;ATMEGA8535&amp;quot;;&lt;br /&gt;
    stk500_devcode   = 0x64;&lt;br /&gt;
   [b] avr910_devcode   = 0x69;[/b]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Analog verfahren für [[ATmega64]], [[ATmega162]] und [[ATmega169]]. Die devicecodes hiefür sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
m64:     avr910_devcode   = 0x45;&lt;br /&gt;
m162:    avr910_devcode   = 0x62;&lt;br /&gt;
m169:    avr910_devcode   = 0x78;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer sich einen eigenen avr910 Programmer bauen will, dem sei diese Seite ans Herz gelegt:&lt;br /&gt;
[http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/AVR-Programmer.html].&lt;br /&gt;
Ich habe die Version genommen und um ein Buffer erweitert. Die Bauanleitung dafür gibt es bald auf [http://www.amee-bot.de unserer Roboterseite]. &lt;br /&gt;
&lt;br /&gt;
Somit hätten wir nun alles was wir brauchen installiert.&lt;br /&gt;
&lt;br /&gt;
=Beispiel-Projekt=&lt;br /&gt;
&lt;br /&gt;
Hier erstmal ein winziges Beispielprogramm für den [[ATtiny2313]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *  blink.c&lt;br /&gt;
 *  ATtiny2313 mit 1 MHz&lt;br /&gt;
 *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht 3.81Hz&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIGNAL (SIG_TIMER0_OVF)&lt;br /&gt;
{&lt;br /&gt;
  PORTB =~ PORTB; // PORTB inventieren&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  DDRB  = 0xFF; // PORTB als Ausgang schalten&lt;br /&gt;
  PORTB = 0x00; // Alle Ausgaenge auf 0 schalten&lt;br /&gt;
&lt;br /&gt;
  TCCR0B |= (1 &amp;lt;&amp;lt; CS02) | (1 &amp;lt;&amp;lt; CS00); //Prescaler auf 1024 stellen&lt;br /&gt;
  TIMSK  |= (1 &amp;lt;&amp;lt; TOIE0);              // Timer 0 Overflow Interrupt enable&lt;br /&gt;
&lt;br /&gt;
  sei(); // Interrupts einschalten&lt;br /&gt;
&lt;br /&gt;
  for(;;); //ever&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Quelltext nehmt ihr und speichert ihn in die Datei &amp;lt;tt&amp;gt;blink.c&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt das [[make|Makefile]]. Ich habe schonmal ein einfaches vorbereitet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TARGET = blink&lt;br /&gt;
MCU    = attiny2313&lt;br /&gt;
CC     = avr-gcc&lt;br /&gt;
OBJCOPY=avr-objcopy&lt;br /&gt;
CFLAGS =-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -save-temps -fno-common&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex : $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -j .data -j .text -O ihex $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(TARGET).o&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ -Wl,-Map,$(TARGET).map $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
$(TARGET).o : $(TARGET).c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
load: $(TARGET).hex&lt;br /&gt;
	avrdude -p t2313 -c avr910 -U flash:w:$(TARGET).hex -v&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f *.o *.map *.elf *.hex *.s *.i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das speichert ihr in der Datei &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; im selben Ordner, in der auch die Datei &amp;lt;tt&amp;gt;blink.c liegt&amp;lt;/tt&amp;gt;. '''Unbedingt darauf achten, daß die Einrückungen durch TABs erfolgen und nicht durch Leerzeichen!'''&lt;br /&gt;
&lt;br /&gt;
Dann in der Konsole &amp;quot;&amp;lt;tt&amp;gt;[[make]]&amp;lt;/tt&amp;gt;&amp;quot; tippen und es sollte compiliert werden. Mit &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; wird das Hexfile dann in den MCU übertragen.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung:'''&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;MCU=attiny2313&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;MCU&amp;lt;/tt&amp;gt; ist eine Variable mit dem Inhalt &amp;lt;tt&amp;gt;attiny2313&amp;lt;/tt&amp;gt;. Überall, wo jetzte &amp;lt;tt&amp;gt;$(MCU)&amp;lt;/tt&amp;gt; steht, wird der Variabelninhalt benutzt. Genauso funktioniert das auch mit &amp;lt;tt&amp;gt;TARGET&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;CC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;OBJCOPY&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Nachdem ihr &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; erfolgreich ausgeführt habt, liegen in dem Ordner die Hexfile und eine Datei mit der Endung&amp;lt;tt&amp;gt;&amp;amp;nbsp;.s&amp;lt;/tt&amp;gt;. Darin sind die Assemblerbefehle und -direktiven, die der Compiler aus dem C-Code gemacht hat. Wer so etwas nicht braucht, der kann den Parameter &amp;lt;tt&amp;gt;-save-temps&amp;lt;/tt&amp;gt; in der Variable &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt; getrost entfernen.&lt;br /&gt;
&lt;br /&gt;
Wenn ihr &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; ausfürt, wird avrdude gestarte.&lt;br /&gt;
;&amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt;: gibt an, um welchen MCU es sich handelt&lt;br /&gt;
;&amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;: gibt an, um welchen Programmer es sich handelt. Hier könnte z.B &amp;lt;tt&amp;gt;stk500&amp;lt;/tt&amp;gt; stehen.&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;-U flash:w:$(TARGET).hex&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: bedeutet einfach, dass das Programm in den Flash geschrieben werden soll. &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; steht für Schreiben, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; für Lesen und &amp;lt;tt&amp;gt;v&amp;lt;/tt&amp;gt; für verify. Dann kommt die Variable &amp;lt;tt&amp;gt;$(TARGET)&amp;lt;/tt&amp;gt;, die besagt, welche Datei genau übertragen werden soll. &lt;br /&gt;
;&amp;lt;tt&amp;gt;-v&amp;lt;/tt&amp;gt;: bedeutet ''&amp;quot;Verbose Output&amp;quot;'' und gibt euch mehr Informationen auf der Konsole aus.&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;tt&amp;gt;make clean&amp;lt;/tt&amp;gt; werden alle Object-Dateien etc. gelöscht.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen=&lt;br /&gt;
&lt;br /&gt;
sollten eigentlich keine vorkommen. Wenn doch, vergewissert euch, dass ihr euch genau an die&lt;br /&gt;
Anleitung gehalten und nichts falsch abgeschrieben habt!&lt;br /&gt;
&lt;br /&gt;
Hier ein paar typische Fehlermeldungen und ihr Lösungen:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;Permission denied&amp;lt;/tt&amp;gt;: Ihr habt nicht die Rechte, um diesen Befehl auszuführen. Höchswahrscheinlich müsst ihr den Befehl als root ausführen.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;make[2]: avr-ranlib: Command not found&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;:&amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; liegt nicht in &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt;. Folgendes Command ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;export PATH=$PATH:/usr/local/avr/bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;programmer is not responding&amp;lt;/tt&amp;gt;: Es kann keine Verbindung zum Programmer aufgenommen werden: Defektes Kabel, Programmer an der falschen Schnittstelle angeschlossen (default: &amp;lt;tt&amp;gt;/dev/ttyS0&amp;lt;/tt&amp;gt;), kein Strom am Programmer etc.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;can't open device &amp;quot;/dev/ttyS0&amp;quot;: Permission denied&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: Als normaler User darf man auf die serielle Schnittstelle nicht lesen oder schreiben. Folgenden Befehl als root ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;chmod 666 /dev/ttyS0&amp;lt;/pre&amp;gt;&lt;br /&gt;
:{|&lt;br /&gt;
Zweite und bessere Möglichkeit, die Rechte zu ändern ist es, den Benutzer in die tty-Gruppe auzunehmen.&lt;br /&gt;
Hier ein Beispiel für Gentoo.&lt;br /&gt;
Die Gruppe kann bei anderen Distributionen auch anders heißen!&lt;br /&gt;
&lt;br /&gt;
Als root in die Konsole schreiben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; ls -all /dev/ttyS0&lt;br /&gt;
crw-rw---- 1 root tty 4, 64 25. Jun 02:12 /dev/ttyS0&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier kann man schön erkennen, daß die serielle Schnittstelle dem Benutzer root gehört und die Gruppe &amp;lt;tt&amp;gt;tty&amp;lt;/tt&amp;gt; darauf zugreifen darf. Mit einem einfachen&lt;br /&gt;
 &amp;gt; usermod -a -G tty sebastian&lt;br /&gt;
wird der User &amp;lt;tt&amp;gt;sebastian&amp;lt;/tt&amp;gt; in die tty-Gruppe aufgenommen.&lt;br /&gt;
&lt;br /&gt;
Noch ein Test, ob alles geklappt hat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;gt; groups sebastian&lt;br /&gt;
tty wheel audio cdrom dialout video games usb users portage scanner&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach muss sich Benutzer &amp;lt;tt&amp;gt;sebastian&amp;lt;/tt&amp;gt; neu einlogen und wir sind fertig.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil hierbei ist, daß man Rechte für alle Geräte der Gruppe &amp;lt;tt&amp;gt;tty&amp;lt;/tt&amp;gt; erlangt, also alle seriellen Schnittstellen sowie [[USB]]&amp;amp;nbsp;&amp;amp;harr;&amp;amp;nbsp;[[RS232]]-Adapter, und man braucht an den eigentlichen Rechten nichts zu verändern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Web-Links=&lt;br /&gt;
*[http://www.nongnu.org/avr-libc/user-manual/install_tools.html ''&amp;quot;Installing the GNU Tool Chain&amp;quot;''] Hilfe zum Build und Installation von GCC, binutils, etc unter Linux&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml www.linuxfocus.org (Artikel)] - Tipps zu Build und Installation von avr-gcc, binutils und avr-libc unter Linux&lt;br /&gt;
* [http://users.rcn.com/rneswold/avr/ Rich Neswold: ''A GNU Development Environment for the AVR Microcontroller'']&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/24166 www.mikrocontroller.net (Foren-Beitrag)] - Installation von GCC und Toolchain unter Mac OS X&lt;br /&gt;
&lt;br /&gt;
=Pakete=&lt;br /&gt;
==Slackware==&lt;br /&gt;
Ein Paket für Slackware ist für Zenwalk erhältlich. Mehr dazu siehe hier:&lt;br /&gt;
http://support.zenwalk.org/index.php?topic=14131.&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[WinAVR]]&lt;br /&gt;
&lt;br /&gt;
=Quelle=&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=125603#125603 www.roboternetz.de (Foren-Beitrag)] ''avrgcc + avrdude installieren''&lt;br /&gt;
&lt;br /&gt;
=Autoren=&lt;br /&gt;
*[[Benutzer:Kater|Kater]] (Manuscript)&lt;br /&gt;
*[[Benutzer:SprinterSB|SprinterSB]] (Transcript und Typo)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=13119</id>
		<title>Avr-gcc und avrdude installieren</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=13119"/>
				<updated>2008-01-30T18:29:45Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es gibt bereits eine sehr gute Anleitung für das Installieren vom [[avr-gcc]], aber sie ist etwas veraltet. Für den original Text siehe [http://www.tldp.org/linuxfocus/English/November2004/article352.shtml].&lt;br /&gt;
Ich werde im folgenden nur das nötigste von diesem Artikel kopieren.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Teile. Im ersten Teil wird die Installation erklärt, im zweiten wird gezeigt, wie man damit denn nun seine Programme für den [[Microcontroller|MCU]] erstellt. Im dritten Teil stehen noch ein paar typische Fehlermeldungen und die Lösungen.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Also los. Wir brauchen folgende Software:&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/binutils/ binutils-2.17.tar.bz2]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/gcc/gcc-4.1.2/ gcc-core-4.1.2.tar.bz2] &lt;br /&gt;
* [http://savannah.nongnu.org/download/avr-libc/ avr-libc-1.4.5.tar.bz2]    Dort findet ihr auch das Manual der avr-libc&lt;br /&gt;
* [http://savannah.nongnu.org/download/avrdude/ avrdude-5.3.1.tar.gz]       &lt;br /&gt;
&lt;br /&gt;
Als erstes erstellen wir das Verzeichnis, in das der avr-gcc installiert wird:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr&lt;br /&gt;
&lt;br /&gt;
Und das Verzeichnis in dem die Programme liegen werden:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Dieses Verzeichnis wird auch gleich in die &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;-Variable geschrieben:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Achtung, dieser Befehl ist nur in dieser eine Konsole in der ihr seid gültig und auch nur solange wie diese offen ist. Um die Änderung systemweit wirksam zu machen, müsst ihr in die Datei &amp;lt;tt&amp;gt;/etc/profile&amp;lt;/tt&amp;gt; den &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt; nachtragen. Bei mir sieht das z.B. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set the default system $PATH:&lt;br /&gt;
PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games[b]:/usr/local/avr/bin[/b]&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[binutils]]==&lt;br /&gt;
&lt;br /&gt;
Mit den binutils bekommt ihr Programme wie z.b. &amp;lt;tt&amp;gt;avr-as&amp;lt;/tt&amp;gt; (Assembler), &amp;lt;tt&amp;gt;avr-ld&amp;lt;/tt&amp;gt; (Linker), &amp;lt;tt&amp;gt;avr-objcopy&amp;lt;/tt&amp;gt; (Um die Intel-Hex-Files zu erstellen).&lt;br /&gt;
&lt;br /&gt;
Und so wird's gemacht (Das entpacken kann eine Weile dauern):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf binutils-2.17.tar.bz2&lt;br /&gt;
cd binutils-2.17/&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==[[avr-gcc]]==&lt;br /&gt;
&lt;br /&gt;
avr-gcc ist unser eigentlicher Compiler. Er installiert sich wie folgt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf gcc-core-4.1.2.tar.bz2&lt;br /&gt;
cd gcc-4.1.2&lt;br /&gt;
&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-languages=c --disable-libssp&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Falls ihr jetzt beim Installieren Fehler bekommt die sich z.B so äussern:&lt;br /&gt;
 make[2]: avr-ranlib: Command not found&lt;br /&gt;
Dann liegt &amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; wider erwarten nicht in &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;. Führt diesen Befehl als root nochmal aus, dann sollte es gehen:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==avr C-library ([[avr-libc]])==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf avr-libc-1.4.5.tar.bz2&lt;br /&gt;
cd avr-libc-1.4.5&lt;br /&gt;
&lt;br /&gt;
./configure --prefix=/usr/local/avr --build=`./config.guess` --host=avr&lt;br /&gt;
&lt;br /&gt;
make &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[avrdude]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf avrdude-5.3.1.tar.gz&lt;br /&gt;
cd avrdude-5.3.1&lt;br /&gt;
./configure --prefix=/usr/local/avr&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
Wer den avr910 Programmer benutzt, muss avrdude erst fit für einige neuere Controller machen.&lt;br /&gt;
([[ATtiny2313]], [[ATmega162]], ...). Dazu müsst ihr die Configdatei von avrdude anpassen. Ihr findet sie unter &amp;lt;tt&amp;gt;/usr/local/avr/etc/avrdude.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Zeilen müssen ergänzt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATtiny2313&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
     id            = &amp;quot;t2313&amp;quot;;&lt;br /&gt;
     desc          = &amp;quot;ATtiny2313&amp;quot;;&lt;br /&gt;
     stk500_devcode   = 0x23;&lt;br /&gt;
##  Try the STK500 devcode:&lt;br /&gt;
   [b]avr910_devcode   = 0x23;[/b]&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATmega8535&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
    id               = &amp;quot;m8535&amp;quot;;&lt;br /&gt;
    desc             = &amp;quot;ATMEGA8535&amp;quot;;&lt;br /&gt;
    stk500_devcode   = 0x64;&lt;br /&gt;
   [b] avr910_devcode   = 0x69;[/b]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Analog verfahren für [[ATmega64]], [[ATmega162]] und [[ATmega169]]. Die devicecodes hiefür sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
m64:     avr910_devcode   = 0x45;&lt;br /&gt;
m162:    avr910_devcode   = 0x62;&lt;br /&gt;
m169:    avr910_devcode   = 0x78;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer sich einen eigenen avr910 Programmer bauen will, dem sei diese Seite ans Herz gelegt:&lt;br /&gt;
[http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/AVR-Programmer.html].&lt;br /&gt;
Ich habe die Version genommen und um ein Buffer erweitert. Die Bauanleitung dafür gibt es bald auf [http://www.amee-bot.de unserer Roboterseite]. &lt;br /&gt;
&lt;br /&gt;
Somit hätten wir nun alles was wir brauchen installiert.&lt;br /&gt;
&lt;br /&gt;
=Beispiel-Projekt=&lt;br /&gt;
&lt;br /&gt;
Hier erstmal ein winziges Beispielprogramm für den [[ATtiny2313]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *  blink.c&lt;br /&gt;
 *  ATtiny2313 mit 1 MHz&lt;br /&gt;
 *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht 3.81Hz&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIGNAL (SIG_TIMER0_OVF)&lt;br /&gt;
{&lt;br /&gt;
  PORTB =~ PORTB; // PORTB inventieren&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  DDRB  = 0xFF; // PORTB als Ausgang schalten&lt;br /&gt;
  PORTB = 0x00; // Alle Ausgaenge auf 0 schalten&lt;br /&gt;
&lt;br /&gt;
  TCCR0B |= (1 &amp;lt;&amp;lt; CS02) | (1 &amp;lt;&amp;lt; CS00); //Prescaler auf 1024 stellen&lt;br /&gt;
  TIMSK  |= (1 &amp;lt;&amp;lt; TOIE0);              // Timer 0 Overflow Interrupt enable&lt;br /&gt;
&lt;br /&gt;
  sei(); // Interrupts einschalten&lt;br /&gt;
&lt;br /&gt;
  for(;;); //ever&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Quelltext nehmt ihr und speichert ihn in die Datei &amp;lt;tt&amp;gt;blink.c&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt das [[make|Makefile]]. Ich habe schonmal ein einfaches vorbereitet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TARGET = blink&lt;br /&gt;
MCU    = attiny2313&lt;br /&gt;
CC     = avr-gcc&lt;br /&gt;
OBJCOPY=avr-objcopy&lt;br /&gt;
CFLAGS =-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -save-temps -fno-common&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex : $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -j .data -j .text -O ihex $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(TARGET).o&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ -Wl,-Map,$(TARGET).map $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
$(TARGET).o : $(TARGET).c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
load: $(TARGET).hex&lt;br /&gt;
	avrdude -p t2313 -c avr910 -U flash:w:$(TARGET).hex -v&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f *.o *.map *.elf *.hex *.s *.i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das speichert ihr in der Datei &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; im selben Ordner, in der auch die Datei &amp;lt;tt&amp;gt;blink.c liegt&amp;lt;/tt&amp;gt;. '''Unbedingt darauf achten, daß die Einrückungen durch TABs erfolgen und nicht durch Leerzeichen!'''&lt;br /&gt;
&lt;br /&gt;
Dann in der Konsole &amp;quot;&amp;lt;tt&amp;gt;[[make]]&amp;lt;/tt&amp;gt;&amp;quot; tippen und es sollte compiliert werden. Mit &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; wird das Hexfile dann in den MCU übertragen.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung:'''&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;MCU=attiny2313&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;MCU&amp;lt;/tt&amp;gt; ist eine Variable mit dem Inhalt &amp;lt;tt&amp;gt;attiny2313&amp;lt;/tt&amp;gt;. Überall, wo jetzte &amp;lt;tt&amp;gt;$(MCU)&amp;lt;/tt&amp;gt; steht, wird der Variabelninhalt benutzt. Genauso funktioniert das auch mit &amp;lt;tt&amp;gt;TARGET&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;CC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;OBJCOPY&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Nachdem ihr &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; erfolgreich ausgeführt habt, liegen in dem Ordner die Hexfile und eine Datei mit der Endung&amp;lt;tt&amp;gt;&amp;amp;nbsp;.s&amp;lt;/tt&amp;gt;. Darin sind die Assemblerbefehle und -direktiven, die der Compiler aus dem C-Code gemacht hat. Wer so etwas nicht braucht, der kann den Parameter &amp;lt;tt&amp;gt;-save-temps&amp;lt;/tt&amp;gt; in der Variable &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt; getrost entfernen.&lt;br /&gt;
&lt;br /&gt;
Wenn ihr &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; ausfürt, wird avrdude gestarte.&lt;br /&gt;
;&amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt;: gibt an, um welchen MCU es sich handelt&lt;br /&gt;
;&amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;: gibt an, um welchen Programmer es sich handelt. Hier könnte z.B &amp;lt;tt&amp;gt;stk500&amp;lt;/tt&amp;gt; stehen.&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;-U flash:w:$(TARGET).hex&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: bedeutet einfach, dass das Programm in den Flash geschrieben werden soll. &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; steht für Schreiben, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; für Lesen und &amp;lt;tt&amp;gt;v&amp;lt;/tt&amp;gt; für verify. Dann kommt die Variable &amp;lt;tt&amp;gt;$(TARGET)&amp;lt;/tt&amp;gt;, die besagt, welche Datei genau übertragen werden soll. &lt;br /&gt;
;&amp;lt;tt&amp;gt;-v&amp;lt;/tt&amp;gt;: bedeutet ''&amp;quot;Verbose Output&amp;quot;'' und gibt euch mehr Informationen auf der Konsole aus.&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;tt&amp;gt;make clean&amp;lt;/tt&amp;gt; werden alle Object-Dateien etc. gelöscht.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen=&lt;br /&gt;
&lt;br /&gt;
sollten eigentlich keine vorkommen. Wenn doch, vergewissert euch, dass ihr euch genau an die&lt;br /&gt;
Anleitung gehalten und nichts falsch abgeschrieben habt!&lt;br /&gt;
&lt;br /&gt;
Hier ein paar typische Fehlermeldungen und ihr Lösungen:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;Permission denied&amp;lt;/tt&amp;gt;: Ihr habt nicht die Rechte, um diesen Befehl auszuführen. Höchswahrscheinlich müsst ihr den Befehl als root ausführen.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;make[2]: avr-ranlib: Command not found&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;:&amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; liegt nicht in &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt;. Folgendes Command ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;export PATH=$PATH:/usr/local/avr/bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;programmer is not responding&amp;lt;/tt&amp;gt;: Es kann keine Verbindung zum Programmer aufgenommen werden: Defektes Kabel, Programmer an der falschen Schnittstelle angeschlossen (default: &amp;lt;tt&amp;gt;/dev/ttyS0&amp;lt;/tt&amp;gt;), kein Strom am Programmer etc.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;can't open device &amp;quot;/dev/ttyS0&amp;quot;: Permission denied&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: Als normaler User darf man auf die serielle Schnittstelle nicht lesen oder schreiben. Folgenden Befehl als root ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;chmod 666 /dev/ttyS0&amp;lt;/pre&amp;gt;&lt;br /&gt;
:{|&lt;br /&gt;
Zweite und bessere Möglichkeit, die Rechte zu ändern ist es, den Benutzer in die tty-Gruppe auzunehmen.&lt;br /&gt;
Hier ein Beispiel für Gentoo.&lt;br /&gt;
Die Gruppe kann bei anderen Distributionen auch anders heißen!&lt;br /&gt;
&lt;br /&gt;
Als root in die Konsole schreiben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; ls -all /dev/ttyS0&lt;br /&gt;
crw-rw---- 1 root tty 4, 64 25. Jun 02:12 /dev/ttyS0&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier kann man schön erkennen, daß die serielle Schnittstelle dem Benutzer root gehört und die Gruppe &amp;lt;tt&amp;gt;tty&amp;lt;/tt&amp;gt; darauf zugreifen darf. Mit einem einfachen&lt;br /&gt;
 &amp;gt; usermod -a -G tty sebastian&lt;br /&gt;
wird der User &amp;lt;tt&amp;gt;sebastian&amp;lt;/tt&amp;gt; in die tty-Gruppe aufgenommen.&lt;br /&gt;
&lt;br /&gt;
Noch ein Test, ob alles geklappt hat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;gt; groups sebastian&lt;br /&gt;
tty wheel audio cdrom dialout video games usb users portage scanner&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach muss sich Benutzer &amp;lt;tt&amp;gt;sebastian&amp;lt;/tt&amp;gt; neu einlogen und wir sind fertig.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil hierbei ist, daß man Rechte für alle Geräte der Gruppe &amp;lt;tt&amp;gt;tty&amp;lt;/tt&amp;gt; erlangt, also alle seriellen Schnittstellen sowie [[USB]]&amp;amp;nbsp;&amp;amp;harr;&amp;amp;nbsp;[[RS232]]-Adapter, und man braucht an den eigentlichen Rechten nichts zu verändern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Web-Links=&lt;br /&gt;
*[http://www.nongnu.org/avr-libc/user-manual/install_tools.html ''&amp;quot;Installing the GNU Tool Chain&amp;quot;''] Hilfe zum Build und Installation von GCC, binutils, etc unter Linux&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml www.linuxfocus.org (Artikel)] - Tipps zu Build und Installation von avr-gcc, binutils und avr-libc unter Linux&lt;br /&gt;
* [http://users.rcn.com/rneswold/avr/ Rich Neswold: ''A GNU Development Environment for the AVR Microcontroller'']&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/24166 www.mikrocontroller.net (Foren-Beitrag)] - Installation von GCC und Toolchain unter Mac OS X&lt;br /&gt;
&lt;br /&gt;
=Pakete=&lt;br /&gt;
==Slackware==&lt;br /&gt;
Ein Paket für Slackware ist für Zenwalk erhältlich. Mehr dazu siehe hier:&lt;br /&gt;
http://support.zenwalk.org/index.php?topic=14131.[http://support.zenwalk.org/index.php?topic=14131]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[WinAVR]]&lt;br /&gt;
&lt;br /&gt;
=Quelle=&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=125603#125603 www.roboternetz.de (Foren-Beitrag)] ''avrgcc + avrdude installieren''&lt;br /&gt;
&lt;br /&gt;
=Autoren=&lt;br /&gt;
*[[Benutzer:Kater|Kater]] (Manuscript)&lt;br /&gt;
*[[Benutzer:SprinterSB|SprinterSB]] (Transcript und Typo)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=13118</id>
		<title>Avr-gcc und avrdude installieren</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Avr-gcc_und_avrdude_installieren&amp;diff=13118"/>
				<updated>2008-01-30T18:28:42Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: Pakete hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es gibt bereits eine sehr gute Anleitung für das Installieren vom [[avr-gcc]], aber sie ist etwas veraltet. Für den original Text siehe [http://www.tldp.org/linuxfocus/English/November2004/article352.shtml].&lt;br /&gt;
Ich werde im folgenden nur das nötigste von diesem Artikel kopieren.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Teile. Im ersten Teil wird die Installation erklärt, im zweiten wird gezeigt, wie man damit denn nun seine Programme für den [[Microcontroller|MCU]] erstellt. Im dritten Teil stehen noch ein paar typische Fehlermeldungen und die Lösungen.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Also los. Wir brauchen folgende Software:&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/binutils/ binutils-2.17.tar.bz2]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/gcc/gcc-4.1.2/ gcc-core-4.1.2.tar.bz2] &lt;br /&gt;
* [http://savannah.nongnu.org/download/avr-libc/ avr-libc-1.4.5.tar.bz2]    Dort findet ihr auch das Manual der avr-libc&lt;br /&gt;
* [http://savannah.nongnu.org/download/avrdude/ avrdude-5.3.1.tar.gz]       &lt;br /&gt;
&lt;br /&gt;
Als erstes erstellen wir das Verzeichnis, in das der avr-gcc installiert wird:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr&lt;br /&gt;
&lt;br /&gt;
Und das Verzeichnis in dem die Programme liegen werden:&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 mkdir /usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Dieses Verzeichnis wird auch gleich in die &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;-Variable geschrieben:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
Achtung, dieser Befehl ist nur in dieser eine Konsole in der ihr seid gültig und auch nur solange wie diese offen ist. Um die Änderung systemweit wirksam zu machen, müsst ihr in die Datei &amp;lt;tt&amp;gt;/etc/profile&amp;lt;/tt&amp;gt; den &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt; nachtragen. Bei mir sieht das z.B. so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Set the default system $PATH:&lt;br /&gt;
PATH=&amp;quot;/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games[b]:/usr/local/avr/bin[/b]&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[binutils]]==&lt;br /&gt;
&lt;br /&gt;
Mit den binutils bekommt ihr Programme wie z.b. &amp;lt;tt&amp;gt;avr-as&amp;lt;/tt&amp;gt; (Assembler), &amp;lt;tt&amp;gt;avr-ld&amp;lt;/tt&amp;gt; (Linker), &amp;lt;tt&amp;gt;avr-objcopy&amp;lt;/tt&amp;gt; (Um die Intel-Hex-Files zu erstellen).&lt;br /&gt;
&lt;br /&gt;
Und so wird's gemacht (Das entpacken kann eine Weile dauern):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf binutils-2.17.tar.bz2&lt;br /&gt;
cd binutils-2.17/&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==[[avr-gcc]]==&lt;br /&gt;
&lt;br /&gt;
avr-gcc ist unser eigentlicher Compiler. Er installiert sich wie folgt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf gcc-core-4.1.2.tar.bz2&lt;br /&gt;
cd gcc-4.1.2&lt;br /&gt;
&lt;br /&gt;
mkdir obj-avr&lt;br /&gt;
cd obj-avr&lt;br /&gt;
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-languages=c --disable-libssp&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Falls ihr jetzt beim Installieren Fehler bekommt die sich z.B so äussern:&lt;br /&gt;
 make[2]: avr-ranlib: Command not found&lt;br /&gt;
Dann liegt &amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; wider erwarten nicht in &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;. Führt diesen Befehl als root nochmal aus, dann sollte es gehen:&lt;br /&gt;
 export PATH=$PATH:/usr/local/avr/bin&lt;br /&gt;
&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==avr C-library ([[avr-libc]])==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar jxf avr-libc-1.4.5.tar.bz2&lt;br /&gt;
cd avr-libc-1.4.5&lt;br /&gt;
&lt;br /&gt;
./configure --prefix=/usr/local/avr --build=`./config.guess` --host=avr&lt;br /&gt;
&lt;br /&gt;
make &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[avrdude]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar xzf avrdude-5.3.1.tar.gz&lt;br /&gt;
cd avrdude-5.3.1&lt;br /&gt;
./configure --prefix=/usr/local/avr&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Als root:&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
Wer den avr910 Programmer benutzt, muss avrdude erst fit für einige neuere Controller machen.&lt;br /&gt;
([[ATtiny2313]], [[ATmega162]], ...). Dazu müsst ihr die Configdatei von avrdude anpassen. Ihr findet sie unter &amp;lt;tt&amp;gt;/usr/local/avr/etc/avrdude.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Zeilen müssen ergänzt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATtiny2313&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
     id            = &amp;quot;t2313&amp;quot;;&lt;br /&gt;
     desc          = &amp;quot;ATtiny2313&amp;quot;;&lt;br /&gt;
     stk500_devcode   = 0x23;&lt;br /&gt;
##  Try the STK500 devcode:&lt;br /&gt;
   [b]avr910_devcode   = 0x23;[/b]&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
# ATmega8535&lt;br /&gt;
#------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
part&lt;br /&gt;
    id               = &amp;quot;m8535&amp;quot;;&lt;br /&gt;
    desc             = &amp;quot;ATMEGA8535&amp;quot;;&lt;br /&gt;
    stk500_devcode   = 0x64;&lt;br /&gt;
   [b] avr910_devcode   = 0x69;[/b]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Analog verfahren für [[ATmega64]], [[ATmega162]] und [[ATmega169]]. Die devicecodes hiefür sind:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
m64:     avr910_devcode   = 0x45;&lt;br /&gt;
m162:    avr910_devcode   = 0x62;&lt;br /&gt;
m169:    avr910_devcode   = 0x78;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer sich einen eigenen avr910 Programmer bauen will, dem sei diese Seite ans Herz gelegt:&lt;br /&gt;
[http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/AVR-Programmer.html].&lt;br /&gt;
Ich habe die Version genommen und um ein Buffer erweitert. Die Bauanleitung dafür gibt es bald auf [http://www.amee-bot.de unserer Roboterseite]. &lt;br /&gt;
&lt;br /&gt;
Somit hätten wir nun alles was wir brauchen installiert.&lt;br /&gt;
&lt;br /&gt;
=Beispiel-Projekt=&lt;br /&gt;
&lt;br /&gt;
Hier erstmal ein winziges Beispielprogramm für den [[ATtiny2313]].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *  blink.c&lt;br /&gt;
 *  ATtiny2313 mit 1 MHz&lt;br /&gt;
 *  PORTB wird ueber ein Timer alle 0.263s ein- und ausgeschaltet. Das entspricht 3.81Hz&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIGNAL (SIG_TIMER0_OVF)&lt;br /&gt;
{&lt;br /&gt;
  PORTB =~ PORTB; // PORTB inventieren&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  DDRB  = 0xFF; // PORTB als Ausgang schalten&lt;br /&gt;
  PORTB = 0x00; // Alle Ausgaenge auf 0 schalten&lt;br /&gt;
&lt;br /&gt;
  TCCR0B |= (1 &amp;lt;&amp;lt; CS02) | (1 &amp;lt;&amp;lt; CS00); //Prescaler auf 1024 stellen&lt;br /&gt;
  TIMSK  |= (1 &amp;lt;&amp;lt; TOIE0);              // Timer 0 Overflow Interrupt enable&lt;br /&gt;
&lt;br /&gt;
  sei(); // Interrupts einschalten&lt;br /&gt;
&lt;br /&gt;
  for(;;); //ever&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Quelltext nehmt ihr und speichert ihn in die Datei &amp;lt;tt&amp;gt;blink.c&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Jetzt kommt das [[make|Makefile]]. Ich habe schonmal ein einfaches vorbereitet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TARGET = blink&lt;br /&gt;
MCU    = attiny2313&lt;br /&gt;
CC     = avr-gcc&lt;br /&gt;
OBJCOPY=avr-objcopy&lt;br /&gt;
CFLAGS =-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -save-temps -fno-common&lt;br /&gt;
&lt;br /&gt;
all: $(TARGET).hex&lt;br /&gt;
&lt;br /&gt;
$(TARGET).hex : $(TARGET).elf&lt;br /&gt;
	$(OBJCOPY) -j .data -j .text -O ihex $&amp;lt; $@&lt;br /&gt;
&lt;br /&gt;
$(TARGET).elf: $(TARGET).o&lt;br /&gt;
	$(CC) $(CFLAGS) -o $@ -Wl,-Map,$(TARGET).map $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
$(TARGET).o : $(TARGET).c&lt;br /&gt;
	$(CC) $(CFLAGS) -c $&amp;lt;&lt;br /&gt;
&lt;br /&gt;
load: $(TARGET).hex&lt;br /&gt;
	avrdude -p t2313 -c avr910 -U flash:w:$(TARGET).hex -v&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f *.o *.map *.elf *.hex *.s *.i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das speichert ihr in der Datei &amp;lt;tt&amp;gt;Makefile&amp;lt;/tt&amp;gt; im selben Ordner, in der auch die Datei &amp;lt;tt&amp;gt;blink.c liegt&amp;lt;/tt&amp;gt;. '''Unbedingt darauf achten, daß die Einrückungen durch TABs erfolgen und nicht durch Leerzeichen!'''&lt;br /&gt;
&lt;br /&gt;
Dann in der Konsole &amp;quot;&amp;lt;tt&amp;gt;[[make]]&amp;lt;/tt&amp;gt;&amp;quot; tippen und es sollte compiliert werden. Mit &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; wird das Hexfile dann in den MCU übertragen.&lt;br /&gt;
&lt;br /&gt;
'''Erklärung:'''&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;MCU=attiny2313&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;MCU&amp;lt;/tt&amp;gt; ist eine Variable mit dem Inhalt &amp;lt;tt&amp;gt;attiny2313&amp;lt;/tt&amp;gt;. Überall, wo jetzte &amp;lt;tt&amp;gt;$(MCU)&amp;lt;/tt&amp;gt; steht, wird der Variabelninhalt benutzt. Genauso funktioniert das auch mit &amp;lt;tt&amp;gt;TARGET&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;CC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;OBJCOPY&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Nachdem ihr &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; erfolgreich ausgeführt habt, liegen in dem Ordner die Hexfile und eine Datei mit der Endung&amp;lt;tt&amp;gt;&amp;amp;nbsp;.s&amp;lt;/tt&amp;gt;. Darin sind die Assemblerbefehle und -direktiven, die der Compiler aus dem C-Code gemacht hat. Wer so etwas nicht braucht, der kann den Parameter &amp;lt;tt&amp;gt;-save-temps&amp;lt;/tt&amp;gt; in der Variable &amp;lt;tt&amp;gt;CFLAGS&amp;lt;/tt&amp;gt; getrost entfernen.&lt;br /&gt;
&lt;br /&gt;
Wenn ihr &amp;quot;&amp;lt;tt&amp;gt;make load&amp;lt;/tt&amp;gt;&amp;quot; ausfürt, wird avrdude gestarte.&lt;br /&gt;
;&amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt;: gibt an, um welchen MCU es sich handelt&lt;br /&gt;
;&amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;: gibt an, um welchen Programmer es sich handelt. Hier könnte z.B &amp;lt;tt&amp;gt;stk500&amp;lt;/tt&amp;gt; stehen.&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;-U flash:w:$(TARGET).hex&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: bedeutet einfach, dass das Programm in den Flash geschrieben werden soll. &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; steht für Schreiben, &amp;lt;tt&amp;gt;r&amp;lt;/tt&amp;gt; für Lesen und &amp;lt;tt&amp;gt;v&amp;lt;/tt&amp;gt; für verify. Dann kommt die Variable &amp;lt;tt&amp;gt;$(TARGET)&amp;lt;/tt&amp;gt;, die besagt, welche Datei genau übertragen werden soll. &lt;br /&gt;
;&amp;lt;tt&amp;gt;-v&amp;lt;/tt&amp;gt;: bedeutet ''&amp;quot;Verbose Output&amp;quot;'' und gibt euch mehr Informationen auf der Konsole aus.&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;tt&amp;gt;make clean&amp;lt;/tt&amp;gt; werden alle Object-Dateien etc. gelöscht.&lt;br /&gt;
&lt;br /&gt;
=Fehlermeldungen=&lt;br /&gt;
&lt;br /&gt;
sollten eigentlich keine vorkommen. Wenn doch, vergewissert euch, dass ihr euch genau an die&lt;br /&gt;
Anleitung gehalten und nichts falsch abgeschrieben habt!&lt;br /&gt;
&lt;br /&gt;
Hier ein paar typische Fehlermeldungen und ihr Lösungen:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;Permission denied&amp;lt;/tt&amp;gt;: Ihr habt nicht die Rechte, um diesen Befehl auszuführen. Höchswahrscheinlich müsst ihr den Befehl als root ausführen.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;make[2]: avr-ranlib: Command not found&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;:&amp;lt;tt&amp;gt;/usr/local/avr/bin&amp;lt;/tt&amp;gt; liegt nicht in &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt;. Folgendes Command ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;export PATH=$PATH:/usr/local/avr/bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;programmer is not responding&amp;lt;/tt&amp;gt;: Es kann keine Verbindung zum Programmer aufgenommen werden: Defektes Kabel, Programmer an der falschen Schnittstelle angeschlossen (default: &amp;lt;tt&amp;gt;/dev/ttyS0&amp;lt;/tt&amp;gt;), kein Strom am Programmer etc.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;can't open device &amp;quot;/dev/ttyS0&amp;quot;: Permission denied&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;: Als normaler User darf man auf die serielle Schnittstelle nicht lesen oder schreiben. Folgenden Befehl als root ausführen:&lt;br /&gt;
:&amp;lt;pre&amp;gt;chmod 666 /dev/ttyS0&amp;lt;/pre&amp;gt;&lt;br /&gt;
:{|&lt;br /&gt;
Zweite und bessere Möglichkeit, die Rechte zu ändern ist es, den Benutzer in die tty-Gruppe auzunehmen.&lt;br /&gt;
Hier ein Beispiel für Gentoo.&lt;br /&gt;
Die Gruppe kann bei anderen Distributionen auch anders heißen!&lt;br /&gt;
&lt;br /&gt;
Als root in die Konsole schreiben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; ls -all /dev/ttyS0&lt;br /&gt;
crw-rw---- 1 root tty 4, 64 25. Jun 02:12 /dev/ttyS0&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier kann man schön erkennen, daß die serielle Schnittstelle dem Benutzer root gehört und die Gruppe &amp;lt;tt&amp;gt;tty&amp;lt;/tt&amp;gt; darauf zugreifen darf. Mit einem einfachen&lt;br /&gt;
 &amp;gt; usermod -a -G tty sebastian&lt;br /&gt;
wird der User &amp;lt;tt&amp;gt;sebastian&amp;lt;/tt&amp;gt; in die tty-Gruppe aufgenommen.&lt;br /&gt;
&lt;br /&gt;
Noch ein Test, ob alles geklappt hat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;gt; groups sebastian&lt;br /&gt;
tty wheel audio cdrom dialout video games usb users portage scanner&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach muss sich Benutzer &amp;lt;tt&amp;gt;sebastian&amp;lt;/tt&amp;gt; neu einlogen und wir sind fertig.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil hierbei ist, daß man Rechte für alle Geräte der Gruppe &amp;lt;tt&amp;gt;tty&amp;lt;/tt&amp;gt; erlangt, also alle seriellen Schnittstellen sowie [[USB]]&amp;amp;nbsp;&amp;amp;harr;&amp;amp;nbsp;[[RS232]]-Adapter, und man braucht an den eigentlichen Rechten nichts zu verändern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Web-Links=&lt;br /&gt;
*[http://www.nongnu.org/avr-libc/user-manual/install_tools.html ''&amp;quot;Installing the GNU Tool Chain&amp;quot;''] Hilfe zum Build und Installation von GCC, binutils, etc unter Linux&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml www.linuxfocus.org (Artikel)] - Tipps zu Build und Installation von avr-gcc, binutils und avr-libc unter Linux&lt;br /&gt;
* [http://users.rcn.com/rneswold/avr/ Rich Neswold: ''A GNU Development Environment for the AVR Microcontroller'']&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/24166 www.mikrocontroller.net (Foren-Beitrag)] - Installation von GCC und Toolchain unter Mac OS X&lt;br /&gt;
&lt;br /&gt;
=Pakete=&lt;br /&gt;
==Slackware==&lt;br /&gt;
Ein Paket für Slackware ist für Zenwalk erhältlich. Mehr dazu siehe hier:&lt;br /&gt;
http://support.zenwalk.org/index.php?topic=14131.[http://support.zenwalk.org/index.php?topic=14131 http://support.zenwalk.org/index.php?topic=14131]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
* [[avr-gcc]]&lt;br /&gt;
* [[WinAVR]]&lt;br /&gt;
&lt;br /&gt;
=Quelle=&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=125603#125603 www.roboternetz.de (Foren-Beitrag)] ''avrgcc + avrdude installieren''&lt;br /&gt;
&lt;br /&gt;
=Autoren=&lt;br /&gt;
*[[Benutzer:Kater|Kater]] (Manuscript)&lt;br /&gt;
*[[Benutzer:SprinterSB|SprinterSB]] (Transcript und Typo)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12487</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12487"/>
				<updated>2007-07-26T07:48:29Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der neuen Version der AvrLiveCD ist dieser Bug behoben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (released)===&lt;br /&gt;
Die neue Version wurde abgespeckt, sodass nurnoch die Notwendigen Funktionen enthalten sind. Die neue Version von Kontrollerlab ist installiert. Für gute Codeoptimierung sorgt jetzt der Gcc 4.1.2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotikeinstieg]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12486</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12486"/>
				<updated>2007-07-26T07:47:01Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der neuen Version der AvrLiveCD ist dieser Bug behoben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (released)===&lt;br /&gt;
Die neue Version wurde abgespeckt, sodass nurnoch die Notwendigen Funktionen enthalten sind. Die neue Version von Kontrollerlab ist installiert. Für gute Codeoptimierung sorgt jetzt der Gcc 4.1.2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Robotereinstieg]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12485</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12485"/>
				<updated>2007-07-26T07:46:15Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der neuen Version der AvrLiveCD ist dieser Bug behoben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (released)===&lt;br /&gt;
Die neue Version wurde abgespeckt, sodass nurnoch die Notwendigen Funktionen enthalten sind. Die neue Version von Kontrollerlab ist installiert. Für gute Codeoptimierung sorgt jetzt der Gcc 4.1.2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12484</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12484"/>
				<updated>2007-07-26T07:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der neuen Version der AvrLiveCD ist dieser Bug behoben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (scheduled)===&lt;br /&gt;
Das nächste Relase der AvrLiveCD wird mitte Juli 2007 erwarted. Geplant sind hier KiCad sowie die 0.8 Version von Kontrollerlab einzubinden. Avr-Gcc wird auf die neueste Version upgedated, sowie die make-Eigenart wird behen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12483</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12483"/>
				<updated>2007-07-26T07:43:28Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der neuen Version der AvrLiveCD ist dieser Bug behoben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (scheduled)===&lt;br /&gt;
Das nächste Relase der AvrLiveCD wird mitte Juli 2007 erwarted. Geplant sind hier KiCad sowie die 0.8 Version von Kontrollerlab einzubinden. Avr-Gcc wird auf die neueste Version upgedated, sowie die make-Eigenart wird behen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] Version auswählen und .rar Datei downloaden.  ''Achtung 256 MegaByte''&lt;br /&gt;
* [http://livecd.ff-aulendorf.de/avr.rar Mirror1]&lt;br /&gt;
Alternativ, wenn man schon Slax hat:&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12482</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12482"/>
				<updated>2007-07-26T07:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der nächsten Version wird verucht diese Eigenart zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (scheduled)===&lt;br /&gt;
Das nächste Relase der AvrLiveCD wird mitte Juli 2007 erwarted. Geplant sind hier KiCad sowie die 0.8 Version von Kontrollerlab einzubinden. Avr-Gcc wird auf die neueste Version upgedated, sowie die make-Eigenart wird behen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Projekthomepage]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] Version auswählen und .rar Datei downloaden.  ''Achtung 256 MegaByte''&lt;br /&gt;
* [http://livecd.ff-aulendorf.de/avr.rar Mirror1]&lt;br /&gt;
Alternativ, wenn man schon Slax hat:&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12481</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12481"/>
				<updated>2007-07-26T07:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der nächsten Version wird verucht diese Eigenart zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (scheduled)===&lt;br /&gt;
Das nächste Relase der AvrLiveCD wird mitte Juli 2007 erwarted. Geplant sind hier KiCad sowie die 0.8 Version von Kontrollerlab einzubinden. Avr-Gcc wird auf die neueste Version upgedated, sowie die make-Eigenart wird behen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.avrlivecd.umfragen-service.de/ Slax]&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] Version auswählen und .rar Datei downloaden.  ''Achtung 256 MegaByte''&lt;br /&gt;
* [http://livecd.ff-aulendorf.de/avr.rar Mirror1]&lt;br /&gt;
Alternativ, wenn man schon Slax hat:&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12258</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12258"/>
				<updated>2007-06-13T12:53:02Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der nächsten Version wird verucht diese Eigenart zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (scheduled)===&lt;br /&gt;
Das nächste Relase der AvrLiveCD wird mitte Juli 2007 erwarted. Geplant sind hier KiCad sowie die 0.8 Version von Kontrollerlab einzubinden. Avr-Gcc wird auf die neueste Version upgedated, sowie die make-Eigenart wird behen sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] Version auswählen und .rar Datei downloaden.  ''Achtung 256 MegaByte''&lt;br /&gt;
* [http://livecd.ff-aulendorf.de/avr.rar Mirror1]&lt;br /&gt;
Alternativ, wenn man schon Slax hat:&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12257</id>
		<title>Diskussion:Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=12257"/>
				<updated>2007-06-13T12:50:55Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daß die crt*.o nicht gefunden wird deutet auf eine fehlerhaft Installation/Built von avr-gcc/avr-binutils hin.&lt;br /&gt;
Sinnvoll wäre auch ein pdf-Reader nebst den AVR-Datenblättern, da man beim Entwickeln gerne darauf zurückgreift. --[[Benutzer:SprinterSB|SprinterSB]] 19:42, 23. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hallo.&lt;br /&gt;
Ich habe das CRT*.o problem durch die makefile in der neueren Version gelöst. Hier muss man die CRTM-File zusätzlich noch angeben. Ein Avr-reader ist schon installiert, der von KDE. Nennt sicht KPDF.&lt;br /&gt;
&lt;br /&gt;
Bis die nächste Version rauskommt, wird noch auf das neue Release von Kontrollerlab gewartet.&lt;br /&gt;
&lt;br /&gt;
Viele Grüße&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 20:22, 2. Feb 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bascom ==&lt;br /&gt;
&lt;br /&gt;
Ich Programmiere in BASCOM und habe deswegen extra ein Windows installiert und jetzt habe ich erst einen Thread gesehen, wie jemand beschreibt, wie er BASCOM mithilfe von Wine auf Linux zum laufen bekommt. Das wäre doch sicher auch etwas für deine Live-CD.&lt;br /&gt;
Als WM für wirklich kleine Rechner würde ich auf die CD noch IceWM packen, das rennt dann auch auf einem P90 (mein BASCOM Rechner z.B., hat im Moment Win98).&lt;br /&gt;
Und als PDF-Reader dann noch XPDF, als Grafikviewer XZGV. Vielleicht kann man ja noch Eagle (existiert ja nativ für Linux) und Ponyprog draufpacken. &lt;br /&gt;
&lt;br /&gt;
Viele Grüsse und noch viel Erfolg :)&lt;br /&gt;
oiermann&lt;br /&gt;
&lt;br /&gt;
PS: Wenn es bei Eagle und BASCOM Probleme mit den Lizenzen geben sollte (natürlich nur, falls du das machen solltest), dann würde ich mich bereiterklären, Scripts zu schreiben, die das ganze in eine Ramdisk installieren, also ziehen und dann installieren. Bei Bascom wäre das dann ja auch nur die DEMO-Version.&lt;br /&gt;
----&lt;br /&gt;
Hallo,&lt;br /&gt;
&lt;br /&gt;
Bascom wird es auf dieser CD niemals geben, da Bascom ein sehr niederes Ansehen bei mir hat. Tut mir leid für den Korb. &lt;br /&gt;
&lt;br /&gt;
Viele Grüße&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 14:50, 13. Jun 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Getriebemotoren&amp;diff=11718</id>
		<title>Getriebemotoren</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Getriebemotoren&amp;diff=11718"/>
				<updated>2007-04-28T06:27:43Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wenn man in Bezug auf unser Robotik-Hobby von Getriebemotoren spricht, meint man in erster Linie Gleichstrom-Getriebemotoren (DC-Motoren) wie sie zum Teil auch im Modellbau verwendet werden. Da die meisten Bastler doch kleinere Roboter konstruieren, die oft zwischen 2 und 10 kg wiegen, werden oft DC-Motoren im Spannungsbereich von 6 bis 12 V verwendet. In diesem Bereich gibt es natürlich unzählige Motoren aller Preisklassen und Hersteller. Da aber die Robotik-Bastelei nicht erst gestern erfunden wurde, haben sich bestimmte Motoren schon einen Namen gemacht. Sehr beliebte Typen sind zum Beispiel der Motor RB35 und Motoren von Bühler und Igarashi.&lt;br /&gt;
&lt;br /&gt;
http://www.roboternetz.de/wiki/uploads/Main/rb35.jpg&lt;br /&gt;
&lt;br /&gt;
http://www.roboternetz.de/wiki/uploads/Main/igarashi.jpg&lt;br /&gt;
&lt;br /&gt;
Diese Motoren bekommt man mit unterschiedlichen Zahnrad-Untersetzungen, so dass man sowohl sehr flinke Roboter als auch recht starke aber langsame Roboter konstruieren kann. Durch die Wahl der Untersetzung kann auch eine optimale Anpassung an den geplanten Raddurchmesser erfolgen. &lt;br /&gt;
&lt;br /&gt;
In diesem Zusammenhang empfehle ich folgende Berechnungsseite:&lt;br /&gt;
http://www.roboternetz.de/phpBB2/motordrehmoment.php&lt;br /&gt;
&lt;br /&gt;
Über diese Webseite kann man in etwa berechnen wie stark ein Motor sein muss und welche Geschwindigkeit bei unterschiedlichem Raddurchmesser und Untersetzung zu erwarten sind. Es ist ratsam vor der Konstruktion und vor dem Kauf des Motors ein wenig dort zu rechnen, ansonsten wundert man sich nachher vielleicht, wenn der Roboter kaum schneller als eine Schnecke ist oder aber wegen zu hoher Geschwindigkeit kaum noch steuerbar ist. Als Anhaltspunkt sei gesagt, dass Roboter-Motoren oft zwischen 5 und 50 Umdrehungen pro Minute schaffen, je nachdem wie groß das Rad ist. Je größer das Rad, desto weniger schnell muss sich der Motor drehen, versteht sich.&lt;br /&gt;
&lt;br /&gt;
==Das Drehmoment==&lt;br /&gt;
&lt;br /&gt;
Die Kraft eines Motors wird durch das sogenannte Drehmoment angegeben. Beim Kauf sollte immer auf diese Angabe geachtet werden. Die Einheit Newtonmeter wird mit Nm bzw. mNm (milliNewtonmeter) bzw. Ncm (Newtonzentimeter) abgekürzt. &lt;br /&gt;
100 Ncm entsprechen 1 Nm. Leider wird das Drehmoment von einigen Anbietern auch in ganz anderen Einheiten angegeben, was den Vergleich nicht immer einfach macht. Ein wenig habe ich den Verdacht, dass dies so mancher Anbieter auch deshalb so macht. Standard ist jedenfalls eindeutig Newton.&lt;br /&gt;
&lt;br /&gt;
Das Drehmoment ist die Kraft mal den Weg. Ich möchte nun niemanden mit der ganzen Mathematik von meiner Webseite verscheuchen (ich mag die auch nicht), daher nur ein paar Beispiele:&lt;br /&gt;
&lt;br /&gt;
Wenn man an den Zeiger einer Turmuhr in der Stellung auf 3 Uhr ein Gewicht von 10 kg hängt, wirkt auf die Achse ein Drehmoment von 100 Nm (also 10000 Ncm).&lt;br /&gt;
Ein Getriebemotor mit 100 Ncm könnte beispielsweise bei einem Hebel von 1 cm (an der Achse) noch 10 kg heben. Eine ganz schöne Leistung, nicht wahr?&lt;br /&gt;
&lt;br /&gt;
[[Bild:kirchturmuhr_150dpi.jpeg|center]]&lt;br /&gt;
&lt;br /&gt;
Kleinere Getriebemotoren (3-10 cm Länge) haben oft eine maximale Kraft von 5–60 Ncm hinter dem Getriebe. Vor einem Getriebe sind es je nach Untersetzungsfaktor oft nur 0,5 bis 3 Ncm. Die Hersteller geben manchmal das Drehmoment vor und manchmal nach dem Getriebe an. Hier kommt es daher immer wieder zu Verwechslungen, also immer gut aufpassen.&lt;br /&gt;
In der Regel reicht ein Getriebemotor wie der RB-35 mit ca. 0,6 Ncm (vor Getriebe mit großer Untersetzung z.B. 1:100 oder 1:200) für kleine Roboter fast immer aus. Bei einer Untersetzung 1:100 sind das immerhin fast 40 Ncm. &lt;br /&gt;
Noch kleinere Roboter können auch mit Servos angetrieben werden. Einige Bastler haben herausgefunden, dass man Servos mit etwas Geschick auseinandernehmen kann und mit wenig Aufwand so austricksen kann, dass diese als ganz normale Motoren arbeiten (also 360 Grad Volldrehungen machen können). Allerdings reichen Servos aufgrund der Plastikzahnräder wirklich nur für Kleinstroboter (siehe auch unter [[Servos]]).&lt;br /&gt;
&lt;br /&gt;
http://www.roboternetz.de/wiki/uploads/Main/servo.jpg&lt;br /&gt;
&lt;br /&gt;
Seit kurzem gibt es für kleinere Roboter auch eine Alternative zu Servos, nämlich einen Modellbau-Twin-Motor. Eigentlich sind es zwei getrennte Motoren mit zwei Getrieben. Jedoch sind diese sehr kompakt zu einem leicht montierbaren Modul zusammengefasst worden. Dadurch lassen sich sehr einfach sehr schmale Roboter konstruieren. &lt;br /&gt;
&lt;br /&gt;
http://www.roboternetz.de/bilder/twinmotor.gif&lt;br /&gt;
&lt;br /&gt;
Für größere Roboter ab 5 kg aufwärts braucht man schon recht starke Getriebemotoren. Hier bieten sich dann als preiswerte Lösung auch Scheibenwischermotoren vom Schrotthandel an. Diese können dann auch Roboter über 10 oder 20 kg problemlos bewegen. Allerdings sollte man immer auch den Strombedarf im Auge haben! Keine Sorge, auch Scheibenwischermotoren drehen sich wie normale Motoren um 360 Grad. Die Hin- und Herbewegung der Scheibenwischer wird in der Regel über ein Gestänge erreicht und hat nichts mit dem Motor zu tun.&lt;br /&gt;
&lt;br /&gt;
http://www.roboternetz.de/bilder/G310233.jpg&lt;br /&gt;
&lt;br /&gt;
==Vor- und Nachteile von Getriebemotoren==&lt;br /&gt;
&lt;br /&gt;
Getriebemotoren haben zwar den Vorteil, dass sie recht günstig, recht klein und recht einfach anzusteuern sind. Die Richtungsumkehr ist durch einfaches Umpolen ebenfalls kein Problem. &lt;br /&gt;
Aber sie haben auch Nachteile. Ein Roboter, der sich in einer Umgebung haargenau zurecht finden soll, muss kerzengerade und auch Kurven in genau definiertem Winkel fahren können. Dies ist mit Getriebemotoren nicht so einfach, denn die Motoren bleiben ja nicht sofort stehen, wenn die Spannung abgeschaltet wird. Je kleiner die Untersetzung, desto mehr laufen die Roboter nach dem Ausschalten noch nach. Zudem drehen sie sich je nach Bodenbeschaffenheit mal langsamer und mal schneller. Der Roboter weiss also nie genau wieviel Umdrehungen das Rad nun eigentlich wirklich gemacht hat. &lt;br /&gt;
Diesen Nachteil muss man mit Sensoren (Drehgeber, Gabellichtschranken etc.) ausgleichen. Am Rad muss also ein Sensor angebracht werden, welcher bei Bewegung des Rades Impulse an den Microcontroller sendet. Der Microcontroller muss also ständig prüfen, wie weit sich ein Rad bewegt hat. Schon die Geradeausfahrt wird ein extrem kompliziertes Steuerungsproblem. Denn alle Motoren unterliegen ja Toleranzen und drehen bei gleicher Spannung nie genauso schnell. Um geradeaus zu fahren, muss also immer ein Motor gebremst und ein anderer beschleunigt werden. Das Ganze muss so schnell kontrolliert und gesteuert werden, dass es dem Beobachter gar nicht auffällt. Zwar lässt sich dies alles mit Software oder auch mit Hardware regeln, aber es ist doch ein ganz schöner Aufwand, insbesondere für Einsteiger.&lt;br /&gt;
Daher bin ich kein großer Freund von Getriebemotoren als Roboter-Antrieb, wenn es wirklich um sehr genaue Positionierung geht. Ich favorisiere die sogenannten [[Schrittmotoren]]. [[Schrittmotoren]] gelten als recht kompliziert in der Ansteuerung und recht schwach. Das dies nicht der Fall ist, erläutere ich auf der Seite [[Schrittmotoren]]. &lt;br /&gt;
&lt;br /&gt;
Ist eine 100% genaue Positionierung aber gar nicht so wichtig, dann ist man ohne Frage mit den Getriebemotoren sehr schnell am Ziel. Die meisten Roboter werden mit 2 Getriebemotoren und eine Art drehbarem Möbelrad konstruiert. Es gibt aber auch Allrad-Fahrzeuge, die gleich auf 4 Motoren setzen. Wie gesagt, im Auge sollte man immer auch den Strombedarf und das Akkugewicht haben. &lt;br /&gt;
&lt;br /&gt;
Im Roboternetz gibt es eine Übersicht von besonders preiswerten und immer wieder verwendeten Getriebemotoren: http://www.roboternetz.de/motoruebersicht.html  Diese Liste wird immer ergänzt, wenn es irgendwo wieder besondere Schnäppchen gibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Motorkraft_berechnen]]&lt;br /&gt;
* [[Getriebemotoren Ansteuerung]]&lt;br /&gt;
* [[Servos]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Stärke des Motors online berechnen lassen]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotikeinstieg]]&lt;br /&gt;
[[Category:Praxis]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Motoren]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Avr-gcc&amp;diff=10344</id>
		<title>Avr-gcc</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Avr-gcc&amp;diff=10344"/>
				<updated>2007-03-03T06:43:01Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''avr-gcc''' ist ein freier C-[[Compiler]], mit dem man C-Programme zu ausführbaren Programmen übersetzen kann, die auf [[Microcontroller]]n der [[AVR]]-Familie lauffähig sind. &lt;br /&gt;
An Sprachen versteht avr-gcc sowohl C als auch [[#C%2b%2b|C++]]. &lt;br /&gt;
Neben Standard-C bzw. ANSI-C versteht avr-gcc auch GNU-C, das etwas mehr Möglichkeiten und kleinere Spracherweiterungen bietet.&lt;br /&gt;
&lt;br /&gt;
avr-gcc kann auch dazu verwendet werden, um C/C++ Programme nach Assembler zu übersetzen oder um Bibliotheken zu erstellen, die später in unterschiedlichen Projekten verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
Wie bei allen aus der UNIX-Welt kommenden Programmen ist das Kommando-Interface von avr-gcc die Shell bzw. die Kommandozeile, über die Optionen, Parameter, Einstellungen und die Namen der zu übersetzenden Dateien angegeben werden. &lt;br /&gt;
&lt;br /&gt;
=How to Read=&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel bespricht avr-gcc Version 3.x. Er ist kein C-Tutorial und kein AVR-Handbuch &amp;amp;ndash; das würde den Umfang des Artikels bei weitem sprengen. &lt;br /&gt;
&lt;br /&gt;
Der Artikel ist ein Handbuch zu avr-gcc. Er bespricht zum Beispiel, wie man avr-gcc anwendet und Besonderheiten von avr-gcc-C,&lt;br /&gt;
die nicht zum Sprachumfang von C gehören.&lt;br /&gt;
Dazu zählen die Definition von [[#Interrupts|Interrupt]] Service Routinen ([[ISR|ISRs]]) &lt;br /&gt;
oder wie man Daten ins [[EEPROM]] legt.&lt;br /&gt;
&lt;br /&gt;
Es wird also besprochen, ''wie'' eine ISR zu definieren ist, aber nicht,&lt;br /&gt;
''warum'' das  gegebenenfalls notwendig oder nicht notwendig ist. &lt;br /&gt;
''Warum'' etwas gemacht wird, ist abhängig von der gestellten Aufgabe,&lt;br /&gt;
etwa ''&amp;quot;Initialisiere den [[UART]] zur Benutzung mit 9600 Baud&amp;quot;''.&lt;br /&gt;
Dafür enthält dieser Artikel zusammen mit dem AVR-Handbuch das Rüstzeug, &lt;br /&gt;
bietet aber keine Lösungen für konkrete Aufgaben.&lt;br /&gt;
&lt;br /&gt;
Neben diesem Artikel gibt es den Unterartikel [[avr-gcc/Interna|Interna von avr-gcc]] wo Dinge wie die Registerverwendung, Attribute, Builtins und Sections von avr-gcc dargestellt werden. Zudem findet sich dort ein Überblick über die Arbeitsweise von gcc mit den Schritten&lt;br /&gt;
* Precompilieren&lt;br /&gt;
* Compilieren&lt;br /&gt;
* Assemblieren&lt;br /&gt;
* Linken&lt;br /&gt;
Ein weiterer Unterartikel widmet sich dem Thema [[Inline-Assembler in avr-gcc]].&lt;br /&gt;
&lt;br /&gt;
In den [[:Kategorie:Quellcode C|C-Codebeispielen]]&lt;br /&gt;
befindet sich das ausführlichere Beispiel &amp;quot;[[Hallo Welt für AVR (LED blinken)]]&amp;quot;,&lt;br /&gt;
das nur eine [[Diode#Lumineszenzdiode|LED]] blinkt und zeigt, &lt;br /&gt;
wie ein kleines Projekt mit avr-gcc compiliert werden kann.&lt;br /&gt;
&lt;br /&gt;
Es gibt ein [[C-Tutorial]], das jedoch noch unvollständig und teilweise feherhaft ist (Stand 02/2006). Darüber hinaus gibt es ein [http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial C-Tutorial bei www.mikrocontroller.net].&lt;br /&gt;
&lt;br /&gt;
=Benutzer-Schnittstelle=&lt;br /&gt;
&lt;br /&gt;
Die Benutzer-Schnittstelle von avr-gcc ist &amp;amp;ndash; wie für alle Programme, die aus der UNIX-Welt kommen &amp;amp;ndash; die Kommandozeile einer Shell, Console bzw. Eingabeaufforderung. &lt;br /&gt;
&lt;br /&gt;
Im einfachsten Fall sieht ein Aufruf von avr-gcc also so aus:&lt;br /&gt;
 &amp;gt; avr-gcc&lt;br /&gt;
Dabei das '&amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;' nicht mittippen, und ein ENTER am Ende der Zeile drücken.&lt;br /&gt;
Die Antwort bei korrekter Installation ist dann&lt;br /&gt;
 avr-gcc: no input files&lt;br /&gt;
Was bedeutet: das Programm avr-gcc wurde vom Betriebssystem gefunden und konnte/durfte gestartet werden. Dann gibt avr-gcc eine Fehlermeldung aus und beendet die Ausführung, weil er keine Eingabedatei(en) bekommen hat &amp;amp;#150; was ja auch stimmt. Soweit ist also alles in Butter.&lt;br /&gt;
&lt;br /&gt;
Um eine C-Datei &amp;lt;tt&amp;gt;foo.c&amp;lt;/tt&amp;gt; mir avr-gcc optimiert zu einem lauffähigen elf-Programm &amp;lt;tt&amp;gt;foo.elf&amp;lt;/tt&amp;gt; für einen [[ATmega32]] zu compileren, würde man angeben&lt;br /&gt;
 &amp;gt; avr-gcc -O2 -mmcu=atmega32 foo.c -o foo.elf&lt;br /&gt;
Hat man seine Quellen auf zwei oder mehre Dateien verteilt, geht es analog:&lt;br /&gt;
 &amp;gt; avr-gcc -O2 -mmcu=atmega32 foo.c foo2.c -o foo.elf&lt;br /&gt;
&lt;br /&gt;
Will man nur eine Objekt-Datei erstellen (nur compilieren, nicht linken), dann geht das wie folgt. Das kann günstig sein bei grösseren Projekten, wenn man das Projekt neu erzeugen will, aber nur in einer Quelldatei was geändert hat. Oder wenn das Objekt in einer Bibliothek landen soll.&lt;br /&gt;
 &amp;gt; avr-gcc -O2 -c -mmcu=atmega32 foo.c -o foo.o&lt;br /&gt;
&lt;br /&gt;
Die ausführbare Gesamtdatei &amp;lt;tt&amp;gt;foo_all.elf&amp;lt;/tt&amp;gt; erhält man dann, indem alle Objekte zusammenlinkt:&lt;br /&gt;
 &amp;gt; avr-gcc -mmcu=atmega32 foo.o foo2.o foo3.o -o foo_all.elf&lt;br /&gt;
&lt;br /&gt;
Um die ausführbare Datei in das oft verwendete Intex-HEX-Format umzuwandeln (einmal fürs Programm, einmal für ein Abbild des [[EEPROM]]s) gibt man an:&lt;br /&gt;
 &amp;gt; avr-objcopy -O ihex -j .text -j .data                         foo_all.elf  foo_all.hex&lt;br /&gt;
 &amp;gt; avr-objcopy -O ihex -j .eeprom --change-section-lma .eeprom=0 foo_all.elf  foo_all_eeprom.hex&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[GCC]] war immer Kommandozeilen-orientiert und wird es auch immer bleiben, denn das hat gute Gründe:&lt;br /&gt;
* ein Compiler ist ein Compiler ist ein Compiler (und keine grafische Bedienschnittstelle)&lt;br /&gt;
* die Plattformabhängigkeit wird auf ein Minimum reduziert&lt;br /&gt;
* es gibt die Möglichkeit, avr-gcc per Skript oder [[make]] zu starten&lt;br /&gt;
* avr-gcc kann durchaus in eine Umgebung integriert werden: in einen Editor oder in eine GUI wie neuere Versionen von AVR-Studio erfolgreich beweisen, etc. Der avr-gcc-Aufruf kann sogar von einem Server-Socket oder einer Web-Application heraus erfolgen, welche ein C-Programm empfängt, es von avr-gcc übersetzen lässt, und das Resultat zurückschickt oder sonst was damit anstellt.&lt;br /&gt;
* Lizenzgründe: eine Umgebung, die avr-gcc integriert, kann durchaus proprietär oder nicht quelloffen sein und muss nicht der [[Freie Software|GPL]] unterliegen. Wieder ist AVR-Studio ein Beispiel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Unterstützte AVR-Derivate=&lt;br /&gt;
;Classic AVR&amp;amp;#58;: [[AT90S1200]], [[AT90S2313]], [[AT90S8515]], [[AT90S8535]], [[AT90S4433]], [[AT90S4414]], [[AT90S4434]], [[AT90S2323]], [[AT90S2333]], [[AT90S2343]], &lt;br /&gt;
&lt;br /&gt;
;tinyAVR&amp;amp;#58;: [[ATtiny10]], [[ATtiny11]], [[ATtiny12]], [[ATtiny15]], [[ATtiny28]], [[ATtiny22]], [[ATtiny26]], [[AT90C8534]], [[AT86rf401]], [[ATtiny13]], [[ATtiny2313]], [[ATtiny261]], [[ATtiny461]], [[ATtiny861]], [[ATtiny24]], [[ATtiny44]], [[ATtiny84]], [[ATtiny25]], [[ATtiny45]], [[ATtiny85]]&lt;br /&gt;
&lt;br /&gt;
;megaAVR&amp;amp;#58;: [[ATmega603]], [[ATmega103]], [[AT76C711]], [[ATmega48]], [[ATmega8]], [[ATmega83]], [[ATmega85]], [[ATmega88]], [[ATmega8515]], [[ATmega8535]], [[ATmega16]], [[ATmega161]], [[ATmega162]], [[ATmega163]], [[ATmega164p]], [[ATmega165]], [[ATmega165P]], [[ATmega168]], [[ATmega32]], [[ATmega323]], [[ATmega324P]], [[ATmega325]], [[ATmega3250]],  [[ATmega64]], [[ATmega640]], [[ATmega644]], [[ATmega644P]], [[ATmega128]], [[ATmega1280]], [[ATmega1281]], [[ATmega645]],  [[ATmega6450]], [[AT94K]]&lt;br /&gt;
&lt;br /&gt;
; [[LCD]] AVR&amp;amp;#58;: [[ATmega169]], [[ATmega169P]], [[ATmega329]], [[ATmega3290]], [[ATmega649]], [[ATmega6490]],&lt;br /&gt;
; Lightning AVR&amp;amp;#58;: [[AT90PWM2]], [[AT90PWM3]]&lt;br /&gt;
; [[CAN]] AVR&amp;amp;#58;: [[AT90CAN32]], [[AT90CAN64]], [[AT90CAN128]]&lt;br /&gt;
; Smart Battery&amp;amp;#58;: [[ATmega406]]&lt;br /&gt;
; [[USB]] AVR&amp;amp;#58;: [[AT43USB320]], [[AT43USB355]], [[AT90USB646]], [[AT90USB647]], [[AT90USB1286]], [[AT90USB1287]]&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
Diese Liste kann man avr-gcc anzeigen lassen mit&lt;br /&gt;
 &amp;gt; avr-gcc --target-help&lt;br /&gt;
&lt;br /&gt;
=Kommandozeilen-Optionen=&lt;br /&gt;
Die Codegenerierung bei avr-gcc wird über Kommandozeilen-Optionen gesteuert. Diese legen fest, für welchen Controller Code zu erzeugen ist, wie stark optimiert wird, ob Debug-Informationen erzeugt werden, etc. Die Optionen teilen sich in zwei Gruppen: Optionen, die für alle GCC-Ports verfürgbar sind und maschinenspezifische Optionen, die nur für AVR verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
Aus der Masse an GCC-Optionen kann hier nur ein kleiner Auszug der wichtigsten und am häufigsten verwendeten Optionen vorgestellt werden. Eine Auflistung aller GCC-Optionen mit Kurzbeschreibung umfasst knapp 1000 Zeilen &amp;amp;#150; ohne undokumentierte Optionen, versteht sich.&lt;br /&gt;
&lt;br /&gt;
==Allgemeine Optionen für GCC==&lt;br /&gt;
; &amp;lt;tt&amp;gt;--help&amp;lt;/tt&amp;gt;: Anzeige der wichtigsten Optionen&lt;br /&gt;
; &amp;lt;tt&amp;gt;--help -v&amp;lt;/tt&amp;gt;: Überschüttet einen mit Optionen&lt;br /&gt;
; &amp;lt;tt&amp;gt;--target-help&amp;lt;/tt&amp;gt;: Anzeige der wichtigsten maschinenspezifischen Optionen und der unterstützten AVR-Derivate&lt;br /&gt;
; &amp;lt;tt&amp;gt;-O0&amp;lt;/tt&amp;gt;: keine Optimierung&lt;br /&gt;
; &amp;lt;tt&amp;gt;-O1&amp;lt;/tt&amp;gt;: Optimierung&lt;br /&gt;
; &amp;lt;tt&amp;gt;-Os&amp;lt;/tt&amp;gt;: optimiert für Code-Größe&lt;br /&gt;
; &amp;lt;tt&amp;gt;-O2&amp;lt;/tt&amp;gt;: stärkere Optimierung für bessere Laufzeit&lt;br /&gt;
; &amp;lt;tt&amp;gt;-g&amp;lt;/tt&amp;gt;: erzeugt Debug-Informationen&lt;br /&gt;
; &amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;: (pre)compilert und assembliert nur bis zum Objekt (&amp;lt;tt&amp;gt;*.o&amp;lt;/tt&amp;gt;), kein Link-Lauf&lt;br /&gt;
; &amp;lt;tt&amp;gt;-S&amp;lt;/tt&amp;gt;: (pre)compilert nur und erzeugt Assembler-Ausgabe (*.s)&lt;br /&gt;
; &amp;lt;tt&amp;gt;-E&amp;lt;/tt&amp;gt;: nur Precompilat (&amp;lt;tt&amp;gt;*.i&amp;lt;/tt&amp;gt;) erzeugen, kein Compilieren, kein Assemblieren, kein Linken&lt;br /&gt;
; &amp;lt;tt&amp;gt;-o &amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt;: legt den Name der Ausgabedatei fest&lt;br /&gt;
; &amp;lt;tt&amp;gt;-v&amp;lt;/tt&amp;gt;: zeigt Versionsinformationen an und ist geschwätzig (verbose): Anzeige der aufgerufenen tools&lt;br /&gt;
; &amp;lt;tt&amp;gt;-I&amp;lt;path&amp;gt;&amp;lt;/tt&amp;gt;: Angabe eines weiteren Include-Pfads, in dem Dateien mit &amp;lt;tt&amp;gt;#include &amp;lt;...&amp;gt;&amp;lt;/tt&amp;gt; gesucht werden&lt;br /&gt;
; &amp;lt;tt&amp;gt;-E -dM &amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt;: Anzeige aller Defines&lt;br /&gt;
; &amp;lt;tt&amp;gt;-MM&amp;lt;/tt&amp;gt;: Für die angegebenen Eingabe-Dateien wird eine Ausgabe erzeugt, die als [[make|Makefile]]-Fragment dienen kann und die Anhängigkeiten (dependencies) der Objekte von den Quellen/Headern beschreibt.&lt;br /&gt;
; &amp;lt;tt&amp;gt;-D&amp;lt;name&amp;gt;&amp;lt;/tt&amp;gt;: Definiert Makro &amp;lt;tt&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
; &amp;lt;tt&amp;gt;-D&amp;lt;name&amp;gt;=&amp;lt;wert&amp;gt;&amp;lt;/tt&amp;gt;: Definiert Makro &amp;lt;tt&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/tt&amp;gt; zu &amp;lt;tt&amp;gt;&amp;lt;wert&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
; &amp;lt;tt&amp;gt;-U&amp;lt;name&amp;gt;&amp;lt;/tt&amp;gt;: Undefiniert Makro &amp;lt;tt&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
; &amp;lt;tt&amp;gt;-save-temps&amp;lt;/tt&amp;gt;: Temporäre Dateien (&amp;lt;tt&amp;gt;*.i&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;*.s&amp;lt;/tt&amp;gt;) werden nicht gelöscht. Teilweise fehlerhaft zusammen mit &amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;&lt;br /&gt;
; &amp;lt;tt&amp;gt;-Wa,&amp;lt;options&amp;gt;&amp;lt;/tt&amp;gt;: übergibt Komma-getrennte Liste &amp;lt;tt&amp;gt;&amp;lt;options&amp;gt;&amp;lt;/tt&amp;gt; an den Assembler (&amp;lt;tt&amp;gt;avr-as&amp;lt;/tt&amp;gt;)&lt;br /&gt;
:;&amp;lt;tt&amp;gt;-Wa,-a=&amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt;: Assembler erzeugt ein Listing mit Name &amp;lt;tt&amp;gt;&amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
; &amp;lt;tt&amp;gt;-Wp,&amp;lt;options&amp;gt;&amp;lt;/tt&amp;gt;:  übergibt Komma-getrennte Liste &amp;lt;tt&amp;gt;&amp;lt;options&amp;gt;&amp;lt;/tt&amp;gt; an den Preprozessor&lt;br /&gt;
; &amp;lt;tt&amp;gt;-Wl,&amp;lt;options&amp;gt;&amp;lt;/tt&amp;gt;:  übergibt Komma-getrennte Liste &amp;lt;tt&amp;gt;&amp;lt;options&amp;gt;&amp;lt;/tt&amp;gt; an den Linker (&amp;lt;tt&amp;gt;avr-ld&amp;lt;/tt&amp;gt;)&lt;br /&gt;
:;&amp;lt;tt&amp;gt;-Wl,-Map=&amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt;: Linker erzeugt ein Map-File mit Name &amp;lt;tt&amp;gt;&amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
:;&amp;lt;tt&amp;gt;-Wl,--oformat=&amp;lt;format&amp;gt;&amp;lt;/tt&amp;gt;: Linker erzeugt Ausgabe im Format &amp;lt;tt&amp;gt;&amp;lt;format&amp;gt;&amp;lt;/tt&amp;gt;, z.b. &amp;lt;tt&amp;gt;ihex&amp;lt;/tt&amp;gt; für Intel-HEX-File&lt;br /&gt;
:;&amp;lt;tt&amp;gt;-Wl,--section-start=&amp;lt;section&amp;gt;=&amp;lt;address&amp;gt;&amp;lt;/tt&amp;gt;: Linker legt die [[avr-gcc/Interna#Sections|Section]] &amp;lt;tt&amp;gt;&amp;lt;section&amp;gt;&amp;lt;/tt&amp;gt; ab Adresse &amp;lt;tt&amp;gt;&amp;lt;address&amp;gt;&amp;lt;/tt&amp;gt;, z.B: &amp;lt;tt&amp;gt;.eeprom=0x810001&amp;lt;/tt&amp;gt;&lt;br /&gt;
; &amp;lt;tt&amp;gt;-Wall&amp;lt;/tt&amp;gt;: gibt mehr Warnungen, aber immer noch nicht alle&lt;br /&gt;
; &amp;lt;tt&amp;gt;-pedantic&amp;lt;/tt&amp;gt;: geht besonders pedantisch mit Code um&lt;br /&gt;
; &amp;lt;tt&amp;gt;-std=c89&amp;lt;br/&amp;gt;-ansi&amp;lt;/tt&amp;gt;: bricht mit einer Fehlermeldung ab, wenn kein ANSI-C (ISO C89) verwendet wurde&lt;br /&gt;
; &amp;lt;tt&amp;gt;-std=c99&amp;lt;/tt&amp;gt;: bricht mit einer Fehlermeldung ab, wenn kein ISO C99 verwendet wurde&lt;br /&gt;
; &amp;lt;tt&amp;gt;-ffreestanding&amp;lt;/tt&amp;gt;: Das erzeugte Programm läuft nicht in einer Umgebung wie einer Shell. Der Prototyp von &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt; ist&lt;br /&gt;
:&amp;lt;pre&amp;gt;void main (void);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Maschinenspezifische Optionen für avr-gcc==&lt;br /&gt;
Maschinenabhängige Optionen beginnen immer mit '''-m'''&lt;br /&gt;
;-mmcu=xxx: Festlegen des Targets (Zielsystem/Controller), für das Code generiert werden soll. Je nach Target muss avr-gcc unterschiedliche Instruktionen verwenden und andere Startup-Dateien (&amp;lt;tt&amp;gt;crtxxx.o&amp;lt;/tt&amp;gt;) einbinden. avr-gcc setzt spezielle Defines, um auch in der Quelle zwischen den Targets unterscheiden zu können, falls das notwendig sein sollte: &lt;br /&gt;
:{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef __AVR_AT90S2313__&lt;br /&gt;
/* Code fuer AT90S2313 */&lt;br /&gt;
#elif defined (__AVR_ATmega8__) || defined (__AVR_ATmega32__)&lt;br /&gt;
/* Code fuer Mega8 und Mega32 */ &lt;br /&gt;
#else&lt;br /&gt;
#error Das ist noch nicht implementiert für diesen Controller!&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwar gibt es für alle AVR-Derivate die &amp;lt;tt&amp;gt;avr/io.h&amp;lt;/tt&amp;gt;, aber die AVR-Familien unterscheiden sich in ihrer Hardware; z.B. darin, wie I/O-Register heissen oder wie Hardware zu initialisieren ist. Diese Abhängigkeit kann man in unterschiedlichen Codestücken aufteilen und wie oben gezeigt bedingt übersetzen. Dadurch hat man Funktionalitäten wie &amp;lt;tt&amp;gt;uart_init&amp;lt;/tt&amp;gt; auf unterschiedlichen Controllern und wahrt den Überblick, weil nicht für jede Controller-Familie eine extra Datei notwendig ist.&lt;br /&gt;
{| &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
:{| {{Blauetabelle}}&lt;br /&gt;
|+ '''AVR classic, &amp;amp;lt;= 8 kByte'''&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
!|mcu || Builtin define&lt;br /&gt;
 |- &lt;br /&gt;
 |avr2 ||&amp;lt;tt&amp;gt;__AVR_ARCH__=2&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |[[AT90S2313|at90s2313]]  ||&amp;lt;tt&amp;gt;__AVR_AT90S2313__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s2323 ||&amp;lt;tt&amp;gt;__AVR_AT90S2323__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s2333 ||&amp;lt;tt&amp;gt;__AVR_AT90S2333__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s2343 ||&amp;lt;tt&amp;gt;__AVR_AT90S2343__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |attiny22 ||&amp;lt;tt&amp;gt;__AVR_ATtiny22__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |attiny26 ||&amp;lt;tt&amp;gt;__AVR_ATtiny26__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s4414 ||&amp;lt;tt&amp;gt;__AVR_AT90S4414__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s4433 ||&amp;lt;tt&amp;gt;__AVR_AT90S4433__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s4434 ||&amp;lt;tt&amp;gt;__AVR_AT90S4434__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s8515 ||&amp;lt;tt&amp;gt;__AVR_AT90S8515__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90c8534 ||&amp;lt;tt&amp;gt;__AVR_AT90C8534__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s8535 ||&amp;lt;tt&amp;gt;__AVR_AT90S8535__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at86rf401 ||&amp;lt;tt&amp;gt;__AVR_AT86RF401__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
 |  &amp;lt;!-----------------------------------------------------------&amp;gt;&lt;br /&gt;
:{| {{Blauetabelle}}&lt;br /&gt;
|+ '''AVR classic, &amp;amp;gt; 8 kByte'''&lt;br /&gt;
|- bgcolor=&amp;quot;#ccccff&amp;quot;&lt;br /&gt;
! |mcu ||Builtin define&lt;br /&gt;
 |- &lt;br /&gt;
 |avr3 ||&amp;lt;tt&amp;gt;__AVR_ARCH__=3&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega103 ||&amp;lt;tt&amp;gt;__AVR_ATmega103__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega603 ||&amp;lt;tt&amp;gt;__AVR_ATmega603__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at43usb320 ||&amp;lt;tt&amp;gt;__AVR_AT43USB320__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at43usb355 ||&amp;lt;tt&amp;gt;__AVR_AT43USB355__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at76c711 ||&amp;lt;tt&amp;gt;__AVR_AT76C711__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&amp;lt;!-----------------------------------------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
 |- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |&lt;br /&gt;
:{| {{Blauetabelle}}&lt;br /&gt;
|+ '''AVR enhanced, &amp;amp;lt;= 8 kByte'''&lt;br /&gt;
|- bgcolor=&amp;quot;#ccccff&amp;quot;&lt;br /&gt;
!|mcu || Builtin define&lt;br /&gt;
 |- &lt;br /&gt;
 |avr4 ||&amp;lt;tt&amp;gt;__AVR_ARCH__=4&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Atmel Controller Mega8|atmega8]] ||&amp;lt;tt&amp;gt;__AVR_ATmega8__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega8515 ||&amp;lt;tt&amp;gt;__AVR_ATmega8515__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega8535 ||&amp;lt;tt&amp;gt;__AVR_ATmega8535__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
 |&amp;lt;!-----------------------------------------------------------&amp;gt;&lt;br /&gt;
:{| {{Blauetabelle}}&lt;br /&gt;
|+ '''AVR enhanced, &amp;amp;gt; 8 kByte'''&lt;br /&gt;
|- bgcolor=&amp;quot;#ccccff&amp;quot;&lt;br /&gt;
!|mcu ||Builtin define&lt;br /&gt;
 |- &lt;br /&gt;
 |avr5 ||&amp;lt;tt&amp;gt;__AVR_ARCH__=5&amp;lt;/tt&amp;gt; &lt;br /&gt;
 |-&lt;br /&gt;
 |[[Atmel Controller Mega16 und Mega32|atmega16]] ||&amp;lt;tt&amp;gt;__AVR_ATmega16__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega161 ||&amp;lt;tt&amp;gt;__AVR_ATmega161__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega162 ||&amp;lt;tt&amp;gt;__AVR_ATmega162__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega163 ||&amp;lt;tt&amp;gt;__AVR_ATmega163__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega169 ||&amp;lt;tt&amp;gt;__AVR_ATmega169__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Atmel Controller Mega16 und Mega32|atmega32]] ||&amp;lt;tt&amp;gt;__AVR_ATmega32__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |atmega323 ||&amp;lt;tt&amp;gt;__AVR_ATmega323__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |[[ATMega64|atmega64]] ||&amp;lt;tt&amp;gt;__AVR_ATmega64__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Atmel Controller Mega128|atmega128]] ||&amp;lt;tt&amp;gt;__AVR_ATmega128__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at94k ||&amp;lt;tt&amp;gt;__AVR_AT94K__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&amp;lt;!-----------------------------------------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| {{Blauetabelle}}&lt;br /&gt;
|+ '''AVR, nur Assembler'''&lt;br /&gt;
|- bgcolor=&amp;quot;#ccccff&amp;quot;&lt;br /&gt;
! |mcu ||Builtin define&lt;br /&gt;
 |- &lt;br /&gt;
 |avr1 ||&amp;lt;tt&amp;gt;__AVR_ARCH__=1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |at90s1200 ||&amp;lt;tt&amp;gt;__AVR_AT90S1200__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |attiny11 ||&amp;lt;tt&amp;gt;__AVR_ATtiny11__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |attiny12 ||&amp;lt;tt&amp;gt;__AVR_ATtiny12__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |attiny15 ||&amp;lt;tt&amp;gt;__AVR_ATtiny15__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |attiny28 ||&amp;lt;tt&amp;gt;__AVR_ATtiny28__&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
; -minit-stack=xxx: Festlegen der Stack-Adresse&lt;br /&gt;
; -mint8: Datentyp &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt; ist nur 8 Bit breit, anstatt 16 Bit. Datentypen mit 32 Bit wie  &amp;lt;tt&amp;gt;long&amp;lt;/tt&amp;gt; sind nicht verfügbar&lt;br /&gt;
; -mno-interrupts: Ändert den Stackpointer ohne Interrupts zu deaktivieren&lt;br /&gt;
; -mcall-prologues: Funktions-Prolog und -Epilog werden als Unterroutinen umgesetzt, um die Codegröße zu verkleinern&lt;br /&gt;
; -mtiny-stack: Nur die unteren 8 Bit des Stackpointers werden verändert&lt;br /&gt;
; -mno-tablejump: Für ein &amp;lt;tt&amp;gt;switch&amp;lt;/tt&amp;gt;-Statement werden keine Sprungtabellen angelegt&lt;br /&gt;
; -mshort-calls: Verwendet &amp;lt;tt&amp;gt;rjmp&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;rcall&amp;lt;/tt&amp;gt; (begrenzte Sprungweite) auf Devices mit mehr als 8 kByte Flash&lt;br /&gt;
; -msize: Ausgabe der Instruktonslängen im asm-File&lt;br /&gt;
; -mdeb: (undokumentiert) Ausgabe von Debug-Informationen für GCC-Entwickler&lt;br /&gt;
; -morder1: (undokumentiert) andere Register-Allokierung&lt;br /&gt;
; -morder2: (undokumentiert) andere Register-Allokierung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=C++=&lt;br /&gt;
&lt;br /&gt;
:''&amp;quot;C++ is a complex language and an evolving one, and its standard definition (the ISO C++ standard) was only recently completed. As a result, your C++ compiler may occasionally surprise you, even when its behavior is correct.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
Zudem sollte der Einsatz von C++ aus Effizienzgründen sehr kritisch betrachtet werden:&lt;br /&gt;
:''&amp;quot;When programming C++ in space- and runtime-sensitive environments like microcontrollers, extra care should be taken to avoid unwanted side effects of the C++ calling conventions like implied copy constructors that could be called upon function invocation etc. These things could easily add up into a considerable amount of time and program memory wasted. Thus, casual inspection of the generated assembler code (using the &amp;lt;tt&amp;gt;-S&amp;lt;/tt&amp;gt; compiler option) seems to be warranted.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
Weiterhin unterliegt der Einsatz von C++ je nach Compiler/Lib-Version bestimmten Einschränkungen:&lt;br /&gt;
*Einer kompletten C++ Implementierung fehlt die Unterstützung durch die &amp;lt;tt&amp;gt;libstdc++&amp;lt;/tt&amp;gt;, dadurch fehlen Standardfunktionen, -Klassen und -Templates&lt;br /&gt;
* Die Operatoren &amp;lt;tt&amp;gt;new&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;delete&amp;lt;/tt&amp;gt; sind nicht implementiert, ihre Verwendung führt zu unauflösbaren externen Referenzen (Linker-Fehler)&lt;br /&gt;
*Nicht alle Header sind C++-sicher und müssen in &amp;lt;tt&amp;gt;extern &amp;quot;C&amp;quot; {...}&amp;lt;/tt&amp;gt; eingeschlossen werden.&lt;br /&gt;
*Exceptions werden nicht unterstützt und müssen via &amp;lt;tt&amp;gt;-fno-exceptions&amp;lt;/tt&amp;gt; abgeschaltet werden, oder der Linker beschwert sich über eine unauflösbare externe Referenz zu &amp;lt;tt&amp;gt;__gxx_personality_sj0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Als Treiber verwendet man wie immer avr-gcc. Standard-Endungen für C++ sind &amp;lt;tt&amp;gt;.c++&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;.cpp&amp;lt;/tt&amp;gt;. Bei anderen Endungen teilt man mit &amp;lt;tt&amp;gt;-x c++&amp;lt;/tt&amp;gt; mit, daß es sich um C++ Dateien handelt, oder ruft &amp;lt;tt&amp;gt;avr-c++&amp;lt;/tt&amp;gt; direkt auf.&lt;br /&gt;
&lt;br /&gt;
Interrupt-Service-Routinen (ISRs) sind C-Funktionen und werden definiert wie gehabt. Siehe auch [[#Interrupts|Interrupts]].&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #if defined (__cplusplus)&lt;br /&gt;
 extern &amp;quot;C&amp;quot; {&lt;br /&gt;
 #endif {{comment|__cplusplus}}&lt;br /&gt;
 &lt;br /&gt;
 SIGNAL (SIG_NAME)&lt;br /&gt;
 {&lt;br /&gt;
    {{comment|machwas}}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 INTERRUPT (SIG_NAME)&lt;br /&gt;
 {&lt;br /&gt;
    {{comment|mach was}}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #if defined (__cplusplus)&lt;br /&gt;
 }&lt;br /&gt;
 #endif {{comment|__cplusplus}}&lt;br /&gt;
&amp;lt;tt&amp;gt;__cplusplus&amp;lt;/tt&amp;gt; ist ein Standard [[avr-gcc/Interna#Builtin Defines|GCC-Builtin-Define]].&lt;br /&gt;
&lt;br /&gt;
Globale Konstruktoren werden in [[avr-gcc/Interna#Sections|Section]] &amp;lt;tt&amp;gt;.init6&amp;lt;/tt&amp;gt; ausgeführt, die Destruktoren in &amp;lt;tt&amp;gt;.fini6&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Code-Beispiele=&lt;br /&gt;
Dieser Abschnitt enthält Code-Schnippsel für avr-gcc. Es werden Besonderheiten besprochen, die für avr-gcc zu beachten sind. &lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt ist ''kein'' [[C-Tutorial|Tutorial zur C-Programmierung]] und ''keine'' Einführung in die Programmiersprache C im allgemeinen. Dafür sei auf einschlägige Tutorials/Bücher verwiesen.&lt;br /&gt;
&lt;br /&gt;
==Zugriff auf Special Function Registers (SFRs)==&lt;br /&gt;
&lt;br /&gt;
===Zugiff auf Bytes und Worte===&lt;br /&gt;
For den Zugriff auf die SFRs gibt es Defines über den Include&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
Abhängig vom eingestellten Controller werden denn Defines eingebunden, über die auf SFRs wie auf normale Variablen zugegriffen werden kann. Die Namen der Defines sind i.d.R. die gleichen wie im AVR-Manual, also z.b. &amp;lt;tt&amp;gt;SREG&amp;lt;/tt&amp;gt; für das Prozessorstatus-Register SREG:&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
   {{ccomment|SREG lesen}}&lt;br /&gt;
   uint8_t sreg = SREG;&lt;br /&gt;
   ...&lt;br /&gt;
   {{ccomment|SREG schreiben}}&lt;br /&gt;
   SREG = sreg;&lt;br /&gt;
&amp;lt;!--  &lt;br /&gt;
Auf SFRs wird generell über deren Adresse zugegriffen:&lt;br /&gt;
 {{ccomment|Liest den Inhalt von SREG an Adresse 0x5f}}&lt;br /&gt;
 unsigned char sreg = *((unsigned char volatile*) 0x5f);&lt;br /&gt;
Das bedeutet in etwa: &amp;quot;Lies ein flüchtiges (&amp;lt;tt&amp;gt;volatile&amp;lt;/tt&amp;gt;) Byte (&amp;lt;tt&amp;gt;unsigned char&amp;lt;/tt&amp;gt;) von Adresse &amp;lt;tt&amp;gt;0x5f&amp;lt;/tt&amp;gt;&amp;quot;. Der Speicherinhalt von SFRs ist flüchtig, denn er kann sich ändern, ohne daß avr-gcc dies mitbekommt. Daher muss bei jedem C-Zugriff auf ein SFR dieses wirklich gelesen/geschrieben werden, was der Qualifier &amp;lt;tt&amp;gt;volatile&amp;lt;/tt&amp;gt; sicherstellt. Ansonst geht der Compiler u.U. davon aus, daß der Inhalt bekannt ist und verwendet einen alten, in einem GPR befindlichen Wert.&lt;br /&gt;
&lt;br /&gt;
Um lesbaren, weniger fehleranfälligen und unter AVRs halbwegs portierbaren Code zu erhalten, gibt es Makrodefinitionen im Controller-spezifischen Header &amp;lt;tt&amp;gt;ioxxxx.h&amp;lt;/tt&amp;gt;, der neben anderen Dingen mit &amp;lt;tt&amp;gt;avr/io.h&amp;lt;/tt&amp;gt; includet wird:&lt;br /&gt;
Die Bezeichner der SFRs sind die gleichen wie im Manual.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Für einen Überblick über die eingebundenen Defines und kann ein Blick in den Controller-spezifischen Header hilfreich sein. Dieser befindet sich in&lt;br /&gt;
:&amp;lt;tt&amp;gt; &amp;amp;lt;GCC_HOME&amp;amp;gt;/avr/include/avr/io****.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
z.B. &amp;lt;tt&amp;gt;iom32.h&amp;lt;/tt&amp;gt; für einen [[ATmega32]].&lt;br /&gt;
&lt;br /&gt;
Dieser Zugriff geht auch für 16-Bit Register wie &amp;lt;tt&amp;gt;TCNT1&amp;lt;/tt&amp;gt;, für die eine bestimmte Reihenfolge für den Zugriff auf Low- und High-Teil eingehalten werden muss: avr-gcc generiert die Zugriffe in der richtigen Reihenfolge.&lt;br /&gt;
  uint16_t tcnt1 = TCNT1;&lt;br /&gt;
&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Zu beachten ist, daß dieser Zugriff nicht atomar erfolgt. Das Lesen/Schreiben mehrbytiger Werte muss vom Compiler in mehrere Byte-Zugriffe zerlegt werden. Zwischen diesen Zugriffen kann ein [[Interrupt]] auftreten, wenn Interrupts aktiviert sind. Je nach Programm und welche Aufgaben eine [[ISR]] erledigt, kann dies zu Fehlfunktion führen. In dem Fall müssen diese Code-Stücke atomar gemacht werden, damit sie nicht durch einen [[IRQ]] unterbrochen werden können!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Zugriff auf einzelne Bits===&lt;br /&gt;
Zugriff auf Bits geht wie gewohnt mit den Bitoperationen &lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;amp;amp;&amp;lt;/tt&amp;gt; (and),&lt;br /&gt;
&amp;lt;tt&amp;gt;|&amp;lt;/tt&amp;gt; (or),&lt;br /&gt;
&amp;lt;tt&amp;gt;^&amp;lt;/tt&amp;gt; (xor) und&lt;br /&gt;
&amp;lt;tt&amp;gt;~&amp;lt;/tt&amp;gt; (not)&lt;br /&gt;
&lt;br /&gt;
Wieder gibt es Defines in den AVR-Headern, mit denen man Masken für den Zugriff erhalten kann, etwa:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* GIMSK / GICR */&lt;br /&gt;
#define INT1    7&lt;br /&gt;
#define INT0    6&lt;br /&gt;
#define IVSEL   1&lt;br /&gt;
#define IVCE    0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Masken ergeben sich durch Schieben von &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; an die richtige Position:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Ports B_0 und B_1 als Ausgang&lt;br /&gt;
DDRB |= (1&amp;amp;lt;&amp;amp;lt;PB0) | (1&amp;amp;lt;&amp;amp;lt;PB1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
erzeugt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
87 b3           in      r24, 0x17&lt;br /&gt;
83 60           ori     r24, 0x03&lt;br /&gt;
87 bb           out     0x17, r24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Etwas anders sieht der Code aus, wenn die Bits einzeln gesetzt werden und das Register im bitadressierbaren Bereich liegt (SRAM &amp;lt;tt&amp;gt;0x20&amp;lt;/tt&amp;gt; bis &amp;lt;tt&amp;gt;0x3f&amp;lt;/tt&amp;gt; resp. I/O &amp;lt;tt&amp;gt;0x0&amp;lt;/tt&amp;gt; bis &amp;lt;tt&amp;gt;0x1f&amp;lt;/tt&amp;gt;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Ports B_0 und B_1 als Ausgang&lt;br /&gt;
DDRB |= (1&amp;amp;lt;&amp;amp;lt;PB0);&lt;br /&gt;
DDRB |= (1&amp;amp;lt;&amp;amp;lt;PB1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
erzeugt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b8 9a           sbi     0x17, 0&lt;br /&gt;
b9 9a           sbi     0x17, 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Bits zu löschen, erzeugt man eine Maske, die an der betreffenden Stelle eine &amp;amp;nbsp;0 hat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Ports B_2 als Eingang&lt;br /&gt;
DDRB &amp;amp;= ~(1&amp;amp;lt;&amp;amp;lt;PB2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{FarbigerRahmen| &lt;br /&gt;
Auch hier ist zu beachten, daß es Probleme geben kann, wenn nicht atomarer Code erzeugt wird, weil der AVR-Befehlssatz nicht mehr hergibt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// toggle PORT B_0: wechseln 0 &amp;amp;lt;--&amp;amp;gt; 1 &lt;br /&gt;
PORTB ^= (1&amp;amp;lt;&amp;amp;lt;PB0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ergibt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
88 b3           in      r24, 0x18&lt;br /&gt;
; Wenn hier ein Interrupt auftritt, in dessen ISR PORTB verändert wird,&lt;br /&gt;
; dann wird die Änderung durch die letzte Instruktion wieder überschrieben!&lt;br /&gt;
91 e0           ldi     r25, 0x01&lt;br /&gt;
; dito&lt;br /&gt;
89 27           eor     r24, r25&lt;br /&gt;
; dito&lt;br /&gt;
88 bb           out     0x18, r24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}} &amp;lt;!-- /FarbigerRahmen --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch das Lesen einzelner Port-Pins geht über das Maskieren von SFRs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DDRB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB2);    // PortB.2 als INPUT &lt;br /&gt;
&lt;br /&gt;
if (PINB &amp;amp; (1 &amp;lt;&amp;lt; PB2))&lt;br /&gt;
   // PortB.2 ist HIGH&lt;br /&gt;
else&lt;br /&gt;
   // PortB.2 ist LOW&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!(PINB &amp;amp; (1 &amp;lt;&amp;lt; PB2)))&lt;br /&gt;
   // PortB.2 ist LOW&lt;br /&gt;
else&lt;br /&gt;
   // PortB.2 ist HIGH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interrupts==&lt;br /&gt;
&lt;br /&gt;
Um zu kennzeichnen, daß es sich bei einer Funktion um eine Interrupt Sevice Routine (ISR) handelt, gibt es spezielle Attribute. Diese brauchen nicht explizit hingeschrieben zu werden, ebensowenig wie die genaue Nummer des Interrupt Requests (IRQ). Dafür gibt es Includes und die folgenden Makros.&lt;br /&gt;
&lt;br /&gt;
Bitte beachte auch die Hinweise zu den [[#Inkompatibilität|Inkompatibilität]]en von avr-gcc!&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Eine nichtunterbrachbare Interrupt-Service-Routine}}&lt;br /&gt;
 SIGNAL (SIG_OUTPUT_COMPARE1A)&lt;br /&gt;
 {&lt;br /&gt;
    {{ccomment|ISR-Code}}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Eine unterbrachbare Interrupt-Service-Routine}}&lt;br /&gt;
 INTERRUPT (SIG_OUTPUT_COMPARE1B)&lt;br /&gt;
 {&lt;br /&gt;
    {{ccomment|ISR-Code}}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Dadurch wird die Funktion mit dem richtigen Prolog/Epilog erzeugt, und es wird ein Eintrag in die Interrupt-Vektortabelle gemacht &amp;amp;#150; bei obigem Beispiel also zwei Einträge.&lt;br /&gt;
&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Die Schreibweise des Signal-Names muss genau die sein wie im Header, das schliesst auch Leerzeichen ein! Nicht alle GCC-Versionen bringen Fehler/Warnung, wenn die Schreibweise nicht stimmt.&lt;br /&gt;
 SIGNAL (SIG_OUTPUT_COMPARE1A )  // !!! Macht NICHT das, was man will (Blank am Ende)!!!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;SIGNAL&amp;lt;/tt&amp;gt;: Mit Ausführung einer ISR deaktiviert die AVR-Hardware die Interrupts, so daß die ISR nicht durch andere Interrupt-Anforderungen unterbrochen wird. Beim Verlassen der ISR werden Interrupts wieder automatisch aktiviert. Tritt während der ISR ein IRQ auf, wird diese erst nach Beenden des ISR-Codes ausgeführt. Der Interrupt geht also nicht verloren. Zwischen zwei ISRs wird zusätzlich mindestens ein Befehl des normalen Programm-Codes abgearbeitet.&lt;br /&gt;
;&amp;lt;tt&amp;gt;INTERRUPT&amp;lt;/tt&amp;gt;: Früh im ISR-Prolog werden mit &amp;lt;tt&amp;gt;sei&amp;lt;/tt&amp;gt; die von der AVR-Hardware temporär deaktivierten Interrupts reaktiviert. Dadurch kann die ISR von einer IRQ unterbrochen werden. Das bietet die Möglichkeit, so etwas wie Interrupt-Priorisierung nachzubilden, was AVRs selbst nicht können. Weiterhin kann man schneller auf bestimmte Ereignisse reagieren. Tritt während der ISR ein anderer IRQ auf, der schnell bedient werden muss, kann sofort der dringende ISR-Code ausgeführt werden. Ansonsten (Verwendung von &amp;lt;tt&amp;gt;SIGNAL&amp;lt;/tt&amp;gt;) würde der Code erst ausgeführt werden, nachdem die aktuelle ISR beendet ist.&lt;br /&gt;
&lt;br /&gt;
{{FarbigerRahmen|Dauert die ISR zu lange und wird sie nochmals von ihrem eigenen IRQ unterbrochen, stürzt man ab.}} &lt;br /&gt;
&lt;br /&gt;
Nachschlagen kann man den Namen in&lt;br /&gt;
:&amp;lt;tt&amp;gt;&amp;amp;lt;GCC_HOME&amp;amp;gt;/avr/include/avr/ioxxxx.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interrupts aktivieren===&lt;br /&gt;
&lt;br /&gt;
Damit eine ISR überhaupt zur Ausführung kommt, müssen drei Bedingungen erfüllt sein&lt;br /&gt;
* Interrupts müssen global aktiviert sein&lt;br /&gt;
* Der entsprechen IRQ muss aktiviert worden sein&lt;br /&gt;
* Das zum IRQ gehörende Ereignis muss eintreten&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    ...&lt;br /&gt;
    {{ccomment|enable OutputCompareA Interrupt für Timer1}}&lt;br /&gt;
    TIMSK |= (1 &amp;lt;&amp;lt; OCIE1A);&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|disable OutputCompareA Interrupt für Timer1}}&lt;br /&gt;
    TIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; OCIE1A);&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|Interrupts aktivieren}}&lt;br /&gt;
    sei();&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|Interrupts abschalten}}&lt;br /&gt;
    cli();&lt;br /&gt;
Sperrt man eine Code-Sequenz durch Einschachteln in ein &amp;lt;tt&amp;gt;cli&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;sei&amp;lt;/tt&amp;gt; Paar (man macht das Codestück &amp;quot;atomar&amp;quot;, also ununterbrechbar), gehen währenddessen keine Interrupt-Anforderungen verloren. Die entsprechenden IRQ-Flags bleiben gesetzt, und nach dem &amp;lt;tt&amp;gt;sei&amp;lt;/tt&amp;gt; werden die IRQs in der Reihenfolge ihrer Prioritäten abgearbeitet. Ausnahme ist, wenn in einem atomaren Block der selbe IRQ mehrfach auftritt. Der ISR-Code wird dann trotzdem nur einmal ausgeführt.&lt;br /&gt;
&lt;br /&gt;
===default Interrupt===&lt;br /&gt;
&lt;br /&gt;
Für nicht implementierte Interrupts macht avr-gcc in die Vektortabelle einen Eintrag,&lt;br /&gt;
der zu &amp;lt;tt&amp;gt;__bad_interrupt&amp;lt;/tt&amp;gt; (definiert im Startup-Code &amp;lt;tt&amp;gt;crt*.o&amp;lt;/tt&amp;gt;) springt&lt;br /&gt;
und von dort aus weiter zu Adresse&amp;amp;nbsp;0. &lt;br /&gt;
Dadurch läuft der AVR wieder von neuem los, wenn ein Interrupt auftritt, &lt;br /&gt;
zu dem man keine ISR definiert hat &lt;br /&gt;
&amp;amp;#150; allerdings ohne die Hardware zurückzusetzen wie bei einem echten Reset.&lt;br /&gt;
&lt;br /&gt;
Möchte man diesen Fall abfangen, dann geht das über eine globale Funktion &lt;br /&gt;
namens &amp;lt;tt&amp;gt;__vector_default&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIGNAL (__vector_default)&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit wird von &amp;lt;tt&amp;gt;__bad_interrupt&amp;lt;/tt&amp;gt; aus nicht nach Adresse&amp;amp;nbsp;0 gesprungen,&lt;br /&gt;
sondern weiter zu &amp;lt;tt&amp;gt;__vector_default&amp;lt;/tt&amp;gt;, welches durch &amp;lt;tt&amp;gt;SIGNAL&amp;lt;/tt&amp;gt; oder&lt;br /&gt;
&amp;lt;tt&amp;gt;INTERRUPT&amp;lt;/tt&amp;gt; den üblichen ISR-Prolog/Epilog bekommt.&lt;br /&gt;
&lt;br /&gt;
So kann man z.B. eine Meldung ausgeben, eine Warnlampe blinken, in einer Endlosschleife landen, oder über den [[Watchdog]] einen richtigen Hardware-Reset auslösen, siehe auch Abschnitt &amp;quot;[[#Reset auslösen|Reset auslösen]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===ISR mit eigenem Prolog/Epilog===&lt;br /&gt;
&lt;br /&gt;
Wenn man in einer ISR komplett eigenes Zeug machen will, &lt;br /&gt;
dann definiert man eine nackte Funktion.&lt;br /&gt;
Mit &amp;lt;tt&amp;gt;naked&amp;lt;/tt&amp;gt; befreit man die Routine vom Standard-Prolog/Epilog.&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Dabei ist darauf zu achten, daß die ISR mit &amp;lt;tt&amp;gt;reti&amp;lt;/tt&amp;gt; (return from interrupt) &lt;br /&gt;
zurückkehrt und evtl. verwendete Register und den Status (&amp;lt;tt&amp;gt;SREG&amp;lt;/tt&amp;gt;) sichert.&lt;br /&gt;
}}&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 void __attribute__ ((naked)) &lt;br /&gt;
 SIG_OVERFLOW0 (void)&lt;br /&gt;
 {&lt;br /&gt;
    {{ccomment|Port B.6 &amp;amp;#61; 0}}&lt;br /&gt;
    {{ccomment|Diese Instruktion verändert nicht das SREG und kein anderes Register}}&lt;br /&gt;
    {{ccomment|so daß der eigentliche Code nur 1 Befehl lang ist}}&lt;br /&gt;
    __asm__ __volatile (&lt;br /&gt;
       &amp;quot;cbi %0, %1&amp;quot; &amp;quot;\n\t&amp;quot;&lt;br /&gt;
       &amp;quot;reti&amp;quot;&lt;br /&gt;
          : &lt;br /&gt;
          : &amp;quot;M&amp;quot; (_SFR_IO_ADDR (PORTB)), &amp;quot;i&amp;quot; (6)&lt;br /&gt;
    );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Inline-Assembler in avr-gcc]].&lt;br /&gt;
Die ISR sieht dann so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
__vector_9:&lt;br /&gt;
   c6 98        cbi   0x18, 6&lt;br /&gt;
   18 95        reti&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wiederum kann man als Funktionsname &amp;lt;tt&amp;gt;__vector_default&amp;lt;/tt&amp;gt; nehmen,&lt;br /&gt;
um nicht-implementierte IRQs abzufangen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void __attribute__ ((naked)) &lt;br /&gt;
__vector_default (void)&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SRAM, Flash, EEPROM: Datenablage am Beispiel Strings==&lt;br /&gt;
Die Programmiersprache C kennt selber keine Strings; das einzige, was C bekannt ist, ist der Datentyp &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt;, der ein einzelnes Zeichen repräsentiert. &lt;br /&gt;
===Darstellung in C===&lt;br /&gt;
Ein String im Sinne von C ist ein Array von Charactern bzw. ein Zeiger auf den Anfang des Arrays. Die einzelnen Zeichen folgen im Speicher direkt aufeinander und werden in aufsteigenden Adressen gespeichert. Am String-Ende folgt als Abschluss der Character &amp;lt;tt&amp;gt;'\0'&amp;lt;/tt&amp;gt;, um das Ende zu kennzeichnen. Dies ist besonders bei der Berechnung des Speicherplatzes für Strings zu berücksichtigen, denn für die 0 muss auch Platz reserviert werden.&lt;br /&gt;
&lt;br /&gt;
===Bestimmen der Stringlänge===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /* Bestimmt die Laenge des Strings ohne die abschliessende '\0' zu zaehlen */&lt;br /&gt;
 unsigned int strlength (const char *str)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned int len = 0;&lt;br /&gt;
   &lt;br /&gt;
   while (*str++)&lt;br /&gt;
      len++;&lt;br /&gt;
   &lt;br /&gt;
   return len;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Stringlänge kann auch mit der Standard-Funktion &amp;lt;tt&amp;gt;strlen&amp;lt;/tt&amp;gt; bestimmt werden, deren Prototyp sich in &amp;lt;tt&amp;gt;string.h&amp;lt;/tt&amp;gt; befindet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 size_t strlen (const char*);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===String im Flash belassen===&lt;br /&gt;
Oftmals werden Strings nur zu Ausgabezwecken verwendet und nicht verändert. Verwendet man Sequenzen der Gestalt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 char *str1 = &amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 char str2[] = &amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
dann werden die Strings im SRAM abgelegt. Im Startup-Code werden die Strings vom Flash ins SRAM kopiert und belegen daher sowohl Platz im SRAM als auch im Flash. Wird ein String nicht verändert, braucht er nicht ins SRAM kopiert zu werden. Das spart Platz im knapp bemessenen SRAM. Allerdings muss anders auf den String zugegriffen werden, denn wegen der Harvard-Architektur des AVR-Kerns kann avr-gcc anhand der Adresse nicht unterscheiden, ob diese ins SRAM, ins Flash oder ins EEPROM zeigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 const prog_char str3[] = &amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 unsigned int strlen_P (const prog_char *str)&lt;br /&gt;
 {&lt;br /&gt;
    unsigned int len = 0;&lt;br /&gt;
 &lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
       char c = (char) pgm_read_byte (str);&lt;br /&gt;
       if ('\0' == c)&lt;br /&gt;
          return len;&lt;br /&gt;
       len++;&lt;br /&gt;
       str++; &lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void foo()&lt;br /&gt;
 {&lt;br /&gt;
    unsigned int len;&lt;br /&gt;
    len = strlen_P (str3);&lt;br /&gt;
    len = strlen_P (PSTR(&amp;quot;String im Flash&amp;quot;));&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===String ins EEPROM legen===&lt;br /&gt;
Dies geht nach dem gleichen Muster, nach dem Strings ins Flash gelegt werden. Der Zugriff wird vergleichsweise langsam, denn der EEPROM ist langsamer als SRAM bzw. Flash.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/eeprom.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 const char str4[] __attribute__ ((section(&amp;quot;.eeprom&amp;quot;))) = &amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 unsigned int strlen_EE (const char *str)&lt;br /&gt;
 {&lt;br /&gt;
    unsigned int len = 0;&lt;br /&gt;
 &lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
       char c = (char) eeprom_read_byte (str);&lt;br /&gt;
       if ('\0' == c)&lt;br /&gt;
          return len;&lt;br /&gt;
       len++;&lt;br /&gt;
       str++; &lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reset auslösen==&lt;br /&gt;
Falls ein Reset per Software ausgelöst werden soll, dann geht das am besten über den [[Watchdog]].&lt;br /&gt;
Einfach nur an den RESET-Punkt an Adresse&amp;amp;nbsp;0 zu springen mit&lt;br /&gt;
 goto *((void**) 0);&lt;br /&gt;
initialisiert zwar den Controller von neuem, aber es macht keinen wirkliches RESET mit Zurücksetzen der Hardware und allen I/O-Registern. &lt;br /&gt;
&lt;br /&gt;
Durch den Watchdog kann man ein 'richtiges' RESET-Signal erzeugen lassen, so daß die AVR-Hardware genau so initialisiert ist, wie nach einem externen RESET. So kann man z.B. via [[UART]] ein RESET-Kommando schicken. Allerdings lässt sich der Watchdog nur minimal auf 15ms einstellen:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;avr/wdt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
 ...   &lt;br /&gt;
    cli();                     {{ccomment|Interrupts global abschalten}}&lt;br /&gt;
    wdt_enable (WDTO_15MS);    {{ccomment|Watchdog aufziehen auf 15ms}}&lt;br /&gt;
    while (1);                 {{ccomment|warten, bis er zubeisst...}}&lt;br /&gt;
&lt;br /&gt;
Welches Ereignis einen RESET ausgelöst hat, kann man im Register '''MCUCSR''' (''MCU Control and Status Register'') erfahren. Es gibt 4 mögliche RESET-Quellen:&lt;br /&gt;
* Power-On Reset&lt;br /&gt;
* External Reset&lt;br /&gt;
* Brown-Out Reset&lt;br /&gt;
* Watchdog Reset&lt;br /&gt;
&lt;br /&gt;
Soll der Inhalt von Variablen einen Reset überleben &amp;amp;ndash; eine Variable also nicht initialisiert werden &amp;amp;ndash; dann geht das so:&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment| status informiert z.B. darüber, ob wir selber den Watchdog ausgelöst haben }}&lt;br /&gt;
 {{ccomment| oder nicht, oder andere Informationen }}&lt;br /&gt;
 unsigned char status __attribute__ ((section (&amp;quot;.noinit&amp;quot;)));&lt;br /&gt;
 &lt;br /&gt;
 void main (void)&lt;br /&gt;
 {&lt;br /&gt;
     {{ccomment|Wert von MCUSCR merken, möglichst früh im Programm }}&lt;br /&gt;
     unsigned char mcucsr = MCUCSR;&lt;br /&gt;
 &lt;br /&gt;
     {{ccomment|MCUCSR zurücksetzen }}&lt;br /&gt;
     MCUCSR = 0;&lt;br /&gt;
 &lt;br /&gt;
     {{ccomment|Watchdog-Reset }}&lt;br /&gt;
     if (mcuscr &amp;amp; (1 &amp;lt;&amp;lt; WDRF))&lt;br /&gt;
     {&lt;br /&gt;
         {{ccomment|status auswerten }}&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     {{ccomment|Power-On Reset: status auf definierten Wert setzen }}&lt;br /&gt;
     if (mcuscr &amp;amp; (1 &amp;lt;&amp;lt; PORF))&lt;br /&gt;
     {&lt;br /&gt;
         status = 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     {{ccomment|status auswerten }}&lt;br /&gt;
     ...&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Includes=&lt;br /&gt;
&lt;br /&gt;
Die mit&lt;br /&gt;
 #include &amp;lt;...&amp;gt;&lt;br /&gt;
angegebenen Includes werden von avr-gcc in den &lt;br /&gt;
mit der Option '&amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt;' anegegenen Pfaden gesucht. &lt;br /&gt;
Dem Compiler bekannt sind die Pfade &lt;br /&gt;
 &amp;lt;GCC_HOME&amp;gt;/avr/include                           Standard               (stdio.h, ...)&lt;br /&gt;
 &amp;lt;GCC_HOME&amp;gt;/avr/include/avr                       AVR-spezifisch         (avr/io.h, ...)&lt;br /&gt;
 &amp;lt;GCC_HOME&amp;gt;/lib/gcc/avr/&amp;lt;GCC_VERSION&amp;gt;/include     Standard, compilerabh. (limits.h, ...)&lt;br /&gt;
&lt;br /&gt;
Gibt man z.B. an &lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
dann wird automatisch in diesem Verzeichnis nach &amp;lt;tt&amp;gt;stdio.h&amp;lt;/tt&amp;gt; gesucht.&lt;br /&gt;
In den Verzeichnissen stehen Standard-Includes, die benötigt werden, wenn man libc-Funktionen &lt;br /&gt;
oder mathematische Funktionen etc. verwendet. &lt;br /&gt;
AVR-spezifische Dinge stehen im Unterverzeichnis &amp;lt;tt&amp;gt;avr&amp;lt;/tt&amp;gt;, etwa:&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Als Pfad-Separator wird immer ein '''&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;''' verwendet, auch auf Windows-Betriebssystemen! Also kein '''&amp;lt;tt&amp;gt;\&amp;lt;/tt&amp;gt;'''&amp;amp;nbsp;!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Standard==&lt;br /&gt;
&lt;br /&gt;
 ctype.h                   Zeichen-Umwandlungs-Makros und ctype Makros&lt;br /&gt;
 errno.h                   Symbolische Namen für Fehlercodes&lt;br /&gt;
 inttypes.h                Definiert [u]intN_t wenn man genau N [un]signed Bits &lt;br /&gt;
                           braucht, ISO C99.&lt;br /&gt;
 math.h                    Mathematische Funktionen: sin, cos, log, gamma, bessel, ...&lt;br /&gt;
 setjmp.h                  libc unterstützt setjmp() und longjmp(), um direkt in eine&lt;br /&gt;
                           andere (nicht-lokale) Funktion zu springen. &lt;br /&gt;
 stdio.h                   Standard I/O-Funktionen (printf, ...).&lt;br /&gt;
 stdlib.h                  Deklariert grundlegende ISO C-Makros und -Funktionen &lt;br /&gt;
                           sowie einige AVR-spezifische Erweiterungen&lt;br /&gt;
 string.h                  Stringoperationen auf NULL-terminierten Strings. (strlen, ...)&lt;br /&gt;
 stdarg.h                  Funktionen mit variabler Argumenanzahl&lt;br /&gt;
 limits.h                  Min- und Max-Werte von Skalaren (UCHAR_MAX, LONG_MIN, ...)&lt;br /&gt;
&lt;br /&gt;
==AVR-spezifisch==&lt;br /&gt;
&lt;br /&gt;
Die AVR-spezifischen Includes finden sich wie gesagt im Unterverzeichnis &amp;lt;tt&amp;gt;avr&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Die meisten dort befindlichen Header wird man nie direkt durch Angabe im C-File erhalten,&lt;br /&gt;
sondern durch Angabe von&lt;br /&gt;
 #include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
Dadurch werden z.B. genau die I/O-Header eingebunden, die zum AVR-Modell passen, also&lt;br /&gt;
*&amp;lt;tt&amp;gt;avr/iom8.h&amp;lt;/tt&amp;gt; für [[ATmega8]], &lt;br /&gt;
*&amp;lt;tt&amp;gt;avr/iotn2313.h&amp;lt;/tt&amp;gt; für [[ATtiny2313]], &lt;br /&gt;
*&amp;lt;tt&amp;gt;avr/io2313.h&amp;lt;/tt&amp;gt; für [[AT90S2313]], etc. &lt;br /&gt;
&lt;br /&gt;
Verantwortlich dafür ist der Schalter '&amp;lt;tt&amp;gt;-mmcu=xxx&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
&lt;br /&gt;
Obwohl diese Header nicht explizit angegeben werden müssen, &lt;br /&gt;
kann ein Blick dorthin hilfreich sein, um die Namen von [[SFR|SFRs]] &lt;br /&gt;
oder Signals nachzuschlagen. &lt;br /&gt;
Diese Header werden im folgenden nicht alle einzeln aufgelistet. &lt;br /&gt;
Ihre Namen sind immer &amp;lt;tt&amp;gt;avr/io*.h&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* für ATmega: &amp;lt;tt&amp;gt;avr/iom*.h&amp;lt;/tt&amp;gt; &lt;br /&gt;
* für ATtiny: &amp;lt;tt&amp;gt;avr/iotn*.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avr/boot.h            Bootloader Support&lt;br /&gt;
avr/crc16.h           [*] Prüfsumme CRC16&lt;br /&gt;
avr/delay.h           [*] Verzögerungsschleifen für kurze, exakte Verzögerungen&lt;br /&gt;
avr/eeprom.h          EEPROM-Routinen&lt;br /&gt;
avr/ina90.h           Kompatibilität mit IAR-AVR-Compiler&lt;br /&gt;
avr/interrupt.h       sei(), cli(), ...&lt;br /&gt;
avr/io.h              --&amp;gt; inttypes.h, io*.h&lt;br /&gt;
avr/io*.h             SFRs, SIG_****, SPM_PAGESIZE, RAMEND, XRAMEND, E2END, FLASHEND&lt;br /&gt;
avr/parity.h          [*] Parität&lt;br /&gt;
avr/pgmspace.h        Zugriff aufs Flash: Byte lesen, PROGMEM, prog_char, prog_uint8_t, ...&lt;br /&gt;
avr/portpins.h        Makros für Port-Pins&lt;br /&gt;
avr/signal.h          [**] Makros SIGNAL() und INTERRUPT(), ...&lt;br /&gt;
avr/sleep.h           Power-Safe&lt;br /&gt;
avr/twi.h             [*] I2C&lt;br /&gt;
avr/wdt.h             Watchdog&lt;br /&gt;
 &lt;br /&gt;
util/crc16.h          Prüfsumme CRC16&lt;br /&gt;
util/delay.h          Verzögerungsschleifen für kurze, exakte Verzögerungen &lt;br /&gt;
util/parity.h         Parität&lt;br /&gt;
util/twi.h            I2C&lt;br /&gt;
 &lt;br /&gt;
[*]  bei neueren avr-gcc-Versionen in util&lt;br /&gt;
[**] entfällt bei neueren avr-gcc-Versionen. Stattdessen avr/interrupt.h verwenden&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungs-spezifisch==&lt;br /&gt;
Eigene Header, die nur innerhalb eigener Projekte gebraucht werden, includet man mit&lt;br /&gt;
 #include &amp;quot;...&amp;quot;&lt;br /&gt;
Auch hier darf man Unterverzeichnisse angeben oder ins übergeordnete Verzeichnis:&lt;br /&gt;
 #include &amp;quot;../../mein-zeug.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Optimierungen, Tipps &amp;amp; Tricks=&lt;br /&gt;
&lt;br /&gt;
Beim Programmieren in C möchte man sich möglichst wenig mit der Codeerzeugung selbst auseinandersetzen. Man verwendet ja gerade deshalb einen Compiler und programmiert nicht in Assembler, weil man sich nicht um Register-Belegungen o.ä. kümmern will, sondern nur um die zu lösende Aufgabe.&lt;br /&gt;
&lt;br /&gt;
GCC erzeugt zwar recht guten Code, aber er ist nicht perfekt. Gerade auf Systemen wie AVR mit nur sehr begrenzten Resourcen muss man daher dem Compiler hilfreich zur Seite stehen, wenn man noch dichteren/schnelleren Code erhalten möchte.&lt;br /&gt;
&lt;br /&gt;
:''&amp;quot;Unlike most other C compilers, GCC allows you to use -g with -O. The shortcuts taken by optimized code may occasionally produce surprising results: some variables you declared may not exist at all; flow of control may briefly move where you did not expect it; some statements may not be executed because they compute constant results or their values were already at hand; some statements may execute in different places because they were moved out of loops.''&lt;br /&gt;
&lt;br /&gt;
:''Nevertheless it proves possible to debug optimized output. This makes it reasonable to use the optimizer for programs that might have bugs.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
Um das Ergebnis zu beurteilen, hilft ein Blick ins Listfile. &lt;br /&gt;
Siehe dazu auch die Abschnitte &lt;br /&gt;
&amp;quot;[[Hallo Welt für AVR (LED blinken)#Listfile erstellen|Listfile erstellen]]&amp;quot; &lt;br /&gt;
und&lt;br /&gt;
&amp;quot;[[Hallo Welt für AVR (LED blinken)#Die Größe ermitteln|Die Größe ermitteln]]&amp;quot; &lt;br /&gt;
im [[Hallo Welt für AVR (LED blinken)|Hallo Welt für AVR]].&lt;br /&gt;
&lt;br /&gt;
==Optimierungsgrad==&lt;br /&gt;
Als Optimierungsgrad erweist sich &amp;lt;tt&amp;gt;-Os&amp;lt;/tt&amp;gt; (Optimize for Size) als der beste, evtl. noch &amp;lt;tt&amp;gt;-O2&amp;lt;/tt&amp;gt;. Ohne Angabe eines Optimierungsgrades wird nicht optimiert, was gleichbedeutend mit der Option &amp;lt;tt&amp;gt;-O0&amp;lt;/tt&amp;gt; ist. Abzuraten ist von der maximalen Optimierung &amp;lt;tt&amp;gt;-O3&amp;lt;/tt&amp;gt;, die wegen function inlining und loop unrolling zu sehr breitem Code führt und für AVR absolut nicht angesagt ist.&lt;br /&gt;
&lt;br /&gt;
==Vermeide printf, scanf, malloc==&lt;br /&gt;
Funktionen von diesem Kaliber sind die absoluten Platz- und Zeitfresser. &lt;br /&gt;
&lt;br /&gt;
Alternativen findet man reichlich in der &amp;lt;tt&amp;gt;avr-libc&amp;lt;/tt&amp;gt; wie &amp;lt;tt&amp;gt;itoa&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;atoi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Und für &amp;lt;tt&amp;gt;malloc&amp;lt;/tt&amp;gt; und Konsorten sind dynamische Arrays und das Compiler-Builtin &amp;lt;tt&amp;gt;__builtin_alloca&amp;lt;/tt&amp;gt; effizientere Alternativen, siehe auch im Abschnitt &amp;quot;[[avr-gcc#Dynamische Speicherallokierung|Dynamische Speicherallokierung]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Konstante Strings ins Flash== &lt;br /&gt;
Konstante Strings, wie sie zu Ausgabezwecken Verwendung finden, werden im Programm oft nicht verändert und brauchen nicht SRAM zu belegen (und damit auch Flash, von wo aus sie vom Startup-Code ins SRAM kopiert werden), sondern gehören ins Flash! &lt;br /&gt;
&lt;br /&gt;
Entsprechende Routinen, um auf Strings im Flash zuzugreifen, tragen die Suffix &amp;lt;tt&amp;gt;_P&amp;lt;/tt&amp;gt;, wie z.B. &amp;lt;tt&amp;gt;strcmp_P&amp;lt;/tt&amp;gt; mit dem Prototyp&lt;br /&gt;
 extern int *strcmp_P (char *, const prog_char *)&lt;br /&gt;
Die Implementierungen befinden sich in der &amp;lt;tt&amp;gt;avr-libc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Anwendung:'''&lt;br /&gt;
 #include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 const prog_char str_p[]     = &amp;quot;Ein String im Flash&amp;quot;;&lt;br /&gt;
 const char str2_p[] PROGMEM = &amp;quot;Noch ein String im Flash&amp;quot;;&lt;br /&gt;
 ...&lt;br /&gt;
   {{ccomment|String im SRAM mit String im Flash vergleichen}}&lt;br /&gt;
   if (!strcmp_P (str_sram, str_p))&lt;br /&gt;
   {&lt;br /&gt;
       {{ccomment|mach was bei Gleichheit}}&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   {{ccomment|&amp;quot;foo&amp;quot; wird im RAM angelegt. Ineffizient für konstante Strings!}}  &lt;br /&gt;
   {{ccomment|Beachte, daß damit strcmp (nicht strcmp_P) benutzt werden muss.}}  &lt;br /&gt;
   if (!strcmp (str_sram, &amp;quot;foo&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
       {{ccomment|mach was bei Gleichheit}}&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   {{ccomment|PSTR bewirkt, daß die String-Konstante &amp;quot;foo&amp;quot;}}&lt;br /&gt;
   {{ccomment|im Flash angelegt wird}}&lt;br /&gt;
   if (!strcmp_P (str_sram, PSTR (&amp;quot;foo&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
       {{ccomment|mach was bei Gleichheit}}&lt;br /&gt;
   }&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Sprungtabelle===&lt;br /&gt;
Genauso macht man auch eine Sprungtabelle, um anhand von Kommando-Strings dazugehörige Funktionen ausführen zu lassen:&lt;br /&gt;
 #include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int func1 (int arg)&lt;br /&gt;
 {&lt;br /&gt;
    ...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #define TEXT_LEN 15&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Die Kommandostruktur}}&lt;br /&gt;
 typedef struct &lt;br /&gt;
 {&lt;br /&gt;
    int (*func)(int);      {{ccomment|Zeiger auf die auszuführende Funktion}}&lt;br /&gt;
    int arg;               {{ccomment|das Argument, das mitübergeben wird}}&lt;br /&gt;
    char text[1+TEXT_LEN]; {{ccomment|Text, maximal TEXT_LEN Zeichen lang}}&lt;br /&gt;
 } command_t;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Das Array mit den Kommandos.}}&lt;br /&gt;
 {{ccomment|Die funcx sind vom Prototyp (z.B. func1 oben)}}&lt;br /&gt;
 {{ccomment|int funcx (int arg);}}&lt;br /&gt;
 const command_t commands[] PROGMEM =&lt;br /&gt;
 {&lt;br /&gt;
    { func1, 0, &amp;quot;Befehl 1&amp;quot; },&lt;br /&gt;
    { func2, 3, &amp;quot;Befehl für func2&amp;quot; }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Sucht in commands[] nach text und führt gegebenenfalls}}&lt;br /&gt;
 {{ccomment|die dazugehörige Funktion funcx mit Argument arg aus.}}&lt;br /&gt;
 {{ccomment|Liefert den Rückgabewert von funcx}}&lt;br /&gt;
 {{ccomment|oder -1, falls text nicht gefunden wurde.}}&lt;br /&gt;
 int execute (const char *text)&lt;br /&gt;
 {&lt;br /&gt;
    {{ccomment|Schleifenvariable}}&lt;br /&gt;
    unsigned char i;&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|Wandert durch das Array mit Kommando-Strukturen}}&lt;br /&gt;
    const command_t * cmd = commands;&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|sizeof wird von gcc ausgewertet und ist wie eine Konstante,}}&lt;br /&gt;
    {{ccomment|denn beide sizeofs sind zur Compilezeit bekannt}}&lt;br /&gt;
    for (i=0; i &amp;lt; sizeof(commands) / sizeof(command_t); i++)&lt;br /&gt;
    {&lt;br /&gt;
       {{ccomment|Ist das der gesuchte String?}} &lt;br /&gt;
       if (strcmp_P (text, cmd-&amp;gt;text))&lt;br /&gt;
       {&lt;br /&gt;
         {{ccomment|Nein, dann weitersuchen}}&lt;br /&gt;
         cmd++;&lt;br /&gt;
         continue;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       {{ccomment|Ja}}&lt;br /&gt;
       int (*func)(int), arg;&lt;br /&gt;
 &lt;br /&gt;
       {{ccomment|Dann Funktionszeiger und Argument besorgen,}}&lt;br /&gt;
       func = (int(*)(int)) pgm_read_word (&amp;amp; cmd-&amp;gt;func);&lt;br /&gt;
       arg  = (int)         pgm_read_word (&amp;amp; cmd-&amp;gt;arg);&lt;br /&gt;
 &lt;br /&gt;
       {{ccomment|Funktion ausführen und deren Wert zurückliefern}} &lt;br /&gt;
       return func (arg);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|text ist nicht in commands}}&lt;br /&gt;
    return -1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nachteil dabei ist, daß jeder String den maximalen Platz von &amp;lt;tt&amp;gt;TEXT_LEN+1&amp;lt;/tt&amp;gt; Zeichen belegt.&lt;br /&gt;
Falls man da noch weiter sparen will, dann kann man die Strings wieder ins Flash legen und ihre Adresse in der Struktur merken. Dadurch belegt ein String nur noch Länge+3 Zeichen (+3 wegen 1 Endezeichen und 2 Bytes für seine in der Struktur gemerkte Adresse). Die Definition der Tabelle wird aber umständlicher, weil jeder String einzeln angegeben werden muss:&lt;br /&gt;
 #include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Die Kommandostruktur}}&lt;br /&gt;
 typedef struct &lt;br /&gt;
 {&lt;br /&gt;
    ...&lt;br /&gt;
    char * text;  {{ccomment|Zeiger auf Text}}&lt;br /&gt;
 } command_t;&lt;br /&gt;
 &lt;br /&gt;
 const prog_char str_1[] = &amp;quot;Befehl 1&amp;quot;;&lt;br /&gt;
 const prog_char str_2[] = &amp;quot;Befehl für func2&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 const command_t commands[] PROGMEM =&lt;br /&gt;
 {&lt;br /&gt;
    { func1, 0, str_1 },&lt;br /&gt;
    { func2, 3, str_2 }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Sucht in commands[] nach text und führt gegebenenfalls}}&lt;br /&gt;
 {{ccomment|die dazugehörige Funktion funcx mit Argument arg aus.}}&lt;br /&gt;
 {{ccomment|Liefert den Rückgabewert von funcx}}&lt;br /&gt;
 {{ccomment|oder -1, falls text nicht gefunden wurde.}}&lt;br /&gt;
 int execute (const char *text)&lt;br /&gt;
 {&lt;br /&gt;
    {{ccomment|Schleifenvariable}}&lt;br /&gt;
    unsigned char i;&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|Wandert durch das Array mit Kommando-Strukturen}}&lt;br /&gt;
    const command_t * cmd = commands;&lt;br /&gt;
 &lt;br /&gt;
    {{ccomment|sizeof wird von gcc ausgewertet und ist wie eine Konstante,}}&lt;br /&gt;
    {{ccomment|denn beide sizeofs sind zur Compilezeit bekannt}}&lt;br /&gt;
    for (i=0; i &amp;lt; sizeof(commands) / sizeof (command_t); i++)&lt;br /&gt;
    {&lt;br /&gt;
       const prog_char * text_P;&lt;br /&gt;
 &lt;br /&gt;
       {{ccomment|Liest die Startadresse von str_x}}&lt;br /&gt;
       text_P = (const prog_char *) pgm_read_word (&amp;amp; cmd-&amp;gt;text);&lt;br /&gt;
 &lt;br /&gt;
       {{ccomment|Ist das der gesuchte String?}}        &lt;br /&gt;
       if (strcmp_P (text, text_P))&lt;br /&gt;
       {&lt;br /&gt;
          ...&lt;br /&gt;
&lt;br /&gt;
==Lokale Variablen verwenden==&lt;br /&gt;
&lt;br /&gt;
Beim Manipulieren globaler Variablen kann es günstig sein, diese in eine lokale Variable zu kopieren, dort zu verändern, und sie danach wieder zu schreiben &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char var;&lt;br /&gt;
&lt;br /&gt;
void foo1()&lt;br /&gt;
{&lt;br /&gt;
   var++;&lt;br /&gt;
   if (var &amp;gt; 10)&lt;br /&gt;
      var = 1;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dadurch wird einmal unnötig gespeichert (der dritte Befehl kann vermieden werden).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
foo1:&lt;br /&gt;
  lds r24,var        ; *movqi/4 [length = 2]&lt;br /&gt;
  subi r24,lo8(-(1)) ; addqi3/2 [length = 1]&lt;br /&gt;
  sts var,r24        ; *movqi/3 [length = 2]&lt;br /&gt;
  cpi r24,lo8(11)    ; cmpqi/2  [length = 1]&lt;br /&gt;
  brlt .L3           ; branch   [length = 1]&lt;br /&gt;
  ldi r24,lo8(1)     ; *movqi/2 [length = 1]&lt;br /&gt;
  sts var,r24        ; *movqi/3 [length = 2]&lt;br /&gt;
.L3:&lt;br /&gt;
  ret   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Indem man eine lokale Variable (&amp;lt;tt&amp;gt;var2&amp;lt;/tt&amp;gt;) verwendet für die Änderung von &amp;lt;tt&amp;gt;var&amp;lt;/tt&amp;gt; vermeidet man dies:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char var;&lt;br /&gt;
&lt;br /&gt;
void foo2()&lt;br /&gt;
{&lt;br /&gt;
   char var2 = var;&lt;br /&gt;
   &lt;br /&gt;
   var2++;&lt;br /&gt;
   if (var2 &amp;gt; 10)&lt;br /&gt;
      var2 = 1;&lt;br /&gt;
      &lt;br /&gt;
   var = var2;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dadurch wird erst am Ende gespeichert. &amp;lt;tt&amp;gt;var2&amp;lt;/tt&amp;gt; lebt in Register &amp;lt;tt&amp;gt;r24&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
foo2:&lt;br /&gt;
  lds r24, var       ; *movqi/4   [length = 2]&lt;br /&gt;
  subi r24,lo8(-(1)) ; addqi3/2   [length = 1]&lt;br /&gt;
  cpi r24,lo8(11)    ; cmpqi/2    [length = 1]&lt;br /&gt;
  brlt .L2           ; branch     [length = 1]&lt;br /&gt;
  ldi r24,lo8(1)     ; *movqi/2   [length = 1]&lt;br /&gt;
.L2:&lt;br /&gt;
  sts var, r24       ; *movqi/3   [length = 2]&lt;br /&gt;
  ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei diesem einfachen Beispiel spart man lediglich eine Instruktion. Bei komplexeren Rechnungen oder längeren Datentypen kann es aber durchaus lohnender sein, in lokale Register zu kopieren.&lt;br /&gt;
&lt;br /&gt;
==Arithmetik==&lt;br /&gt;
&lt;br /&gt;
=== Daten zerlegen/zusammensetzen ===&lt;br /&gt;
&lt;br /&gt;
In systemnahen Programmen hat man oft was Problem, auf die einzelnen Bytes oder Bitfelder einer grösseren Datenstruktur zuzugreifen. Indem man sich ein Komposit baut, das die gewünschten Strukturen überlagert, kann man effizient z.B. auf Bytes zugreifen. Ausnahme sind Bitfelder, deren Verwendung etwas breiten Code ergibt. Bitfelder &amp;quot;von Hand&amp;quot; zu manipulieren, ist da manchmal effizienter, führt jedoch zu schlecht lesbarem Code.&lt;br /&gt;
&lt;br /&gt;
Oft benötigt wird der Zugriff auf die einzelnen Bytes eines &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;, also der Zugriff auf die Bytes eines 16-Bit-Wertes:&lt;br /&gt;
&lt;br /&gt;
 typedef union&lt;br /&gt;
 {&lt;br /&gt;
    unsigned char  asByte[2];&lt;br /&gt;
    unsigned short asWord;&lt;br /&gt;
    int            asInt;&lt;br /&gt;
 } data16_t;&lt;br /&gt;
 &lt;br /&gt;
 data16_t data;&lt;br /&gt;
 ...&lt;br /&gt;
    int foo;&lt;br /&gt;
    uint8_t wert;&lt;br /&gt;
 &lt;br /&gt;
    data.asInt = foo;&lt;br /&gt;
    wert = data.asByte[1]; {{ccomment|die oberen 8 Bits von foo}}&lt;br /&gt;
&lt;br /&gt;
Ein komplexeres Beispiel, das noch mehr Datentypen überlagert:&lt;br /&gt;
 typedef ... foo_t;&lt;br /&gt;
 &lt;br /&gt;
 typedef union&lt;br /&gt;
 {&lt;br /&gt;
     unsigned char byte[4];      {{ccomment| Zugriff als Bytes (8 Bit) }}&lt;br /&gt;
     unsigned short word[2];     {{ccomment| Zugriff als Words (16 Bit) }}&lt;br /&gt;
     signed long slong;          {{ccomment| Zugriff als signed long (32 Bit) }}&lt;br /&gt;
 &lt;br /&gt;
     struct {{ccomment| Zugriff auf einzelne Bitgruppen }}&lt;br /&gt;
     {&lt;br /&gt;
         unsigned bit_0_3 : 4;   {{ccomment| 4 Bits (0..3) }}&lt;br /&gt;
         unsigned bit_4_8 : 5;   {{ccomment| 5 Bits (4..8) }}&lt;br /&gt;
         unsigned bit_9_21 : 13; {{ccomment| 13 Bits (9..21) }}&lt;br /&gt;
         unsigned bit_22_31: 10; {{ccomment| 10 Bits (22..31) }}&lt;br /&gt;
     };&lt;br /&gt;
 &lt;br /&gt;
     foo_t foo; {{ccomment| Zugriff als foo-Struktur }}&lt;br /&gt;
 } data_t;&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 {&lt;br /&gt;
     data_t data;&lt;br /&gt;
 &lt;br /&gt;
     data.byte[2] = 12;          {{ccomment| setzt byte 2 auf 12 }}&lt;br /&gt;
     data.bit_4_8 = 0x1f;        {{ccomment| setzt bits 4..8 (5 Stück) alle auf 1 }}&lt;br /&gt;
 &lt;br /&gt;
     int anInt = data.foo.anInt; {{ccomment| liest ein Feld von foo (hier ein int) }}&lt;br /&gt;
     ...&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
===libgcc2 verwenden===&lt;br /&gt;
&lt;br /&gt;
In der libgcc2 sind einige Arithmetik-Routinen in Assembler implementiert. Dazu gehören ein paar Algorithmen zu Division (mit Rest) und Multiplikation. &lt;br /&gt;
&lt;br /&gt;
Von diesen Algorithmen werden durch die avr-libc jedoch nur zwei Strukturen und Funktionen veröffentlicht: &amp;lt;tt&amp;gt;div_t&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;ldiv_t&amp;lt;/tt&amp;gt; resp. die Funktionen &amp;lt;tt&amp;gt;div()&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;ldiv()&amp;lt;/tt&amp;gt;. Siehe dazu deine Dokumentation zur avr-libc. Damit kann man Quotient und zusätzlich den Rest bei einer Division 16/16 bzw. 32/32 berechnen lassen; den Rest bekommt man quasi kostenlos als Nebenprodukt. Das ist praktisch, wenn man z.b. eine Zahl in Dezimaldarstellung umwandeln möchte oder von/nach [[BCD]].&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den via avr-libc veröffentlichten Funktionen gibt es aber noch Routinen, die z.B. auf 8-Bit-Werten operieren oder mit &amp;lt;tt&amp;gt;unsigned&amp;lt;/tt&amp;gt; Typen und dementsprechend effizienter sind.&lt;br /&gt;
&lt;br /&gt;
'''Beispiel: Umwandeln nach Dezimalstring'''&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel, das Division mit Rest für &amp;lt;tt&amp;gt;unsigned short&amp;lt;/tt&amp;gt; verwendet, um eine 16-Bit-Zahl in Dezimaldarstellung zu wandeln:&lt;br /&gt;
&lt;br /&gt;
 {{ccomment| Struktur definieren und Funktion bekannt machen }}&lt;br /&gt;
 typedef struct&lt;br /&gt;
 {&lt;br /&gt;
     unsigned short quot;&lt;br /&gt;
     unsigned short rem;&lt;br /&gt;
 } udiv_t;&lt;br /&gt;
 &lt;br /&gt;
 extern udiv_t udiv (unsigned short, unsigned short) __asm__(&amp;quot;__udivmodhi4&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment| 5 Ziffern (0...65535) und evtl. noch eine führende 0 }}&lt;br /&gt;
 #define DIGITS 6&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment| +1 wegen String-Ende (wird im Startup auf 0 gesetzt) }}&lt;br /&gt;
 char string[DIGITS+1];&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment| Wandelt zahl in Dezimaldarstellung um. }}&lt;br /&gt;
 {{ccomment| Der return-Wert zeigt irgendwo ins string[]-Array. }}&lt;br /&gt;
 {{ccomment| string[] wird verändert. }}&lt;br /&gt;
 char* toString (unsigned short zahl)&lt;br /&gt;
 {&lt;br /&gt;
     {{ccomment| s zeigt auf das Ende von string }}&lt;br /&gt;
     {{ccomment| string wird von hinten nach vorne gefüllt }}&lt;br /&gt;
     char *s = string + DIGITS;&lt;br /&gt;
  &lt;br /&gt;
     {{ccomment| qrem enthält Quotient (quot) und Rest (rem) der Divisionen }}&lt;br /&gt;
     udiv_t qrem = {.quot = zahl}; &lt;br /&gt;
 &lt;br /&gt;
     do&lt;br /&gt;
     {&lt;br /&gt;
         {{ccomment| Division mit Rest durch 10 }}&lt;br /&gt;
         {{ccomment| quot: Ergebnis für den nächsten Durchlauf }}&lt;br /&gt;
         {{ccomment| rem: Rest ist die Ziffer im 10er-System }}&lt;br /&gt;
         qrem = udiv (qrem.quot, 10);&lt;br /&gt;
  &lt;br /&gt;
         {{ccomment| Ziffer in Zeichen wandeln und speichern }}&lt;br /&gt;
         *(--s) = '0' + qrem.rem;&lt;br /&gt;
     } &lt;br /&gt;
     while (0 != qrem.quot);&lt;br /&gt;
  &lt;br /&gt;
     {{ccomment| Falls eine führende '0' gespeichert wurde: weg damit }}&lt;br /&gt;
     {{ccomment| ausser zahl war selbst schon 0 }}&lt;br /&gt;
     if (*s == '0' &amp;amp;&amp;amp; *(s+1) != '\0')&lt;br /&gt;
         s++;&lt;br /&gt;
 &lt;br /&gt;
     return s;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Falls man eine Division und/oder Rest für 8-Bit braucht, dann geht für &amp;lt;tt&amp;gt;unsigned&amp;lt;/tt&amp;gt; analog. &lt;br /&gt;
&lt;br /&gt;
'''Beispiel: BCD-Umrechnung'''&lt;br /&gt;
&lt;br /&gt;
Wandeln einer 8-Bit-Zahl &amp;lt;tt&amp;gt;0 &amp;amp;lt;= num &amp;amp;lt; 100&amp;lt;/tt&amp;gt; nach [[BCD]]&lt;br /&gt;
&lt;br /&gt;
 typedef struct&lt;br /&gt;
 {&lt;br /&gt;
     unsigned char quot; {{ccomment| Quotient }}&lt;br /&gt;
     unsigned char rem;  {{ccomment| Rest (remainder) }}&lt;br /&gt;
 } udiv8_t;&lt;br /&gt;
 &lt;br /&gt;
 extern udiv8_t udiv8 (unsigned char, unsigned char) __asm__ (&amp;quot;__udivmodqi4&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment| Wandelt num nach BCD um, 0 &amp;lt;&amp;amp;#61; num &amp;lt;&amp;amp;#61; 99 }}&lt;br /&gt;
 {{ccomment| return-Wert ist dann 0x0 &amp;lt;&amp;amp;#61; return &amp;lt;&amp;amp;#61; 0x99 }}&lt;br /&gt;
 unsigned char to_bcd (unsigned char num)&lt;br /&gt;
 {&lt;br /&gt;
     udiv8_t qrem = udiv8 (num, 10);&lt;br /&gt;
 &lt;br /&gt;
     return (unsigned char) (qrem.quot &amp;lt;&amp;lt; 4) | qrem.rem;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Division durch Multiplikation===&lt;br /&gt;
===Vermeiden von float und double===&lt;br /&gt;
&lt;br /&gt;
=Inkompatibilität=&lt;br /&gt;
&lt;br /&gt;
[[GCC]] &amp;amp;ndash; und somit auch avr-gcc &amp;amp;ndash; werden ständig weiter entwickelt. Dies betrifft das Beheben von Fehlern, die Unterstützung neuer Architekturen/Sprachen/Betriebssysteme, Implementierung neuer Optimierungsalgorithmen, Vereinheitlichungen, etc.&lt;br /&gt;
&lt;br /&gt;
Leider führt dies auch zu Inkompatibilitäten verschiedener avr-gcc-Versionen untereinander, und eine C-Quelle, die mit einer Version von avr-gcc fehler- und warnungsfrei übersetzt werden kann, ist mit einer anderen Version möglicherweise nicht compilierbar.&lt;br /&gt;
&lt;br /&gt;
Die avr-gcc Version kann man anzeigen lassen, indem man in einer Shell/Eingabeaufforderung eintippt&lt;br /&gt;
 avr-gcc -v&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;#include &amp;lt;avr/signal.h&amp;gt;&amp;lt;/tt&amp;gt;: In Versionen bis 3.4.4 werden in dieser Header-Datei u.a. die Makros &amp;lt;tt&amp;gt;SIGNAL()&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;INTERRUPT()&amp;lt;/tt&amp;gt; definiert, die man braucht, wenn man eine C-Funktion als Interrupt-Routine ([[ISR]]) kennzeichnen will. In neueren Versionen ab 3.4.5 sind diese Definitionen in den Header &amp;lt;tt&amp;gt;avr/interrupt.h&amp;lt;/tt&amp;gt; gewandert, wo auch Makros wie &amp;lt;tt&amp;gt;sei()&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;cli()&amp;lt;/tt&amp;gt; definiert werden. Die Inkludierung von &amp;lt;tt&amp;gt;avr/signal.h&amp;lt;/tt&amp;gt; in den neueren avg-gcc Versionen führt zu einer Warnung, irgendwann vielleicht sogar zu einem Fehler, weil die Datei nicht mehr bei avr-gcc dabei ist und daher nicht mehr gefunden wird.&lt;br /&gt;
: '''Verwendet man bei einer älteren avr-gcc-Version &amp;lt;tt&amp;gt;SIGNAL&amp;lt;/tt&amp;gt; bzw. &amp;lt;tt&amp;gt;INTERRUPT&amp;lt;/tt&amp;gt; ohne &amp;lt;tt&amp;gt;avr/signal.h&amp;lt;/tt&amp;gt; zu includen, wird u.U. stillschweigend falscher Code erzeugt.'''&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;tt&amp;gt;#include &amp;lt;util/...h&amp;gt;&amp;lt;/tt&amp;gt;: In &amp;lt;tt&amp;gt;util&amp;lt;/tt&amp;gt; stehen jetzt Header wie &amp;lt;tt&amp;gt;util/parity.h&amp;lt;/tt&amp;gt; oder das vielverwendete &amp;lt;tt&amp;gt;util/delay.h&amp;lt;/tt&amp;gt;, die vormals im Include-Unterverzeichnis &amp;lt;tt&amp;gt;avr&amp;lt;/tt&amp;gt; zu finden waren.&lt;br /&gt;
&lt;br /&gt;
;Interrupt Service Routinen: Auch die API zur Definition von [[ISR]]s hat sich von avr-gcc Version 3.x zur Version 4.x geändert:&lt;br /&gt;
:'''avr-gcc 3.x'''&lt;br /&gt;
::{|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SIGNAL (SIG_INTERRUPT0)&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
INTERRUPT (SIG_OVERFLOW0)&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:'''avr-gcc 4.x'''&lt;br /&gt;
::{|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ISR (INT0_vect)&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TIMER0_OVF_vect (void) __attribute__((interrupt));&lt;br /&gt;
void TIMER0_OVF_vect (void)&lt;br /&gt;
{&lt;br /&gt;
    /* Interrupt Code */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Bugs=&lt;br /&gt;
&lt;br /&gt;
==== Bit 7 bei SFR-Zugriff ====&lt;br /&gt;
&lt;br /&gt;
Bei Sequenzen wie&lt;br /&gt;
 PORTB &amp;amp;= ~ (1 &amp;lt;&amp;lt; 7);&lt;br /&gt;
 PORTD &amp;amp;= ~ (1 &amp;lt;&amp;lt; 7);&lt;br /&gt;
&lt;br /&gt;
macht avr-gcc eine CSE-Optimierung (common subexpression elimination). Er legt die Konstante 127 (&amp;lt;tt&amp;gt;~(1 &amp;lt;&amp;lt; 7)&amp;lt;/tt&amp;gt;) in ein Register und verwendet den Registerinhalt, anstatt die Konstante direkt zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Das führt dazu, daß statt der gewünschten Befehlsfolge&lt;br /&gt;
 ; Sequenz 1&lt;br /&gt;
 cbi 37-0x20, 7	&lt;br /&gt;
 cbi 43-0x20, 7&lt;br /&gt;
Sequenzen folgender Gestalt erzeugt werden:&lt;br /&gt;
 ; Sequenz 2&lt;br /&gt;
 ldi r18,     lo8(127)   ; 127 nach R18&lt;br /&gt;
 &lt;br /&gt;
 in  r19,     37-0x20    ; PORTB nach R19 lesen&lt;br /&gt;
 ; Wird hier eine ISR ausgeführt, die PORTB verändert, dann wird die&lt;br /&gt;
 ; Änderung mit dem folgenden OUT überschrieben&lt;br /&gt;
 and r19,     r18	; oberstes Bit löschen&lt;br /&gt;
 ; dito&lt;br /&gt;
 out 37-0x20, r19	; PORTB schreiben&lt;br /&gt;
 &lt;br /&gt;
 in r19,      43-0x20	; analog&lt;br /&gt;
 and r19,     r18	&lt;br /&gt;
 out 43-0x20, r19	&lt;br /&gt;
&lt;br /&gt;
Abgesehen davon, daß Sequenz&amp;amp;nbsp;2 deutlich mehr Programmspeicher und Laufzeit benötigt als Sequenz&amp;amp;nbsp;1, kann es zu folgendem Fehler kommen:&lt;br /&gt;
&lt;br /&gt;
Bei der zweiten Codesequenz erfolgt der Zugriff auf die SFRs nicht atomar. Wird der C-Code in einem Programm ausgeführt, das in einer [[ISR]] zB Port B3 verändert und wird diese ISR zwischen dem IN und dem OUT Befehl ausgeführt, dann überschreibt der OUT-Befehl den Wert von PORTB und die Aktion für Port B3 in der ISR wird wieder rückgängig gemacht. Das ist dann ein Programmfehler.&lt;br /&gt;
&lt;br /&gt;
Damit das Problem zum Tragen kommt, müssen mehrere Bedingungen erfüllt sein:&lt;br /&gt;
* Bei mindestens zwei C-Befehlen wird der Wert 127 als 8-Bit-Wert benötigt. Das ist zB auch der Fall, wenn dieser Wert nur gespeichert wird oder modulo 0x80 gerechnet wird.&lt;br /&gt;
* Mindestens einer dieser Befehle löscht Bit 7 eines SFR aus dem bitadressierbaren I/O-Bereich. (Ausser PORTx oder DDRx sind in diesem Bereich noch weitere SFR untergebracht.)&lt;br /&gt;
* Im Programm wird auf unterschiedlichen [[Interrupt]]-Ebenen auf dieses SFR zugegriffen und die oben gezeigt Stelle kann von der ISR unterbrochen werden.&lt;br /&gt;
* Die beiden C-Befehle müssen nicht unmittelbar aufeinander folgen. Es können auch andere C-Befehle dazwischen stehen. &lt;br /&gt;
&lt;br /&gt;
Bei den meisten Programmen wird das angesprochene Problem nicht zu einem Fehler führen. Falls doch, kann man dem begegnen mit folgenden &lt;br /&gt;
&lt;br /&gt;
;Workarounds:&lt;br /&gt;
* Die C-Stelle wird in CLI/SEI eingeschlossen und kann damit nicht mehr von einer ISR unterbrochen werden.&lt;br /&gt;
* Alternativ schreibt man vor und nach jedem problematischen SFR-Zugriff folgendes Kommando:&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 __asm volatile (&amp;quot;&amp;quot;::);&lt;br /&gt;
|}&lt;br /&gt;
:Dieses Kommando erzeugt keine Assembler-Instruktionen, vermeidet aber die unerwünschte &amp;quot;Optimierung&amp;quot; im gcc, und es entsteht Code gemäß Sequenz&amp;amp;nbsp;1.&lt;br /&gt;
* Alternativ definiert man sich ein Makro, mit dem man die Portzugriffe tätigt:&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 #define CBI(A,B)    __asm volatile (&amp;quot;cbi\t%0, %1&amp;quot; :: &amp;quot;M&amp;quot; (_SFR_IO_ADDR(A)), &amp;quot;M&amp;quot; (B))&lt;br /&gt;
|}&lt;br /&gt;
:Und löscht das Bit mit&lt;br /&gt;
:{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 CBI (PORTB, 7);&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;tt&amp;gt;__builtin_return_address(0)&amp;lt;/tt&amp;gt; ====&lt;br /&gt;
ist entgegen der Spezifikation nicht implementiert und liefert in der Regel ein falsches Ergebnis.&lt;br /&gt;
&lt;br /&gt;
;Workaround:&lt;br /&gt;
&lt;br /&gt;
(hier für eine ISR):&lt;br /&gt;
 #include &amp;lt;stdarg.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|The return address}}&lt;br /&gt;
 unsigned short volatile return_addr;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Define our special SIGNAL (INTERRUPT analoguous)}}&lt;br /&gt;
 #define SIGNAL_BRA(signame,var)                                         \&lt;br /&gt;
      void signame (unsigned short var, ...) __attribute__ ((signal));   \&lt;br /&gt;
      void signame (unsigned short var, ...)&lt;br /&gt;
 &lt;br /&gt;
 #define SWAP_BYTES(x) (((x) &amp;gt;&amp;gt; 8) | ((x) &amp;lt;&amp;lt; 8))&lt;br /&gt;
 &lt;br /&gt;
 SIGNAL_BRA (SIG_OUTPUT_COMPARE1A, dummy)&lt;br /&gt;
 {&lt;br /&gt;
    {&lt;br /&gt;
       va_list vlist;&lt;br /&gt;
       va_start (vlist, dummy);&lt;br /&gt;
  &lt;br /&gt;
       {{ccomment|Get the return address from the stack}}&lt;br /&gt;
       dummy = va_arg (vlist, unsigned short);&lt;br /&gt;
 &lt;br /&gt;
       {{ccomment|Convert stack address to code location}}&lt;br /&gt;
       addr = SWAP_BYTES(dummy) &amp;lt;&amp;lt; 1;&lt;br /&gt;
       va_end (vlist);&lt;br /&gt;
    }&lt;br /&gt;
    {{ccomment|ISR Code}}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== gcc 4.x ==== &lt;br /&gt;
&lt;br /&gt;
In der 4er-Version gab es tiefgreifende interne Änderungen im Compiler; er ist noch instabil und kann momentan nicht für den Produktiv-Einsatz empfohlen werden (Stand 02/2006). &lt;br /&gt;
&lt;br /&gt;
Die Auswirkungen der Optimierungen auf das Zielsystem &amp;lt;tt&amp;gt;avr&amp;lt;/tt&amp;gt; bleibt abzuwarten, dürfte aber nicht wesentlich sein. Die neue 4-er Version wurde u.a. deshalb aufgelegt, um mit dem Intel-Compiler gleichzuziehen &amp;amp;ndash; also im Hinblick auf das Zielsystem &amp;lt;tt&amp;gt;i386&amp;lt;/tt&amp;gt;) gemacht. &lt;br /&gt;
&lt;br /&gt;
Auch nach dem Release der 4-er Version wird die 3-er Version weiterentwickelt, da erst nach 1-2 Jahren nach Release einer neuer Major-Version ein Umstieg anzuraten ist und auch erst dann getätigt wird (zumindest im professionellen Bereich).&lt;br /&gt;
&lt;br /&gt;
=Abkürzungen und Bezeichnungen=&lt;br /&gt;
; [[GCC]]: GNU Compiler Collection&lt;br /&gt;
; gcc: GNU C-Compiler&lt;br /&gt;
; GPR: '''G'''eneral '''P'''urpose '''R'''egister&lt;br /&gt;
; [[ISR]]: [[Interrupt|'''I'''nterrupt]] '''S'''ervice '''R'''outine&lt;br /&gt;
; [[IRQ]]: '''I'''nterrupt '''R'''e'''q'''uest&lt;br /&gt;
; Prolog/Epilog: Code am Anfang/Ende jeder Funktionen/ISR, der dazu dient, verwendete Register zu sichern, den Stack-Frame für lokale [[Variable|Variablen]] anzulegen (falls benötigt), Stackpointer zu setzen, zurück zu springen (&amp;lt;tt&amp;gt;ret&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;reti&amp;lt;/tt&amp;gt;), etc.&lt;br /&gt;
; SFR: '''S'''pecial '''F'''unction '''R'''egister&lt;br /&gt;
; Target: Zielsystem, in unserem Falle avr&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
* [[C-Tutorial]]&lt;br /&gt;
'''Code-Beispiele'''&lt;br /&gt;
* [[Hallo Welt für AVR (LED blinken)]] - ein erstes Beispiel für avr-gcc&lt;br /&gt;
*[[:Kategorie:Quellcode_C|C-Codebeispiele]]&lt;br /&gt;
* [[Fallstricke bei der C-Programmierung]]&lt;br /&gt;
&lt;br /&gt;
'''Details'''&lt;br /&gt;
* [[Inline-Assembler in avr-gcc|Inline-Assembler]]&lt;br /&gt;
* [[avr-gcc/Interna|Interna von avr-gcc]]&lt;br /&gt;
&lt;br /&gt;
'''Installation (Linux)'''&lt;br /&gt;
* [[Linuxdistribution_Avr-live-cd]]&lt;br /&gt;
* [[avr-gcc und avrdude installieren]]&lt;br /&gt;
'''Sonstiges'''&lt;br /&gt;
* [[WinAVR]]&lt;br /&gt;
* [[Speicherverbrauch bestimmen mit avr-gcc]]&lt;br /&gt;
* [[Compiler]]&lt;br /&gt;
* [[Dev-Cpp IDE]]&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
----&lt;br /&gt;
* [[Sourcevergleich]]&lt;br /&gt;
* [[Codevergleich AVR-Compiler]]&lt;br /&gt;
&lt;br /&gt;
=Weblinks=&lt;br /&gt;
==Dokumentation==&lt;br /&gt;
* [http://gcc.gnu.org/onlinedocs/ GCC online documentation (en)] Offline findest du die Doku für gcc, cpp (Präprozessor) und avr-libc bei [[WinAVR]] in&lt;br /&gt;
:&amp;lt;pre&amp;gt;&amp;lt;GCC_HOME&amp;gt;/doc/gcc/&amp;lt;/pre&amp;gt;&lt;br /&gt;
: bzw.&lt;br /&gt;
:&amp;lt;pre&amp;gt;&amp;lt;GCC_HOME&amp;gt;/doc/avr-libc/&amp;lt;/pre&amp;gt;&lt;br /&gt;
:Online finden sich die Dokumente in&lt;br /&gt;
* [http://gcc.gnu.org/onlinedocs/gcc.pdf gcc.pdf (1900 kByte)] - Dokumentation des C/C++/Java-Compilers GCC (en)&lt;br /&gt;
* [http://gcc.gnu.org/onlinedocs/cpp.pdf cpp.pdf (470 kByte)] - Dokumentation des C-Präprozessors (en)&lt;br /&gt;
* [http://www.nongnu.org/avr-libc/user-manual/modules.html http://www.nongnu.org/avr-libc/user-manual] - Dokumentation zur avr-libc.&lt;br /&gt;
&lt;br /&gt;
== Downloads==&lt;br /&gt;
* [http://sourceforge.net/projects/winavr/ WinAVR-Projekt bei sourceforge.net (en)]&lt;br /&gt;
* [http://cdk4avr.sourceforge.net/ avr-gcc und toolchain als Linux-Paket bei sourceforge.net (en)]&lt;br /&gt;
* [[Linuxdistribution_Avr-live-cd]]&lt;br /&gt;
== Tipps, Installation ==&lt;br /&gt;
*[http://www.nongnu.org/avr-libc/user-manual/install_tools.html ''&amp;quot;Installing the GNU Tool Chain&amp;quot;''] Hilfe zum Build und Installation von GCC, binutils, etc unter Linux&lt;br /&gt;
* Im GCC-Handbuch, siehe [[#Dokumentation|Dokumentation]].&lt;br /&gt;
* [http://www.linuxfocus.org/Deutsch/November2004/article352.shtml www.linuxfocus.org (Artikel)] - Tipps zu Build und Installation von avr-gcc, binutils und avr-libc unter Linux&lt;br /&gt;
* [http://users.rcn.com/rneswold/avr/ Rich Neswold: ''A GNU Development Environment for the AVR Microcontroller'']&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/24166 www.mikrocontroller.net (Foren-Beitrag)] - Installation von GCC und Toolchain unter Mac OS X&lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=125603#125603 www.roboternetz.de (Foren-Beitrag)] ''avrgcc + avrdude installieren''&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
* [http://gcc.gnu.org/ Offizielle Homepage von GCC (en)]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/GNU_Compiler_Collection GCC in der deutschen Wikipedia]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial avr-gcc-Tutorial auf mikrocontroller.net]&lt;br /&gt;
* [http://www.avrfreaks.net/AVRGCC/ avr-gcc bei avrfreaks.net (en)]&lt;br /&gt;
* [http://savannah.nongnu.org/projects/avr-libc/ Nützliche GCC Runtime-Libary]&lt;br /&gt;
&lt;br /&gt;
=Autor=&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:SprinterSB|SprinterSB]] 11:27, 7. Dez 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Quellcode C|!]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Avr&amp;diff=10343</id>
		<title>Avr</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Avr&amp;diff=10343"/>
				<updated>2007-03-03T06:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:AtmelController.jpg|thumb|Beispiel eines AVR Controllers]]&lt;br /&gt;
'''AVR''' ist eine 8-Bit [[Microcontroller]]-Familie mit RISC-Architektur.&lt;br /&gt;
Im Gegensatz zu vielen anderen Microcontroller-Architekturen hat die AVR-Architektur keine Vorgänger. Sie ist ein komplettes Neudesign, das Anfang der 90-Jahre an der Universität von Trondheim/Norwegen entwickelt und vom (bis heute einzigen) Hersteller [[Atmel]] aufgekauft wurde. Es gibt eine ganze Serie von AVR-Controllern. Sie alle werden ähnlich programmiert, haben vergleichbaren Befehlssatz und physikalische Eigenschaften, bieten jedoch unterschiedliche Features und Peripherie. &lt;br /&gt;
&lt;br /&gt;
Es gibt zahlreiche und kostenlose Entwicklungssysteme in den Sprachen Basic, C/C++, Pascal und Assembler für diese Controller-Familie. &lt;br /&gt;
&lt;br /&gt;
== Wofür steht AVR? ==&lt;br /&gt;
&amp;quot;AVR&amp;quot; steht angeblich für ''Advanced Virtual RISC'' (in einem Paper der Entwickler des AVR-Kerns Alf Egin Bogen und Vegard Wollan). Laut [[Atmel]] bedeutet es nichts.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
AVR-Controller besitzen eine zweistufige Pipeline (fetch and execute), die es ermöglicht, die meisten Befehle innerhalb eines einzigen Prozessortaktes auszuführen. Dadurch ist ein AVR wesentlich schneller als etwa 8051-Controller, bei denen der Prozessortakt intern noch durch 12 geteilt wird.&lt;br /&gt;
&lt;br /&gt;
*AVR-Kern&lt;br /&gt;
** Harvard-Architektur (getrennter Befehls- und Datenspeicher) &lt;br /&gt;
** 32 Register, kein Akkumulator, 3 Pointerregister &lt;br /&gt;
** EEPROM-Datenspeicher&lt;br /&gt;
** [[Watchdog]], [[Bootloader]]-Support, verschiedene Stromspar-Modi, Brownout-Erkennung, Interner Oszillator&lt;br /&gt;
** Lineares Speichermodell (keine Segmentierung)&lt;br /&gt;
** 8-Bit Architektur ist für Hochsprachen (C) optimiert &lt;br /&gt;
* In-System programmierbar: die Controller können sehr einfach über ein  Programmierkabel (oft ISP-Kabel genannt), das mit dem PC verbunden wird, programmiert werden &amp;amp;ndash; auch dann, wenn sie sich nicht in einer Schaltung befindet.&lt;br /&gt;
* umfangreiche Peripherie&lt;br /&gt;
** 8- und 16-Bit-Timer/Counter mit [[PWM]], Capture/Compare, externe Betaktung, asynchrone Operation&lt;br /&gt;
** Kommunikation: [[UART|USART]], [[SPI]], [[I2C]] ([[TWI]])&lt;br /&gt;
** Analog-Comparator, Analog-Digital-Wandler &lt;br /&gt;
** unterschiedlichste externe und interne Interrupt-Quellen (UART, SPI, Timer, A/D-Wandler, Analog-Comparator, ...)&lt;br /&gt;
** JTAG (Debugerinterface)&lt;br /&gt;
* AVR Typen (AT90 &amp;quot;Classic AVR&amp;quot;, ATtiny, ATmega) &lt;br /&gt;
* erhältlich in unterschiedlichen Gehäusen, idR Durchsteck und als [[SMD]]&lt;br /&gt;
* Viele Entwicklungsboards erhältlich, z.B. das Roboternetzboard [[RN-Control]]&lt;br /&gt;
&lt;br /&gt;
==Einige Pinbelegungen der populärsten AVR-Controller==&lt;br /&gt;
(in etwa nach Leistungsfähigkeit sortiert)&lt;br /&gt;
&lt;br /&gt;
* [[AT90S2313]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:at90s2313tiny.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Atmel Controller Mega8]]&lt;br /&gt;
* [[Atmel Controller Mega48 Mega88 Mega168]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:mega8kompatibel.png|center]]&lt;br /&gt;
&lt;br /&gt;
* [[Atmel Controller Mega16 und Mega32]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Mega1632.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Atmel Controller Mega128]] ([[SMD]]-Chip)&lt;br /&gt;
&lt;br /&gt;
[[Bild:mega128pin.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Die AVR-Pin-Bezeichnungen und deren Funktion ===&lt;br /&gt;
Die meisten Ports sind doppelt belegt und besitzen neben der normalen Port-Funktion noch eine Sonderfunktion. Die verschiedenen Pinbezeichnungen und Sonderfunktionen werden hier beschrieben:&lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
|+ '''Tabelle: Die AVR-Pin-Bezeichnungen und deren Funktion'''&lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Versorgungs- und Referenzpins, Reset&lt;br /&gt;
|-&lt;br /&gt;
 |'''[[VCC]]''' &lt;br /&gt;
 | Versorgungsspannung von 2,7 Volt bis 6 V bei den L-Varianten (low power), ansonsten 4,5V bis 6V. Die nächste AVR-Generation soll ab 1,8 Volt funktionieren.&lt;br /&gt;
|-&lt;br /&gt;
 |'''[[GND]]''' &lt;br /&gt;
 |Masse &lt;br /&gt;
|-&lt;br /&gt;
 |'''AREF''' &lt;br /&gt;
 |Referenzspannung für den Analog-Digital-Wandler (kann auf 5V gesetzt werden). Auch die interne Bandgap-Referenzspannung kann über diesen Pin entstört werden (dann KEINE externe Spannung an diesen Pin geben (Kurzschluss)!). &lt;br /&gt;
|-&lt;br /&gt;
 |'''AGND''' &lt;br /&gt;
 |Alternative Masse, etwa um ein Verbindungspunkt mit GND zu haben und bei empfindlichen Messungen  Masseschleifen zu vermeiden.&lt;br /&gt;
|-&lt;br /&gt;
 |'''AVCC''' &lt;br /&gt;
 | &lt;br /&gt;
Die Betriebsspannung für den Analog-Digital-Wandler (siehe Beschaltungsskizze). Die Pins AVCC, AGND und AREF sollten immer beschaltet werden, da es sonst passieren kann, dass Port A nicht richtig funktioniert, selbst wenn man den AD-Wandler nicht benutzt. &lt;br /&gt;
|-&lt;br /&gt;
 |'''RESET''' &lt;br /&gt;
 |Rücksetz-Eingang, intern über einen [[Pullup]] mit VCC verbunden. Ein LOW–Pegel an diesem Pin für die Dauer von mindestens zwei Zyklen des Systemtaktes bei aktivem Oszillator setzt den Controller zurück. Rücksetzen der Ports erfolgt unabhängig von einem evtl. anliegenden Systemtakt.&lt;br /&gt;
|-&lt;br /&gt;
|'''PEN'''&lt;br /&gt;
|Programming Enable - Diesen Pin gibt es nur beim Mega128/64 u.ä. Wird dieser Pin beim Power-On Reset nach Masse gezogen, geht der Controller in den [[ISP]] Programmiermodus. Man kann ihn also alternativ zu Reset verwenden. In der Regel verwendet man aber die Reset-Leitung und PEN sollte man direkt mit VCC verbinden.&lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| System-Takt&lt;br /&gt;
|-&lt;br /&gt;
 |'''XTAL1''' &lt;br /&gt;
 |Eingang des internen Oszillators zur Erzeugung des Systemtaktes bzw. Eingang für ein externes Taktsignal, wenn der interne Oszillator nicht verwendet werden soll bzw. Anschluss von Quarz/Keramik-Resonator/RC-Glied.&lt;br /&gt;
|-&lt;br /&gt;
 |'''XTAL2''' &lt;br /&gt;
 |Anschluss von Quarz oder Keramik-Resonator oder Ausgang des integrierten Oszillators zur Nutzung als Systemtakt (Je nach Fuse-Einstellungen). &lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Digitale bidirektionale  I/O-Ports&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Jeder Pin der Ports kann individuell als Eingang oder Ausgang konfiguriert werden. Die I/O-Ports sind maximal 8 Bit breit und verfügen ja nach AVR-Typ über eine unterschiedliche Anzahl von Pins. An jedem als Eingang (Input) geschalteten Pin gibt es zuschaltbare [[Pullup]]-Widerstände, die teilweise auch bei aktivierter Sonderfunkton verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
Bei eingeschalteten Sonderfunktionen wie UART, SPI, ADC, etc. sind die entsprechenden Pins nicht als &amp;quot;normale&amp;quot; digitale I/O verwendbar, sondern dienen der Sonderfunktion. Die Anzahl der als I/O verwendbaren Pins ist auch abhängig von den Fuse-Einstellungen (Vorsicht beim Umstellen, Handbuch GENAU lesen!).&lt;br /&gt;
|-&lt;br /&gt;
|'''PA 0 – 7''' || Port A &lt;br /&gt;
|-&lt;br /&gt;
|'''PB 0 – 7''' || Port B &lt;br /&gt;
|-&lt;br /&gt;
|'''PC 0 – 7''' || Port C &lt;br /&gt;
|-&lt;br /&gt;
|'''PD 0 – 7''' || Port D &lt;br /&gt;
|-&lt;br /&gt;
|'''PE 0 – 7''' || Port E &lt;br /&gt;
|-&lt;br /&gt;
|'''PF 0 – 7''' || Port F &lt;br /&gt;
|-&lt;br /&gt;
|'''PG 0 – 7''' || Port G &lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Externe Interrupts&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Die PCINT-Interrupts gibt es nur für neuere AVRs wie den [[ATmega88]]. Falls die Anzahl an externen Interrupts nicht ausreicht, kann evtl. auch andere Hardware dafür eingesetzt werden, etwa der Analog-Comparator mit interner Bandgap-Referenz, falls er anderwärtig nicht gebraucht wird.&lt;br /&gt;
|-&lt;br /&gt;
 |'''INT0''' ||Externer Interrupt 0&lt;br /&gt;
|-&lt;br /&gt;
 |'''INT1''' ||Externer Interrupt 1&lt;br /&gt;
|-&lt;br /&gt;
 |'''INT2''' ||Externer Interrupt 2 &lt;br /&gt;
|-&lt;br /&gt;
 |'''PCINTx''' ||Pin-Change Interrupt&lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| [[Timer]] und [[PWM]]&lt;br /&gt;
|-&lt;br /&gt;
 |'''T0''' &lt;br /&gt;
 |Timer-Eingang. Timer kann gestartet, gestoppt oder getaktet werden &lt;br /&gt;
|-&lt;br /&gt;
 |'''T1''' &lt;br /&gt;
 |Timer-Eingang. Timer kann gestartet, gestoppt oder getaktet werden &lt;br /&gt;
|-&lt;br /&gt;
 |'''OC0''' &lt;br /&gt;
 |PWM bzw. Output Compare Ausgang des Timers 0 &lt;br /&gt;
|-&lt;br /&gt;
 |'''OC1A''' &lt;br /&gt;
 |Ausgang für die Compare-Funktion des integrierten Zeitgeber- / Zählerbausteines &lt;br /&gt;
Der erste PWM-Ausgang des Timers1. Er kann zum Regeln der Bot-Motogeschwindigkeit benutzt werden. &lt;br /&gt;
|-&lt;br /&gt;
 |'''OC1B''' &lt;br /&gt;
 |Ausgang für die Compare-Funktion des integrierten Zeitgeber- / Zählerbausteines &lt;br /&gt;
Der zweite PWM-Ausgang des Timers1. Er kann zum Regeln der Bot-Motogeschwindigkeit benutzt werden. &lt;br /&gt;
|-&lt;br /&gt;
 |'''ICP1''' &lt;br /&gt;
 |Eingang für die Capture-Funktion des integrierten Zeitgebers / Zählerbausteines &lt;br /&gt;
|-&lt;br /&gt;
 |'''OC2''' &lt;br /&gt;
 |[[Pwm]] bzw. Output Compare Ausgang des Timers2. Er kann zum Regeln der Bot-Motogeschwindigkeit benutzt werden. &lt;br /&gt;
|-&lt;br /&gt;
 |'''TOSC1, TOSC2''' &lt;br /&gt;
 |TOSC1 und TOSC2 sind Eingänge für den asynchronen Modus von Timer2. Sie sind vorgesehen für den Anschluss eines externen Uhrenquarzes ( 32.768 kHz ). Damit lassen sich zum Beispiel sehr genaue Ein-Sekunden-Impulse für eine Uhr generien. &lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Analog-Digital-Wandler&lt;br /&gt;
|-&lt;br /&gt;
 |'''ADC0''' bis '''ADC7''' &lt;br /&gt;
 |Eingänge des AD-Wandlers. Spannungen können hier gemessen werden oder an den Analog-Komparator weiter geleitet werden. &lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Analog-Komparator&lt;br /&gt;
|-&lt;br /&gt;
 |'''AIN0, AIN1''' &lt;br /&gt;
 |Die beiden externen Eingänge des Analog-Komparators. &lt;br /&gt;
Mit AIN0(+) und AIN1(-) kann man zwei Spannungen miteinander vergleichen. Wenn die Spannung an AIN0 höher als bei AIN1 ist, liefert der Komparator &amp;quot;High&amp;quot;, ansonsten ein &amp;quot;Low&amp;quot;. Als interne Eingänge des Komparators können die Interne Bandgap-Referenzspannung oder Ausgänge des ADC-Multiplexers dienen.&lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| Serielle Schnittstelle ([[UART|USART]])&lt;br /&gt;
|-&lt;br /&gt;
 |'''RXD''' &lt;br /&gt;
 |Eingang der Seriellen Schnittstelle (Receive Data), TTL-Pegel &lt;br /&gt;
|-&lt;br /&gt;
 |'''TXD''' &lt;br /&gt;
 |Ausgang Serielle Schnittstelle (Transmit Data), TTL-Pegel &lt;br /&gt;
|-&lt;br /&gt;
 |'''XCK''' &lt;br /&gt;
 |Externe Takt für den USART. Wird nur in Sonderfällen für den Takt benötigt. &lt;br /&gt;
USART (&amp;quot;Universal Synchronous/Asynchronous Receiver and Transmitter&amp;quot;). Das ist die serielle Schnittstelle, die zur Datenübertragung zwischen Mikrocontroller und PC genutzt wird. Zur bidirektionalen Übertragung werden zwei Pins am Controller benötigt: TXD und RXD. Über TXD (&amp;quot;Transmit Data&amp;quot;) werden Daten gesendet, RXD (&amp;quot;Receive Data&amp;quot;) dient zum Empfang. &lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| [[SPI]]-Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
 |'''SS''' &lt;br /&gt;
 |SPI-Interface – wird beneötigt um den richtigen Slave am Bus zu wählen &lt;br /&gt;
|-&lt;br /&gt;
 |'''MOSI''' &lt;br /&gt;
 |SPI-Interface – Datenausgang (als Master) oder Dateneingang (als Slave), verwendet bei ISP (In-System-Programmierung)&lt;br /&gt;
|-&lt;br /&gt;
 |'''MISO''' &lt;br /&gt;
 |SPI-Interface – Dateneingang (als Master) oder Datenausgang (als Slave), verwendet bei ISP (In-System-Programmierung)&lt;br /&gt;
|-&lt;br /&gt;
 |'''SCK''' &lt;br /&gt;
 |SPI-Interface – Bustakt vom Master, verwendet bei ISP (In-System-Programmierung)&lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| [[I2C|I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C]]-Schnittstelle ([[TWI]])&lt;br /&gt;
|-&lt;br /&gt;
 |'''SDA''' &lt;br /&gt;
 |I2C-Schnittstelle (Bus aus 2 Leitungen) Datenleitung &lt;br /&gt;
|-&lt;br /&gt;
 |'''SCL''' &lt;br /&gt;
 |I2C-Schnittstelle (Bus aus 2 Leitungen) Clockleitung &lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
|- {{Hintergrund1}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;| [[JTAG]]-Interface&lt;br /&gt;
|-&lt;br /&gt;
 |'''TDI''' &lt;br /&gt;
 |JTAG-Debug Interface - Über dieses Interface kann man den AVR programmieren und debuggen. Die Schnittstelle ist ähnlich wie die SPI Schnittstelle und hat getrennte Dateneingangs- und Datenausgangsleitungen sowie eine Taktleitung. TDI ist die Dateneingangsleitung&lt;br /&gt;
|-&lt;br /&gt;
 |'''TDO''' &lt;br /&gt;
 |JTAG-Debug Interface - TDO ist die Datenausgangsleitung des JTAG Interface&lt;br /&gt;
|-&lt;br /&gt;
 |'''TMS''' &lt;br /&gt;
 |JTAG-Debug Interface&lt;br /&gt;
|-&lt;br /&gt;
 |'''TCK''' &lt;br /&gt;
 |JTAG-Debug Interface &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Timer/Counter ==&lt;br /&gt;
Für Infos zu Timer und Counter siehe Artikel [[Timer/Counter (Avr)]].&lt;br /&gt;
&lt;br /&gt;
== Analog-Digital-Wandler ==&lt;br /&gt;
Für Infos zu Analog-Digital-Wandler siehe Artikel [[ADC (Avr)]].&lt;br /&gt;
&lt;br /&gt;
== Analog-Komparator ==&lt;br /&gt;
Für Infos zu Analog-Komparator siehe Artikel [[Analog Komparator (Avr)]].&lt;br /&gt;
&lt;br /&gt;
== TWI/I2C ==&lt;br /&gt;
Für Details über das Two-wire Serial Interface (kurz [[TWI]]) siehe Artikel [[TWI]].&lt;br /&gt;
&lt;br /&gt;
== UART/USART ==&lt;br /&gt;
Für Details über den UART/USART siehe Artikel [[UART]].&lt;br /&gt;
&lt;br /&gt;
== SPI - Serial Peripheral Interface ==&lt;br /&gt;
Für Details über SPI siehe Artikel [[SPI]].&lt;br /&gt;
&lt;br /&gt;
Näheres zu SPI beim AVR siehe [[SPI (AVR)]].&lt;br /&gt;
&lt;br /&gt;
== USI - Universal Serial Interface ==&lt;br /&gt;
Für Infos zu USI (Universal Serial Interface) siehe Artikel [[USI (Avr)]].&lt;br /&gt;
&lt;br /&gt;
== Die Fusebits ==&lt;br /&gt;
Fusebits nennt man bestimmte Bits zur Konfigurierung eines AVR-Controllers. Bei der Auslieferung neuer AVR Controller sind die Fusebits bereits vorkonfiguriert. In vielen Fällen kann man die Konfiguration unverändert belassen, je nach Controllertyp. Bei den Typen Mega xxx bestimmen einige Fusebits beispielsweise, dass der interne Taktgeber aktiviert ist. Möchte man dagegen einen externen Quarz anschließen oder die Taktfrequenz ändern, so müssen auch die Fusebits geändert werden. Auch das Deaktivieren des &amp;quot;[[On Chip Debugging]]&amp;quot; Modus ist oft notwendig, wenn man alle Ports ausnutzen möchte. &lt;br /&gt;
&lt;br /&gt;
Die Fusebits werden in der Regel über die Software eingestellt, welche auch für das Übertragen des Programmcodes zuständig ist. Besonders einfach geht dies beispielsweise mit der Entwicklungsumgebung [[Bascom]]. Aber auch andere Programme wie [[PonyProg]] können für die Umstellung der Fusebits genutzt werden. Einmal eingestellte Fusebits bleiben bis zur erneuten Fusebit-Änderung erhalten. Der normale Programmiermodus verändert die Fusebits nicht. &lt;br /&gt;
&lt;br /&gt;
Je nach AVR Controllertyp sind unterschiedliche Fusebits (Einstellungen) vorhanden. Die genaue Beschreibung findet man im jeweiligen Datenblatt. Da aber falsch gesetzte Fusebit-Einstellungen zu den häufigsten Problemen gehören, liste ich hier die Funktion der üblichen Fusebits nochmals genauer auf:&lt;br /&gt;
&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
 |'''CKSEL0, CKSEL1, CKSEL2, CKSEL3'''&lt;br /&gt;
 |Die Kombination dieser 4 Fusebits bestimmt die Taktquelle des Controllers. Das kann eine interner Taktgenerator, ein Quarz, Quarzoszillator, RC-Glied und ähnliches sein.&lt;br /&gt;
|-&lt;br /&gt;
 |'''JTAGEN'''&lt;br /&gt;
 |Hiermit wird die &amp;quot;[[On Chip Debugging]]&amp;quot; Schnittstelle aktiviert bzw. deaktiviert. Das sind die Bits mit den Bezeichnungen TDI, TDO, TMS und TCK. Möchte man diese Pins als normalen Port nutzen, so muss diese Schnittstelle immer deaktiviert werden. &lt;br /&gt;
|-&lt;br /&gt;
 |'''SUT0, SUT1'''&lt;br /&gt;
 |Die sogenannte StartUp-Zeit (PowerOn delay). Diese Einstellung muss abhängig von der Art des Taktgenerators eingestellt werden, genaueres im jeweiligen Datenblatt. &lt;br /&gt;
|-&lt;br /&gt;
 |'''SPIEN'''&lt;br /&gt;
 |Hiermit kann die serielle [[AVR-ISP Programmierkabel|ISP-Programmierung]], welche die meisten Programmierkabel nutzen, deaktiviert werden. Dies sollte man lieber vermeiden, denn wenn dieser Programmiermodus deaktiviert wurde, kann nur noch der Parallel-Programmiermodus genutzt werden. Der Parallel-Programmiermodus benötigt jedoch ein spezielles Programmiergerät, das die wenigsten Bastler besitzen. ''Also Vorsicht!''&lt;br /&gt;
|-&lt;br /&gt;
 |'''BODEN'''&lt;br /&gt;
 |Über dieses Bit wird der '''Brown-out Detector''' aktiviert bzw. deaktiviert. Dies ist eine Überwachung der Betriebsspannung. Diese Überwachung soll dafür sorgen, dass bei Spannungseinbrüchen ein ordentlicher RESET durchgeführt wird. Dadurch wird verhindert, dass ein Controller in einen undefinierten Zustand gerät (hängen bleibt).&lt;br /&gt;
|-&lt;br /&gt;
 |'''BOOTLEVEL'''&lt;br /&gt;
 |Über dieses  Bit kann die Spannung festgelegt werden, ab welcher der '''Brown-out Detector''' den Controller neu startet (also RESET ausführt). &lt;br /&gt;
|-&lt;br /&gt;
 |'''BOOTRST'''&lt;br /&gt;
 |Gewöhnlich startet ein Programm im Controller nach einem RESET ab Adresse 0. Durch dieses Fusebit kann der Controller jedoch veranlasst werden, nach einem Reset einen sogenannten Bootloader-Bereich auszuführen. Ein [[Bootloader]] kann genutzt werden, um Controller über andere Schnittstellen (z.B. RS232) zu programmieren.&lt;br /&gt;
|-&lt;br /&gt;
 |'''BOOTSZ0, BOOTSZ1'''&lt;br /&gt;
 |Der zuvor genannte Bootloaderbereich kann bei AVR-Controllern verschieden groß sein. Über diese beiden Bits können vier verschiedene Größen eingestellt werden. Siehe unter [[Bootloader]].&lt;br /&gt;
|-&lt;br /&gt;
 |'''EESAVE'''&lt;br /&gt;
 |Dieses Bit legt fest, ob beim Programmieren des Controllers (man nennt es auch brennen) immer das EEPROM gelöscht werden soll.&lt;br /&gt;
|-&lt;br /&gt;
 |'''CKOPT'''&lt;br /&gt;
 |Abhängig von den Einstellungen von CKSEL kann hier dir Oszillator-Verstärkung eingestellt werden. Genaueres im Datenblatt des jeweiligen Controllers.&lt;br /&gt;
|-&lt;br /&gt;
 |'''WDTON'''&lt;br /&gt;
 |Schaltet den WatchDog-Timer beim Booten ein/aus. Dies ist auch per Software möglich&lt;br /&gt;
|-&lt;br /&gt;
 |'''RSTDISBL'''&lt;br /&gt;
 |Durch dieses Bit kann man den RESET-Pin deaktivieren und dann als normalen I/O-Port nutzen. Aber Vorsicht! Da die RESET-Leitung beim Programmieren (Brennen) des Chips genutzt wird, kann man nach dessen Deaktivierung den Controller mit den üblichen [[AVR-ISP Programmierkabel|ISP-Adaptern]] nicht mehr programmieren. In diesem Fall könnte man zwar den Controlle noch mit speziellen Programmiergeräten im Parallelmodus programmieren, aber in der Praxis verfügen nur wenige Bastler über ein Programmiergerät, das dies leistet.&lt;br /&gt;
|-&lt;br /&gt;
 |'''LB1, LB2'''&lt;br /&gt;
 |Das sind die sogenannten Lockbits, mit denen sich das Auslesen des Flash- als auch EEPROM-Speichers verhindern läßt. Zwar können andere Anwender immer noch Daten lesen, allerdings handelt es sich dabei nicht mehr um den wirklichen Inhalt sondern lediglich um wirre Datenbytefolgen. Programmierer, die den erarbeiteten Code vor Raubkopierern schützen wollen, nutzen diese Lockbits. Das Programmieren ist auch bei gesetzen Lockbits noch möglich. Der Bootloader-Bereich wird nicht durch die Lockbits geschützt.&lt;br /&gt;
|-&lt;br /&gt;
 |'''BLB01, BLB02'''&lt;br /&gt;
 |Durch diese Bits kann der Code sogar vor dem Zugriff durch den Bootloader geschützt werden&lt;br /&gt;
|-&lt;br /&gt;
 |'''BLB11, BLB12'''&lt;br /&gt;
 |Diese Bits schützen den Bootloaderbereich selbst&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wie man die Fusebits mit [[Bascom]] einstellt, wird im Beitrag [[Bascom - Erstes Programm in den AVR Controller übertragen]] erläutert.&lt;br /&gt;
&lt;br /&gt;
''Autoren des Artikels: Frank, Luma'' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AVR-Einstieg leicht gemacht]]&lt;br /&gt;
===Entwicklungsumgebungen===&lt;br /&gt;
* [[Bascom]] - Basic-Entwicklungssystem&lt;br /&gt;
* [[Bascom - Erstes Programm in den AVR Controller übertragen]]&lt;br /&gt;
* [[Avr-gcc|avr-gcc]] - Leistungsfähiger AVR-Port des freien Compilers GCC&lt;br /&gt;
* [[WinAVR]] - Freies, kostenloses Werkzeugpaket mit avr-gcc, binutils, tools ([[make]], [[Programmer's Notepad]], [[avrdude]], etc.) für MS-Windows.&lt;br /&gt;
* [[Linuxdistribution_Avr-live-cd]]&lt;br /&gt;
* [[AVR_Assembler_Einf%C3%BChrung|AVR Assembler Einführung (AvrStudio)]]&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* [[AVR-ISP Programmierkabel]] - Bauanleitung für die AVR Controller Programmierkabel&lt;br /&gt;
* [[RN-Control]] - Eines der beliebtestet AVR-Boards im Roboternetz&lt;br /&gt;
* [[RNBFRA-Board]] - Größeres Board mit zwei Atmel Controllern&lt;br /&gt;
===Sonstiges===&lt;br /&gt;
* [[Atmel]]&lt;br /&gt;
* [[HEX Beispiel-Dateien für AVR]]&lt;br /&gt;
* [[Bootloader]]&lt;br /&gt;
* [[On Chip Debugging]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.atmel.com/dyn/products/param_table.asp?family_id=607&amp;amp;OrderBy=part_no&amp;amp;Direction=ASC Aktuelle AVR Vergleichstabelle]&lt;br /&gt;
* [http://www.atmel.com/dyn/products/devices.asp?family_id=607 Die Datenblätter zu Atmel Controllern]&lt;br /&gt;
* [https://mpg.dnsalias.com/~magerlu/rn-wiki/avrtimer_applet Java Applet Timer Berechnung] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/dload.php?action=file&amp;amp;file_id=169 AvrTimer Windows Berechnungstool (für Bascom, nur nach Anmeldung)]&lt;br /&gt;
* [http://people.freenet.de/gjl/helferlein/avr-uart-rechner.html AVR-Baudraten-Rechner (JavaScript)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Abkürzung|AVR]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Leiterplatten_Entwicklung_-_Programme&amp;diff=10137</id>
		<title>Leiterplatten Entwicklung - Programme</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Leiterplatten_Entwicklung_-_Programme&amp;diff=10137"/>
				<updated>2007-02-07T13:29:44Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Leiterplatten Entwicklung war früher ein, für den Hobbyanwender, rechr mühsames unterfangen.&lt;br /&gt;
Entweder wurden die Leitebahnen und &amp;quot;Pad's&amp;quot; direkt auf die Kupferschicht, mit einem Ätzfesten Stift gezeichnet oder zunächst auf Folie/Papier gezeichnet und dann mittels Fototransfer auf die Platine übertragen.&lt;br /&gt;
&lt;br /&gt;
Heute stehen hierfür sehr umfangreiche aber dennoch mehr oder weniger leicht bedienbare  Programme zur verfügung, welche einen Entwurf von Leiterplatten erleichtern.&lt;br /&gt;
&lt;br /&gt;
Oft stehen verschiedene Versionen z.T. auch kostenlose Testversionen oder Versionen für den Hobby-Anwender zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hier eine Liste von freien und kommerziellen Programmen welche es erlauben Leiterpaltten mit dem Computer zu designen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
: '''Hier soll nicht der Umgang (Bedienungsanleitung) mit den beschriebenen Programmen sondern die Verfügbarkeit von verschiedenen Programmen und deren Usability im Vordergrund stehen.'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Die wohl bekanntesten PCB Programme: ==&lt;br /&gt;
:* EAGLE&lt;br /&gt;
:* TARGET&lt;br /&gt;
:* Sprint-Layout&lt;br /&gt;
:* PCB-POOL®Edition&lt;br /&gt;
:* ORCAD&lt;br /&gt;
:* KiCAD&lt;br /&gt;
=== Weitere Programme ===&lt;br /&gt;
'''z.T. kommerzielle, limitierte, freie und z.T nicht mehr verfügbare Cad Programme'''&lt;br /&gt;
:* Protel &lt;br /&gt;
:: nicht mehr verfügbar (jetzt Altium)&lt;br /&gt;
:* Altium Designer&lt;br /&gt;
:* PROTEUS&lt;br /&gt;
:* ULTIBOARD&lt;br /&gt;
:* EASY PC&lt;br /&gt;
:* EDWIN&lt;br /&gt;
:* QUICK ROUTE&lt;br /&gt;
:* ARIADNE&lt;br /&gt;
:* AUTOENGINEER&lt;br /&gt;
:* BPECS32&lt;br /&gt;
:* CADSTAR&lt;br /&gt;
:* CADint&lt;br /&gt;
:* CIRCUIT LAYOUT&lt;br /&gt;
:* CIRCUIT CREATOR&lt;br /&gt;
:* CIRCAD&lt;br /&gt;
&lt;br /&gt;
Diese Liste kann noch weitergeführt werden, was allerdings leicht dazu führt den überblichk zu verlieren.&lt;br /&gt;
Diese Liste wird/kann im Laufe der Zeit mit Kommentaren und erfahrungswerten versehen bzw. aktualisiert werden.&lt;br /&gt;
Auch Streichungen und Erweiterungen sind gestattet (bitte nicht übertreiben).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AddOns für diese Programme ==&lt;br /&gt;
:* Eagle3D&lt;br /&gt;
:: eine kostenloses 3D Zusatzprogramm für Eagle&lt;br /&gt;
&lt;br /&gt;
== Bewertungen und Infos zu den gelisteten Programmen ==&lt;br /&gt;
''Info, Empfehlungen und Kritik zu den vorgestellten Programmen''&lt;br /&gt;
&lt;br /&gt;
::* EAGLE&lt;br /&gt;
::** Dieses Programm kann man hier im Roboternetz wohl als 1. Wahl bezeichnen, da die meisten Anwender hier hiermit arbeiten. Die Kostenlose Version erlaubt Platinen bis zu 80mm x 100mm mit Schaltplan und Autorouter auf zwei Signal-Ebenen (Dual-Layer) zu erstellen. Auch eine sog. Studenten-Version (aber nicht nur für diese) ist zu sehr guten Konditionen zu erwerben.&lt;br /&gt;
::** Nachdem die Einarbeitungsphase überwunden wurde, sehr gut zu bedienendes Tool&lt;br /&gt;
::** Der Autorouter liefert (wie viele andere Programme auch) nur teilweise brauchbare Ergebnisse.&lt;br /&gt;
::* Eagle3D&lt;br /&gt;
::** bereits in der Entwurfsphase kann einem dieses Tool bei Design-Fehlern (LookOut) gute Dienste leisten&lt;br /&gt;
::** leider ist das erstellen von eigenen Bauteilen (noch) etwas aufwendig.&lt;br /&gt;
::** Auch eine Animation (Flug über die Platte) soll möglich sein...&lt;br /&gt;
::** Sieht einfach klasse aus und macht auch Spass damit zu 'Spielen'&lt;br /&gt;
::: '''INFO:''' Benötigt weitere Zusatzsoftware (auch als Freeware/GNU), mehr dazu auf der Homepage&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
'''Programme'''&lt;br /&gt;
* [http://www.cadsoft.de/ Eagle Homepage von CadSoft]&lt;br /&gt;
* [http://www.ibfriedrich.com/home.htm Target 3001 Homepage von Ing.-Büro FRIEDRICH]&lt;br /&gt;
* [http://www.abacom-online.de/html/demoversionen.html Sprint-Layout Homepage von ABACOM Ingenieurbüro GbR]&lt;br /&gt;
* [http://www.pcb-pool.de/html_de/de_service_1.htm free PCB-POOL Homepage von Beta LAYOUT GmbH]&lt;br /&gt;
* [http://www.altium.com/Products/AltiumDesigner/ AltiumDesigner Homepage von Altium Limited.]&lt;br /&gt;
* [http://www.lis.inpg.fr/realise_au_lis/kicad/ KiCAD-Homepage]&lt;br /&gt;
'''AddOn's'''&lt;br /&gt;
* [http://www.matwei.de/doku.php?id=de:eagle3d:eagle3d Eagle3D Homepage von Matthias Weißer]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- unsichtbarer Kommentar: http://www.pcb-pool.de/html_de/de_service_1.htm --&amp;gt;&lt;br /&gt;
--[[Benutzer:Darwin.nuernberg|Darwin.nuernberg]] 12:39, 3. Feb 2007 (CET)&lt;br /&gt;
{{Ausbauwunsch|Was Euch noch dazu einfällt, erfahrungen mit diesen Programmen usw., Kommentare}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Leiterplatten herstellen]]&lt;br /&gt;
* [[CAD]]&lt;br /&gt;
* [[PCB]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Grundlagen]]&lt;br /&gt;
[[Kategorie:Praxis]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10136</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10136"/>
				<updated>2007-02-06T16:07:02Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
=== Technische Informationen ===&lt;br /&gt;
Zum Berechnen der Motorkraft muss man erst einige Reibungen und Widerstände kennenlernen. Diese werden nun im folgenden beschrieben. Man muss nicht jede Kraft berechnen, einige Kräfte kann man auch mit einem Pauschalzuschlag unter den Tisch fallen lassen. Ein Beispiel: ''Luftwiderstand von einer Schnecke.'' Sicherlich darf man aber den Luftwiderstand bei einem Rennwagen nicht unterschlagen. Ich hoffe Ihr versteht was ich sagen will.&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig. '''Wichtig:''' Sollte der Roboter an einer Schränge sich befinden, berechnet sich die Reibung noch mit dem Koeffizienten cos(alpha). Alpha ist hierbei der Steigungswinken. Mehr siehe dazu bitte Steigung/Gefälle.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
*F: Kraft in N&lt;br /&gt;
*fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
*m: Masse des Roboters in Kg&lt;br /&gt;
*g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
*fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigung ==&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt &amp;lt;math&amp;gt;v=a*t&amp;lt;/math&amp;gt;. &lt;br /&gt;
*v: Geschwindigkeit in m/sec&lt;br /&gt;
*t: die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. &lt;br /&gt;
*s ist die Strecke in m &lt;br /&gt;
*t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb funktionieren.&lt;br /&gt;
=== Bremskraft ===&lt;br /&gt;
Das gleiche gilt auch für das Bremsen, nur das hier Energie freigesetzt wird. Wenn die Reifen darf man nicht zu sehr blockieren. Sonst überschreitet man die [#Haftreibung] und der Roboter rutscht. &lt;br /&gt;
Der die Kraft F kann man in diesem Fall durch &amp;lt;math&amp;gt;F=p/t&amp;lt;/math&amp;gt; nehmen. P ist der Impuls und die t die Zeit.&lt;br /&gt;
Einen Impuls ist das Produkt aus Masse mal Geschwindigkeit. Also: &amp;lt;math&amp;gt;P=m*v&amp;lt;/math&amp;gt;. Das setzt man nun in die Gleichung ein und erhält: &amp;lt;math&amp;gt;F=(m*v)/t&amp;lt;/math&amp;gt;. Alternativ kann man die Bremskraft aus &amp;lt;math&amp;gt;F=m*a&amp;lt;/math&amp;gt; errechnen. &lt;br /&gt;
Überschreitet nur die Errechnete Kraft F die Haftreibung rutscht euer Roboter garantiert.&lt;br /&gt;
&lt;br /&gt;
== Steigung/Gefälle ==&lt;br /&gt;
=== Steigung ===&lt;br /&gt;
Wenn man einen Berg hochfährt muss man neben der Reibung auch noch die Erdanziehungskraft überwinden. Bei Steigungen gibt es grundlegend 2 Kräfte. &lt;br /&gt;
* Normalkraft: Kraft die auf den Boden wirkt und aus der die (Haft/Gleit/Roll)reibung berechnet wird. Diese berechnet sich aus &amp;lt;math&amp;gt;Fn=m*g*cos(alpha)&amp;lt;/math&amp;gt;. Alpha ist hierbei der Steigung. Sollte man den Berg mit dem Roboter also eine Steigung überwinden, hat man eine geringere (Haft/Gleit/Roll)reibung zu überwinden.&lt;br /&gt;
* Hang(auf|ab)triebskraft: Kraft die der Roboter überwinden muss um den Berg hinaufzufahren. Diese Kraft kann man aus &amp;lt;math&amp;gt;Fh=m*g*sin(alpha)&amp;lt;/math&amp;gt; errechen. &lt;br /&gt;
=== Gefälle ===&lt;br /&gt;
Bei Gefällen gilt das gleiche wie bei Steigungen, nur dass hier die Hangabtriebskraft wirkt. Diese berechnet sich wie die Hangauftriebskraft. Die Berechnung der Normalkraft ist identisch wie die Berechnung der benötigten Kraft für die Steigung.&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
Der Luftwiderstand betrifft eigentlich nur schnelle Roboter. Hierzu braucht man eine Latte koeffizienten: Luftdichte ld, Reibungskoeffizient cw und die &amp;quot;Luftaufprallfläche&amp;quot; A.&lt;br /&gt;
&amp;lt;math&amp;gt;F=0.5v^2*cw*ld*A&amp;lt;/math&amp;gt;. Die Luftdichte von ist Standartgemäß 1.1. cw muss man nach koeffizienten suchen. A ist die Aufprallfäche, das ist die Seite die mit dem Fahrtfind konfrontiert wird. Mehr dieser Koeffizenten findet man unter Weblinks.&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
Hat man nun alle (nötigen) Kräfte errechechnet, dann nimmt man den schlechtesten Wert und rechnet 10-20%(geschätzt) Verluste durch Getriebe etc. hinzu.&lt;br /&gt;
Hat man die benötigte Kraft errechnet gilt:&lt;br /&gt;
&amp;lt;math&amp;gt;Mmotor=Ftotal*Reifenradius&amp;lt;/math&amp;gt;. Nun hat man einen Anhaltspunkt welche Leistung der Roboter benötigt.&lt;br /&gt;
=== Getriebe ===&lt;br /&gt;
Ein Getriebe hat die Aufgabe Geschwindigkeit in Kraft oder Kraft in Geschwindigkeit umzuwandeln. Setzt man nun ein Getriebe mit 1:200 ein, wird die Kraft 200fach stärker, die Geschwindigkeit 200fach langsamer. Ein Getriebe ist auf jeden Fall sinnvoll und zu empfehlen. &lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
Die Geschwindkeit des Roboters ist das Produkt aus 2pi, dem Reifenradius und der Umdrehungszahl. Als Formel: &amp;lt;math&amp;gt;V=2pi*r*u&amp;lt;/math&amp;gt;. Ein eventuell vorhandenes Getriebe ist natürlich zu miteinzubeziehen.&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
=== Bitte noch ergänzen ===&lt;br /&gt;
Jeder ist herzlich willkommen diesen Artikel zu erweitern oder zu verbessern.&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Haftreibung Haftreibung]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Rollreibung Rollreibung]&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Luftwiderstand Luftriebungskoeffizenten]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=10093</id>
		<title>Diskussion:Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=10093"/>
				<updated>2007-02-02T19:23:57Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daß die crt*.o nicht gefunden wird deutet auf eine fehlerhaft Installation/Built von avr-gcc/avr-binutils hin.&lt;br /&gt;
Sinnvoll wäre auch ein pdf-Reader nebst den AVR-Datenblättern, da man beim Entwickeln gerne darauf zurückgreift. --[[Benutzer:SprinterSB|SprinterSB]] 19:42, 23. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hallo.&lt;br /&gt;
Ich habe das CRT*.o problem durch die makefile in der neueren Version gelöst. Hier muss man die CRTM-File zusätzlich noch angeben. Ein Avr-reader ist schon installiert, der von KDE. Nennt sicht KPDF.&lt;br /&gt;
&lt;br /&gt;
Bis die nächste Version rauskommt, wird noch auf das neue Release von Kontrollerlab gewartet.&lt;br /&gt;
&lt;br /&gt;
Viele Grüße&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 20:22, 2. Feb 2007 (CET)&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=10092</id>
		<title>Diskussion:Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=10092"/>
				<updated>2007-02-02T19:22:59Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daß die crt*.o nicht gefunden wird deutet auf eine fehlerhaft Installation/Built von avr-gcc/avr-binutils hin.&lt;br /&gt;
Sinnvoll wäre auch ein pdf-Reader nebst den AVR-Datenblättern, da man beim Entwickeln gerne darauf zurückgreift. --[[Benutzer:SprinterSB|SprinterSB]] 19:42, 23. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hallo.&lt;br /&gt;
Ich habe das CRT*.o problem durch die makefile in der neueren Version gelöst. Hier muss man die CRTM-File zusätzlich noch angeben. Ein Avr-reader ist schon installiert, der von KDE. Nennt sicht KPDF.&lt;br /&gt;
&lt;br /&gt;
Viele Grüße&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 20:22, 2. Feb 2007 (CET)&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=10091</id>
		<title>Diskussion:Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=10091"/>
				<updated>2007-02-02T19:22:39Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daß die crt*.o nicht gefunden wird deutet auf eine fehlerhaft Installation/Built von avr-gcc/avr-binutils hin.&lt;br /&gt;
Sinnvoll wäre auch ein pdf-Reader nebst den AVR-Datenblättern, da man beim Entwickeln gerne darauf zurückgreift. --[[Benutzer:SprinterSB|SprinterSB]] 19:42, 23. Dez 2006 (CET)&lt;br /&gt;
Hallo.&lt;br /&gt;
Ich habe das CRT*.o problem durch die makefile in der neueren Version gelöst. Hier muss man die CRTM-File zusätzlich noch angeben. Ein Avr-reader ist schon installiert, der von KDE. Nennt sicht KPDF.&lt;br /&gt;
&lt;br /&gt;
Viele Grüße&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 20:22, 2. Feb 2007 (CET)&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10089</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10089"/>
				<updated>2007-02-02T12:58:24Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben. Sollte es unklarheiten geben, bitte die Diskusion nutzen.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
=== Technische Informationen ===&lt;br /&gt;
Zum Berechnen der Motorkraft muss man erst einige Reibungen und Widerstände kennenlernen. Diese werden nun im folgenden beschrieben. Man muss nicht jede Kraft berechnen, einige Kräfte kann man auch mit einem Pauschalzuschlag unter den Tisch fallen lassen. Ein Beispiel: ''Luftwiderstand von einer Schnecke.'' Sicherlich darf man aber den Luftwiderstand bei einem Rennwagen nicht unterschlagen. Ich hoffe Ihr versteht was ich sagen will.&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig. '''Wichtig:''' Sollte der Roboter an einer Schränge sich befinden, berechnet sich die Reibung noch mit dem Koeffizienten cos(alpha). Alpha ist hierbei der Steigungswinken. Mehr siehe dazu bitte Steigung/Gefälle.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
*F: Kraft in N&lt;br /&gt;
*fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
*m: Masse des Roboters in Kg&lt;br /&gt;
*g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
*fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigung ==&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt &amp;lt;math&amp;gt;v=a*t&amp;lt;/math&amp;gt;. &lt;br /&gt;
*v: Geschwindigkeit in m/sec&lt;br /&gt;
*t: die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. &lt;br /&gt;
*s ist die Strecke in m &lt;br /&gt;
*t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb funktionieren.&lt;br /&gt;
=== Bremskraft ===&lt;br /&gt;
Das gleiche gilt auch für das Bremsen, nur das hier Energie freigesetzt wird. Wenn die Reifen darf man nicht zu sehr blockieren. Sonst überschreitet man die [#Haftreibung] und der Roboter rutscht. &lt;br /&gt;
Der die Kraft F kann man in diesem Fall durch &amp;lt;math&amp;gt;F=p/t&amp;lt;/math&amp;gt; nehmen. P ist der Impuls und die t die Zeit.&lt;br /&gt;
Einen Impuls ist das Produkt aus Masse mal Geschwindigkeit. Also: &amp;lt;math&amp;gt;P=m*v&amp;lt;/math&amp;gt;. Das setzt man nun in die Gleichung ein und erhält: &amp;lt;math&amp;gt;F=(m*v)/t&amp;lt;/math&amp;gt;. Alternativ kann man die Bremskraft aus &amp;lt;math&amp;gt;F=m*a&amp;lt;/math&amp;gt; errechnen. &lt;br /&gt;
Überschreitet nur die Errechnete Kraft F die Haftreibung rutscht euer Roboter garantiert.&lt;br /&gt;
&lt;br /&gt;
== Steigung/Gefälle ==&lt;br /&gt;
=== Steigung ===&lt;br /&gt;
Wenn man einen Berg hochfährt muss man neben der Reibung auch noch die Erdanziehungskraft überwinden. Bei Steigungen gibt es grundlegend 2 Kräfte. &lt;br /&gt;
* Normalkraft: Kraft die auf den Boden wirkt und aus der die (Haft/Gleit/Roll)reibung berechnet wird. Diese berechnet sich aus &amp;lt;math&amp;gt;Fn=m*g*cos(alpha)&amp;lt;/math&amp;gt;. Alpha ist hierbei der Steigung. Sollte man den Berg mit dem Roboter also eine Steigung überwinden, hat man eine geringere (Haft/Gleit/Roll)reibung zu überwinden.&lt;br /&gt;
* Hang(auf|ab)triebskraft: Kraft die der Roboter überwinden muss um den Berg hinaufzufahren. Diese Kraft kann man aus &amp;lt;math&amp;gt;Fh=m*g*sin(alpha)&amp;lt;/math&amp;gt; errechen. &lt;br /&gt;
=== Gefälle ===&lt;br /&gt;
Bei Gefällen gilt das gleiche wie bei Steigungen, nur dass hier die Hangabtriebskraft wirkt. Diese berechnet sich wie die Hangauftriebskraft. Die Berechnung der Normalkraft ist identisch wie die Berechnung der benötigten Kraft für die Steigung.&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
Der Luftwiderstand betrifft eigentlich nur schnelle Roboter. Hierzu braucht man eine Latte koeffizienten: Luftdichte ld, Reibungskoeffizient cw und die &amp;quot;Luftaufprallfläche&amp;quot; A.&lt;br /&gt;
&amp;lt;math&amp;gt;F=0.5v^2*cw*ld*A&amp;lt;/math&amp;gt;. Die Luftdichte von ist Standartgemäß 1.1. cw muss man nach koeffizienten suchen. A ist die Aufprallfäche, das ist die Seite die mit dem Fahrtfind konfrontiert wird. Mehr dieser Koeffizenten findet man unter Weblinks.&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
Hat man nun alle (nötigen) Kräfte errechechnet, dann nimmt man den schlechtesten Wert und rechnet 10-20%(geschätzt) Verluste durch Getriebe etc. hinzu.&lt;br /&gt;
Hat man die benötigte Kraft errechnet gilt:&lt;br /&gt;
&amp;lt;math&amp;gt;Mmotor=Ftotal*Reifenradius&amp;lt;/math&amp;gt;. Nun hat man einen Anhaltspunkt welche Leistung der Roboter benötigt.&lt;br /&gt;
=== Getriebe ===&lt;br /&gt;
Ein Getriebe hat die Aufgabe Geschwindigkeit in Kraft oder Kraft in Geschwindigkeit umzuwandeln. Setzt man nun ein Getriebe mit 1:200 ein, wird die Kraft 200fach stärker, die Geschwindigkeit 200fach langsamer. Ein Getriebe ist auf jeden Fall sinnvoll und zu empfehlen. &lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
Die Geschwindkeit des Roboters ist das Produkt aus 2pi, dem Reifenradius und der Umdrehungszahl. Als Formel: &amp;lt;math&amp;gt;V=2pi*r*u&amp;lt;/math&amp;gt;. Ein eventuell vorhandenes Getriebe ist natürlich zu miteinzubeziehen.&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
=== Bitte noch ergänzen ===&lt;br /&gt;
Jeder ist herzlich willkommen diesen Artikel zu erweitern oder zu verbessern.&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Haftreibung Haftreibung]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Rollreibung Rollreibung]&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Luftwiderstand Luftriebungskoeffizenten]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10088</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10088"/>
				<updated>2007-02-02T12:50:24Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben. Sollte es unklarheiten geben, bitte die Diskusion nutzen.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
=== Technische Informationen ===&lt;br /&gt;
Zum Berechnen der Motorkraft muss man erst einige Reibungen und wiederstände kennenlernen. Diese werden nun im folgenden beschrieben. Man muss nicht jede Kraft berechnen, einige Kräfte kann man auch mit einem Pauschalzuschlag unter den Tisch fallen lassen. Ein Beispiel: ''Luftwiderstand von einer Schnecke.'' Sicherlich darf man aber den Luftwiderstand bei einem Rennwagen nicht unterschlagen. Ich hoffe Ihr versteht was ich sagen will.&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig. '''Wichtig:''' Sollte der Roboter an einer schränge sich befinden, berechnet sich die Reibung noch mit dem Koeffizienten cos(alpha). Alpha ist hierbei der Steigungswinken. Mehr siehe dazu bitte Steigung/Gefälle.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
*F: Kraft in N&lt;br /&gt;
*fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
*m: Masse des Roboters in Kg&lt;br /&gt;
*g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigung ==&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt v=a*t. v ist die Geschwindigkeit in m/sec und t die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. s ist die Strecke in m und t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb gehen.&lt;br /&gt;
=== Bremskraft ===&lt;br /&gt;
Das gleiche gilt auch für das Bremsen, nur das hier Energie freigesetzt wird. Wenn die Reifen darf man nicht zu sehr blockieren. Sonst überschreitet man die [#Haftreibung] und der Roboter rutscht. &lt;br /&gt;
Der die Kraft F kann man in diesem Fall durch &amp;lt;math&amp;gt;F=p/t&amp;lt;/math&amp;gt; nehmen. P ist der Impuls und die t die Zeit.&lt;br /&gt;
Einen Impuls ist das Produkt aus Masse mal Geschwindigkeit. Also: &amp;lt;math&amp;gt;P=m*v&amp;lt;/math&amp;gt;. Das setzt man nun in die Gleichung ein und erhält: &amp;lt;math&amp;gt;F=(m*v)/t&amp;lt;/math&amp;gt;. Alternativ kann man die Bremskraft aus &amp;lt;math&amp;gt;F=m*a&amp;lt;/math&amp;gt; errechnen. &lt;br /&gt;
Überschreitet nur die Errechnete Kraft F die Haftreibung rutscht euer Roboter garantiert.&lt;br /&gt;
Anmerkung: Dieser Artikel wird noch erweitert.&lt;br /&gt;
== Steigung/Gefälle ==&lt;br /&gt;
=== Steigung ===&lt;br /&gt;
Wenn man einen Berg hochfährt muss man neben der Reibung auch noch die Erdanziehungskraft überwinden. Bei Steigungen gibt es grundlegend 2 Kräfte. &lt;br /&gt;
* Normalkraft: Kraft die auf den Boden wirkt und aus der die (Haft/Gleit/Roll)reibung berechnet wird. Diese berechnet sich aus &amp;lt;math&amp;gt;Fn=m*g*cos(alpha)&amp;lt;/math&amp;gt;. Alpha ist hierbei der Steigung. Sollte man den Berg mit dem Roboter also eine Steigung überwinden, hat man eine geringere (Haft/Gleit/Roll)reibung zu überwinden.&lt;br /&gt;
* Hang(auf|ab)triebskraft: Kraft die der Roboter überwinden muss um den Berg hinaufzufahren. Diese Kraft kann man aus &amp;lt;math&amp;gt;Fh=m*g*sin(alpha)&amp;lt;/math&amp;gt; errechen. &lt;br /&gt;
=== Gefälle ===&lt;br /&gt;
Bei geflällen gilt das gleiche wie bei Steigungen, nur dass hier die Hangabtriebskraft wirkt. Diese berechnet sich wie die Hangauftriebskraft. Die Berechnung der Normalkraft ist identisch wie die Berechnung der benötigten Kraft für die Steigung.&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
Der Luftwiderstand betrifft eigentlich nur schnelle Roboter die schnell fahren. Hierzu braucht man eine Latte koeffizienten: Luftdichte ld, Reibungskoeffizient cw und die &amp;quot;Luftaufprallfläche&amp;quot; A.&lt;br /&gt;
&amp;lt;math&amp;gt;F=0.5v^2*cw*ld*A&amp;lt;/math&amp;gt;. Die Luftdichte von ist Standartgemäß 1.1. cw muss man nach koeffizienten suchen. A ist die Aufprallfäche, das ist die Seite die mit dem Fahrtfind konfrontiert wird. &lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
Hat man nun alle (nötigen) Kräfte errechechnet, dann nimmt man den schlechtesten Wert und rechnet 10-20%(geschätzt) Verluste durch Getriebe etc. hinzu.&lt;br /&gt;
Hat man die benötigte Kraft errechnet gilt:&lt;br /&gt;
&amp;lt;math&amp;gt;Mmotor=Ftotal*Reifenradius&amp;lt;/math&amp;gt;. Nun hat man einen Anhaltspunkt welche Leistung der Roboter benötigt.&lt;br /&gt;
=== Getriebe ===&lt;br /&gt;
Ein Getriebe hat die Aufgabe Geschwindigkeit in Kraft oder Kraft in Geschwindigkeit umzuwandeln. Setzt man nun ein Getriebe mit 1:200 ein, wird die Kraft 200fach stärker, die Geschwindigkeit 200fach langsamer. Ein Getriebe ist auf jeden Fall sinnvoll und zu empfehlen. &lt;br /&gt;
=== Geschwindigkeit ===&lt;br /&gt;
Die Geschwindkeit des Roboters ist das Produkt aus 2pi, dem Reifenradius und der Umdrehungszahl. Als Formel: &amp;lt;math&amp;gt;V=2pi*r*u&amp;lt;/math&amp;gt;. Ein eventuell vorhandenes Getriebe ist natürlich zu miteinzubeziehen.&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
=== Bitte noch ergänzen ===&lt;br /&gt;
Jeder ist herzlich willkommen diesen Artikel zu erweitern oder zu verbessern.&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Haftreibung Haftreibung]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Rollreibung Rollreibung]&lt;br /&gt;
*[http://de.wikipedia.org/wiki/Luftwiderstand Luftriebungskoeffizenten]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10087</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10087"/>
				<updated>2007-02-02T12:43:36Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben. Sollte es unklarheiten geben, bitte die Diskusion nutzen.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
=== Technische Informationen ===&lt;br /&gt;
Zum Berechnen der Motorkraft muss man erst einige Reibungen und wiederstände kennenlernen. Diese werden nun im folgenden beschrieben. Man muss nicht jede Kraft berechnen, einige Kräfte kann man auch mit einem Pauschalzuschlag unter den Tisch fallen lassen. Ein Beispiel: ''Luftwiderstand von einer Schnecke.'' Sicherlich darf man aber den Luftwiderstand bei einem Rennwagen nicht unterschlagen. Ich hoffe Ihr versteht was ich sagen will.&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig. '''Wichtig:''' Sollte der Roboter an einer schränge sich befinden, berechnet sich die Reibung noch mit dem Koeffizienten cos(alpha). Alpha ist hierbei der Steigungswinken. Mehr siehe dazu bitte Steigung/Gefälle.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
*F: Kraft in N&lt;br /&gt;
*fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
*m: Masse des Roboters in Kg&lt;br /&gt;
*g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigung ==&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt v=a*t. v ist die Geschwindigkeit in m/sec und t die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. s ist die Strecke in m und t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb gehen.&lt;br /&gt;
=== Bremskraft ===&lt;br /&gt;
Das gleiche gilt auch für das Bremsen, nur das hier Energie freigesetzt wird. Wenn die Reifen darf man nicht zu sehr blockieren. Sonst überschreitet man die [#Haftreibung] und der Roboter rutscht. &lt;br /&gt;
Der die Kraft F kann man in diesem Fall durch &amp;lt;math&amp;gt;F=p/t&amp;lt;/math&amp;gt; nehmen. P ist der Impuls und die t die Zeit.&lt;br /&gt;
Einen Impuls ist das Produkt aus Masse mal Geschwindigkeit. Also: &amp;lt;math&amp;gt;P=m*v&amp;lt;/math&amp;gt;. Das setzt man nun in die Gleichung ein und erhält: &amp;lt;math&amp;gt;F=(m*v)/t&amp;lt;/math&amp;gt;. Alternativ kann man die Bremskraft aus &amp;lt;math&amp;gt;F=m*a&amp;lt;/math&amp;gt; errechnen. &lt;br /&gt;
Überschreitet nur die Errechnete Kraft F die Haftreibung rutscht euer Roboter garantiert.&lt;br /&gt;
Anmerkung: Dieser Artikel wird noch erweitert.&lt;br /&gt;
== Steigung/Gefälle ==&lt;br /&gt;
=== Steigung ===&lt;br /&gt;
Wenn man einen Berg hochfährt muss man neben der Reibung auch noch die Erdanziehungskraft überwinden. Bei Steigungen gibt es grundlegend 2 Kräfte. &lt;br /&gt;
* Normalkraft: Kraft die auf den Boden wirkt und aus der die (Haft/Gleit/Roll)reibung berechnet wird. Diese berechnet sich aus &amp;lt;math&amp;gt;Fn=m*g*cos(alpha)&amp;lt;/math&amp;gt;. Alpha ist hierbei der Steigung. Sollte man den Berg mit dem Roboter also eine Steigung überwinden, hat man eine geringere (Haft/Gleit/Roll)reibung zu überwinden.&lt;br /&gt;
* Hang(auf|ab)triebskraft: Kraft die der Roboter überwinden muss um den Berg hinaufzufahren. Diese Kraft kann man aus &amp;lt;math&amp;gt;Fh=m*g*sin(alpha)&amp;lt;/math&amp;gt; errechen. &lt;br /&gt;
=== Gefälle ===&lt;br /&gt;
Bei geflällen gilt das gleiche wie bei Steigungen, nur dass hier die Hangabtriebskraft wirkt. Diese berechnet sich wie die Hangauftriebskraft. Die Berechnung der Normalkraft ist identisch wie die Berechnung der benötigten Kraft für die Steigung.&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
Der Luftwiderstand betrifft eigentlich nur schnelle Roboter die schnell fahren. Hierzu braucht man eine Latte koeffizienten: Luftdichte ld, Reibungskoeffizient cw und die &amp;quot;Luftaufprallfläche&amp;quot; A.&lt;br /&gt;
&amp;lt;math&amp;gt;F=0.5v^2*cw*ld*A&amp;lt;/math&amp;gt;. Die Luftdichte von ist Standartgemäß 1.1. cw muss man nach koeffizienten suchen. A ist die Aufprallfäche, das ist die Seite die mit dem Fahrtfind konfrontiert wird. &lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
Hat man nun alle (nötigen) Kräfte errechechnet, dann nimmt man den schlechtesten Wert und rechnet 10-20%(geschätzt) Verluste durch Getriebe etc. hinzu.&lt;br /&gt;
Hat man die benötigte Kraft errechnet gilt:&lt;br /&gt;
&amp;lt;math&amp;gt;Mmotor=Ftotal*Reifenradius&amp;lt;/math&amp;gt;. Nun hat man einen Anhaltspunkt welche Leistung der Roboter benötigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10086</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10086"/>
				<updated>2007-02-02T12:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben. Sollte es unklarheiten geben, bitte die Diskusion nutzen.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
=== Technische Informationen ===&lt;br /&gt;
Zum Berechnen der Motorkraft muss man erst einige Reibungen und wiederstände kennenlernen. Diese werden nun im folgenden beschrieben. Man muss nicht jede Kraft berechnen, einige Kräfte kann man auch mit einem Pauschalzuschlag unter den Tisch fallen lassen. Ein Beispiel: ''Luftwiderstand von einer Schnecke.'' Sicherlich darf man aber den Luftwiderstand bei einem Rennwagen nicht unterschlagen. Ich hoffe Ihr versteht was ich sagen will.&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigung ==&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt v=a*t. v ist die Geschwindigkeit in m/sec und t die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. s ist die Strecke in m und t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb gehen.&lt;br /&gt;
=== Bremskraft ===&lt;br /&gt;
Das gleiche gilt auch für das Bremsen, nur das hier Energie freigesetzt wird. Wenn die Reifen darf man nicht zu sehr blockieren. Sonst überschreitet man die [#Haftreibung] und der Roboter rutscht. &lt;br /&gt;
&lt;br /&gt;
Anmerkung: Dieser Artikel wird noch erweitert.&lt;br /&gt;
== Steigung/Gefälle ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
=== Steigung ===&lt;br /&gt;
Wenn man einen Berg hochfährt muss man neben der Reibung auch noch die Erdanziehungskraft überwinden. Bei Steigungen gibt es grundlegend 2 Kräfte. &lt;br /&gt;
* Normalkraft: Kraft die auf den Boden wirkt und aus der die (Haft/Gleit/Roll)reibung berechnet wird. Diese berechnet sich aus &amp;lt;math&amp;gt;Fn=m*g*cos(alpha)&amp;lt;/math&amp;gt;. Alpha ist hierbei der Steigung. Sollte man den Berg mit dem Roboter also eine Steigung überwinden, hat man eine geringere (Haft/Gleit/Roll)reibung zu überwinden.&lt;br /&gt;
* Hang(auf|ab)triebskraft: Kraft die der Roboter überwinden muss um den Berg hinaufzufahren. Diese Kraft kann man aus &amp;lt;math&amp;gt;Fh=m*g*sin(alpha)&amp;lt;/math&amp;gt; errechen. &lt;br /&gt;
=== Gefälle ===&lt;br /&gt;
Bei geflällen gilt das gleiche wie bei Steigungen, nur dass hier die Hangabtriebskraft wirkt. Diese berechnet sich wie die Hangauftriebskraft. Die Berechnung der Normalkraft ist identisch wie die Berechnung der benötigten Kraft für die Steigung.&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10083</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10083"/>
				<updated>2007-02-01T21:47:15Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben. Sollte es unklarheiten geben, bitte die Diskusion nutzen.'''&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
&lt;br /&gt;
== Vorwort ==&lt;br /&gt;
''' Folgt noch.. '''&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigen ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt v=a*t. v ist die Geschwindigkeit in m/sec und t die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. s ist die Strecke in m und t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb gehen. &lt;br /&gt;
&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10082</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10082"/>
				<updated>2007-02-01T21:45:49Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben. Sollte es unklarheiten geben, bitte die Diskusion nutzen.'''&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
== Bewegungseibungen ==&lt;br /&gt;
Darunter fallen Haft-,Gleit- und Rollreibung. Diese sind von der Geschwindigkeit unanabhängig.&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Beschleunigen ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
=== Benötigte Beschleunigung berechnen ===&lt;br /&gt;
Für das Anfahren muss man die benötigte Beschleunigung wissen. Die Beschleunigung wird mit a (engl.: ''Beschleunigung'') bezeichnet. Sie hat die Einheit m/(sec^2). Diese muss man zuerst ermitteln. &lt;br /&gt;
&lt;br /&gt;
Man kann diese anhand der Geschwindigkeit erechnen. Dabei gilt v=a*t. v ist die Geschwindigkeit in m/sec und t die Zeit in sec. &lt;br /&gt;
Auch kann man diese anhand der zurückgelegten Strecke ermitteln. Dabei gilt: s=0.5*t^2*a. s ist die Strecke in m und t die Zeit in Sekunden.&lt;br /&gt;
&lt;br /&gt;
=== Kraftberechnung ===&lt;br /&gt;
Hat man nun die Beschleunigung a ermittelt, kann man die benötigte Kraft mithilfe F=m*a errechnen. Vorraussetzung hierbei ist, dass die Masse konstant bleibt. Das würde also nicht für Roboter mit Raketenantrieb gehen. &lt;br /&gt;
&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10081</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10081"/>
				<updated>2007-02-01T21:31:27Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
== Reibungen ==&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss diese Kraft über die Motoren  aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Anfahren ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10080</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10080"/>
				<updated>2007-02-01T21:30:05Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. Es gibt zwar etliche Überschlagsrechnungen, doch leider blieb dem Roboterbauer bisjetzt eine genaue Berechnung vorenthalten. Desshalb '''hat dieser Artikel hat die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
== Reibungen ==&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss über die Motoren diese Kraft aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Anfahren ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10079</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10079"/>
				<updated>2007-02-01T21:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. '''Dieser Artikel hat die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
== Reibungen ==&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss über die Motoren diese Kraft aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Anfahren ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10078</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10078"/>
				<updated>2007-02-01T21:26:31Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. '''Dieser Artikel hat die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
== Reibungen ==&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss über die Motoren diese Kraft aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Anfahren ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10077</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10077"/>
				<updated>2007-02-01T21:26:13Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. '''Dieser Artikel hat die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
== Reibungen ===&lt;br /&gt;
=== Haftreibung ===&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss über die Motoren diese Kraft aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
=== Gleitreibung ===&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rollreibung ===&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
== Anfahren ==&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
== Bergauf fahren ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
==Luftwiderstand ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Errechnung der Motorkraft ==&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
== Autoren ==&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10076</id>
		<title>Motorkraft berechnen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Motorkraft_berechnen&amp;diff=10076"/>
				<updated>2007-02-01T21:24:52Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Wichtig: Im Moment wird dieser Artikel noch geschrieben'''&lt;br /&gt;
Wenn man einen Roboter plant, stellt man sich häufig die Frage, wie stark die Motoren sein müssen. Sind sie zu schwach kommt der Roboter nicht von der Stelle. Sind sie sie jedoch zu stark verpulvert man unötig Energie und verringert dadurch die Fahrzeit. '''Dieser Artikel hat die Bemühung das Problem möglichst genau zu behandeln.'''&lt;br /&gt;
=== Reibungen ===&lt;br /&gt;
== Haftreibung ==&lt;br /&gt;
Die Reibung die Auftritt wenn der Roboter steht. Der Roboter muss über die Motoren diese Kraft aufwenden um loszufahren. Sie berechnet sich aus:&lt;br /&gt;
&amp;lt;math&amp;gt;F=fh*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
F: Kraft in N&lt;br /&gt;
fh: Reibungskoeffizient (Haftreibung)&lt;br /&gt;
m: Masse des Roboters in Kg&lt;br /&gt;
g: Ortsfaktor (10N/kg bzw. 10m/(sec^2))&lt;br /&gt;
'' Die Koeffizienten sind unter den Weblinks verlinkt. ''&lt;br /&gt;
== Gleitreibung ==&lt;br /&gt;
Wird beim Roboter eigentlich nicht benötigt da dieser nicht gleiten sollte. Jedoch will ich diese hier kurz anschneiden.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fg*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
fg: Reibungskoeffizient (Gleitreibung)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rollreibung ==&lt;br /&gt;
Wie der Name schon sagt tritt diese Kraft beim Fahren auf. Diese errechnet sich folgendermaßen.&lt;br /&gt;
&amp;lt;math&amp;gt;F=fr*m*g&amp;lt;/math&amp;gt;&lt;br /&gt;
fr: Reibungskoeffizient (Rollreibung)&lt;br /&gt;
&lt;br /&gt;
=== Anfahren ===&lt;br /&gt;
''' Folgt noch'''&lt;br /&gt;
=== Bergauf fahren ===&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
=== Luftwiderstand ===&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
=== Errechnung der Motorkraft ===&lt;br /&gt;
''' Folgt noch '''&lt;br /&gt;
=== Autoren ===&lt;br /&gt;
*--[[Benutzer:Overthere|Overthere]] 22:24, 1. Feb 2007 (CET)&lt;br /&gt;
=== Weblinks ==&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Haftreibung| Haftreibung]]&lt;br /&gt;
*'' Koeffizienten für Gleitreibugng werden noch gesucht ''&lt;br /&gt;
*[[http://de.wikipedia.org/wiki/Rollreibung| Rollreibung]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10051</id>
		<title>Kleinsignalverstärker</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10051"/>
				<updated>2007-01-23T07:43:28Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltung für einen Ultraschallsignal-Verstärker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkung von Signalen.'''&lt;br /&gt;
&lt;br /&gt;
Analoge Signale, wie sie beim Messen mit Sensoren vorkommen, werden meistens mit Operationsverstärkerschaltungen verarbeitet, die das Signal nach Möglichkeit über einen großen Bereich linear umsetzen. In speziellen Fällen wie beim Ultraschallempfänger, bei dem ein 40kHz-Signal verstärkt werden soll, kommt es aber auch vor, dass die Wirkungsweise einer Transistorschaltung äußerst zweckmäßig ist. Eine solche Verstärkerstufe mit einem Transistor, bei der die Verstärkung einstellbar ist, wird hier behandelt. Die Arbeitspunktgrößen beispielsweise für Spannung und Widerstand werden mit großen Buchstaben (U, R) benannt und die Signalgrößen mit kleinen Buchstaben (u, r).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operationsverstärker:'''Bei der Operationsverstärkerschaltung links gilt U2 / U1 = -R2 / R1. Bei der Transistorschaltung in der Mitte gilt für relativ kleine AC-Signale in gewisser Näherung das gleiche u2 / u1 = -r2 / r1. &lt;br /&gt;
&lt;br /&gt;
'''Transistorenverstärker:'''&lt;br /&gt;
Bei einer hohen Stromverstärkung ß &amp;gt;= 300 ist der Kollektorstrom etwa genauso groß wie der Emitterstrom und durch die Widerstände R1 und R2 fließt der gleiche Strom. Da sich die Spannung an Ub und GND nicht ändert, sind die Änderungen an R1 und R2 proportional der Widerstände und unterschiedlich gerichtet. &lt;br /&gt;
&lt;br /&gt;
Soweit besteht auch noch kein Unterschied zwischen R und r. Für R1 ist bei genauerer Betrachtung  der Widerstand der Basis Emitter Diode mit zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zur genaueren Betrachtung wird auf eine Schaltung ohne den Widerstand R1 übergegangen, die Schaltung rechts. Auch hier steigt der Emitterstrom bei einem Anstieg der Basisspannung nicht beliebig steil an. Der Emitterstrom ist durch die Diodengleichung ([[#Weblinks|siehe WikiPedia unter Weblinks]]) beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_e = I_s * ( e^{\frac{U1}{n*u_t}}- 1 )&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
mit ut = 26mV und n = 1...2&lt;br /&gt;
&lt;br /&gt;
Der differenzielle Widerstand r1 ist n * ut / Ie. Bei n = 1,2 ist n * ut = 30mV. &lt;br /&gt;
&lt;br /&gt;
Der Stromanstieg  pro Spannungsanstieg an der Basis-Emitter-Diode wird auch die Steilheit S des Transistors genannt, der differenzielle Widerstand r1 ist damit 1/S.  &lt;br /&gt;
&lt;br /&gt;
Damit gilt r1 = 1 / S = 30mV / Ie. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommt dann noch der Widerstand zwischen Emitter und GND, der hier aber weggelassen wurde. Man erhält damit einen Verstärker, dessen Verstärkung über den Emitterstrom steuerbar ist. &lt;br /&gt;
&lt;br /&gt;
Die Verstärkung ist u2 / u1:&lt;br /&gt;
&lt;br /&gt;
v = -R2 * Ie / 30mV&lt;br /&gt;
&lt;br /&gt;
Für R2 = 3kOhm gilt damit:&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 10 µA ) = -1&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 100µA) = -10&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 1 mA ) = -100&lt;br /&gt;
&lt;br /&gt;
Bei R2 = 3kOhm kommt es damit schon zu einer deutlichen Arbeitspunktverschiebung und die Kollektorspannung wird je nach Versorgungsspannung bald zu gering. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Schmalbandverstärker'''&lt;br /&gt;
&lt;br /&gt;
Für Wechselspannungssignale geht es aber weiter. Ein Parallelschwingkreis hat einen kleinen Widerstand für Gleichstrom und einen relativ hohen Widerstand für Wechselstrom. &lt;br /&gt;
&lt;br /&gt;
Der Gleichstromwiderstand ist etwa der Widerstand der Spule. Der Betrag des Wechselstromwiderstands ist relativ leicht in guter Näherung zu berechnen. Es sind die drei Leitwerte 1/R2, 1/jwL und -jwC zu addieren. &lt;br /&gt;
&lt;br /&gt;
Für den Leitwert ergibt das zusammen 1/R2 + j( 1/wl – wC ) mit dem Betrag &lt;br /&gt;
&amp;lt;math&amp;gt;\sqrt{\left( \frac{1}{R_2} \right)^2 + \left( \frac{1}{wL}- wC \right)^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Betrag des Widerstandes über der Frequenz ist im Bild aufgetragen, für die Widerstandswerte von R2 = 1,0k 1,5k 2,2k (grau)  3,3k 4,7k 6,8k (rot) 10k 15k 22k (blau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit L = 4,7mH und C = 3,3nF ergibt sich eine Resonanzfrequenz von 40,4kHz und ein Betrag des Widerstands der etwa so groß ist wie der Parallelwiderstand R2. Bis zu einem Grenzwert der durch die Spulengüte gegeben ist der etwa bei 30-50 liegt und den Widerstand auf  30-50kOhm begrenzt. &lt;br /&gt;
Damit lässt sich dann bei 1mA Emitterstrom mit dem Widerstand im Emitterzweig von 1/S = 30Ohm eine Verstärkung von  v =  –1000 erreichen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frequenzabgleich'''&lt;br /&gt;
&lt;br /&gt;
Bei einer hohen Güte erkennt man die Empfindlichkeit des Resonanzkreises gegen Toleranzen der Bauelemente. Eine Abweichung von 10 Prozent führt im Beispiel schon zu einem Abfall der Verstärkung um den Faktor 4 (oberste blaue Kurve). &lt;br /&gt;
&lt;br /&gt;
Bei Nutzung der hohen Verstärkung ist deshalb eine Abgleichmöglichkeit von Vorteil. &lt;br /&gt;
Den Kondensator kann man nicht abstimmen, doch die Spule ist als offener Zylinderkern ausgeführt und lässt damit einen Abgleich bei gleichzeitiger Verbesserung der Güte zu. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild3.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die radialen Zylinderspulen gestatten (ähnlich wie die axialen Zylinderspulen) bei paarweisem Einsatz einen Abstimmbereich von etwa dem 2-fachen Wert (keine oder geringe Kopplung) bis zum 3-fachen Wert (relativ enge Kopplung).  &lt;br /&gt;
&lt;br /&gt;
Eine Induktivität von 4,7mH kann damit aus 2 Induktivitäten von 1,8mH zusammengesetzt werden, die einen Abstimmbereich von 3,6mH bis 5,4mH haben. &lt;br /&gt;
Zusammen mit einer Kapazität von 3,3nF ergibt sich ein Abstimmbereich von 36kHz bis 44kHz. Sie sind hierfür nicht zu kurz einzubauen und nach dem Abgleich mit etwas Heisskleber zu fixieren.&lt;br /&gt;
&lt;br /&gt;
Manfred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Operationsverstärker]]&lt;br /&gt;
* [[Ultraschall Interface]] &lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://de.wikipedia.org/wiki/Diode&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10050</id>
		<title>Kleinsignalverstärker</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10050"/>
				<updated>2007-01-23T07:43:11Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltung für einen Ultraschallsignal-Verstärker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkung von Signalen.'''&lt;br /&gt;
&lt;br /&gt;
Analoge Signale, wie sie beim Messen mit Sensoren vorkommen, werden meistens mit Operationsverstärkerschaltungen verarbeitet, die das Signal nach Möglichkeit über einen großen Bereich linear umsetzen. In speziellen Fällen wie beim Ultraschallempfänger, bei dem ein 40kHz-Signal verstärkt werden soll, kommt es aber auch vor, dass die Wirkungsweise einer Transistorschaltung äußerst zweckmäßig ist. Eine solche Verstärkerstufe mit einem Transistor, bei der die Verstärkung einstellbar ist, wird hier behandelt. Die Arbeitspunktgrößen beispielsweise für Spannung und Widerstand werden mit großen Buchstaben (U, R) benannt und die Signalgrößen mit kleinen Buchstaben (u, r).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkungsfaktor'''&lt;br /&gt;
'''Operationsverstärker:'''Bei der Operationsverstärkerschaltung links gilt U2 / U1 = -R2 / R1. Bei der Transistorschaltung in der Mitte gilt für relativ kleine AC-Signale in gewisser Näherung das gleiche u2 / u1 = -r2 / r1. &lt;br /&gt;
&lt;br /&gt;
'''Transistorenverstärker:'''&lt;br /&gt;
Bei einer hohen Stromverstärkung ß &amp;gt;= 300 ist der Kollektorstrom etwa genauso groß wie der Emitterstrom und durch die Widerstände R1 und R2 fließt der gleiche Strom. Da sich die Spannung an Ub und GND nicht ändert, sind die Änderungen an R1 und R2 proportional der Widerstände und unterschiedlich gerichtet. &lt;br /&gt;
&lt;br /&gt;
Soweit besteht auch noch kein Unterschied zwischen R und r. Für R1 ist bei genauerer Betrachtung  der Widerstand der Basis Emitter Diode mit zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zur genaueren Betrachtung wird auf eine Schaltung ohne den Widerstand R1 übergegangen, die Schaltung rechts. Auch hier steigt der Emitterstrom bei einem Anstieg der Basisspannung nicht beliebig steil an. Der Emitterstrom ist durch die Diodengleichung ([[#Weblinks|siehe WikiPedia unter Weblinks]]) beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_e = I_s * ( e^{\frac{U1}{n*u_t}}- 1 )&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
mit ut = 26mV und n = 1...2&lt;br /&gt;
&lt;br /&gt;
Der differenzielle Widerstand r1 ist n * ut / Ie. Bei n = 1,2 ist n * ut = 30mV. &lt;br /&gt;
&lt;br /&gt;
Der Stromanstieg  pro Spannungsanstieg an der Basis-Emitter-Diode wird auch die Steilheit S des Transistors genannt, der differenzielle Widerstand r1 ist damit 1/S.  &lt;br /&gt;
&lt;br /&gt;
Damit gilt r1 = 1 / S = 30mV / Ie. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommt dann noch der Widerstand zwischen Emitter und GND, der hier aber weggelassen wurde. Man erhält damit einen Verstärker, dessen Verstärkung über den Emitterstrom steuerbar ist. &lt;br /&gt;
&lt;br /&gt;
Die Verstärkung ist u2 / u1:&lt;br /&gt;
&lt;br /&gt;
v = -R2 * Ie / 30mV&lt;br /&gt;
&lt;br /&gt;
Für R2 = 3kOhm gilt damit:&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 10 µA ) = -1&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 100µA) = -10&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 1 mA ) = -100&lt;br /&gt;
&lt;br /&gt;
Bei R2 = 3kOhm kommt es damit schon zu einer deutlichen Arbeitspunktverschiebung und die Kollektorspannung wird je nach Versorgungsspannung bald zu gering. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Schmalbandverstärker'''&lt;br /&gt;
&lt;br /&gt;
Für Wechselspannungssignale geht es aber weiter. Ein Parallelschwingkreis hat einen kleinen Widerstand für Gleichstrom und einen relativ hohen Widerstand für Wechselstrom. &lt;br /&gt;
&lt;br /&gt;
Der Gleichstromwiderstand ist etwa der Widerstand der Spule. Der Betrag des Wechselstromwiderstands ist relativ leicht in guter Näherung zu berechnen. Es sind die drei Leitwerte 1/R2, 1/jwL und -jwC zu addieren. &lt;br /&gt;
&lt;br /&gt;
Für den Leitwert ergibt das zusammen 1/R2 + j( 1/wl – wC ) mit dem Betrag &lt;br /&gt;
&amp;lt;math&amp;gt;\sqrt{\left( \frac{1}{R_2} \right)^2 + \left( \frac{1}{wL}- wC \right)^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Betrag des Widerstandes über der Frequenz ist im Bild aufgetragen, für die Widerstandswerte von R2 = 1,0k 1,5k 2,2k (grau)  3,3k 4,7k 6,8k (rot) 10k 15k 22k (blau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit L = 4,7mH und C = 3,3nF ergibt sich eine Resonanzfrequenz von 40,4kHz und ein Betrag des Widerstands der etwa so groß ist wie der Parallelwiderstand R2. Bis zu einem Grenzwert der durch die Spulengüte gegeben ist der etwa bei 30-50 liegt und den Widerstand auf  30-50kOhm begrenzt. &lt;br /&gt;
Damit lässt sich dann bei 1mA Emitterstrom mit dem Widerstand im Emitterzweig von 1/S = 30Ohm eine Verstärkung von  v =  –1000 erreichen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frequenzabgleich'''&lt;br /&gt;
&lt;br /&gt;
Bei einer hohen Güte erkennt man die Empfindlichkeit des Resonanzkreises gegen Toleranzen der Bauelemente. Eine Abweichung von 10 Prozent führt im Beispiel schon zu einem Abfall der Verstärkung um den Faktor 4 (oberste blaue Kurve). &lt;br /&gt;
&lt;br /&gt;
Bei Nutzung der hohen Verstärkung ist deshalb eine Abgleichmöglichkeit von Vorteil. &lt;br /&gt;
Den Kondensator kann man nicht abstimmen, doch die Spule ist als offener Zylinderkern ausgeführt und lässt damit einen Abgleich bei gleichzeitiger Verbesserung der Güte zu. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild3.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die radialen Zylinderspulen gestatten (ähnlich wie die axialen Zylinderspulen) bei paarweisem Einsatz einen Abstimmbereich von etwa dem 2-fachen Wert (keine oder geringe Kopplung) bis zum 3-fachen Wert (relativ enge Kopplung).  &lt;br /&gt;
&lt;br /&gt;
Eine Induktivität von 4,7mH kann damit aus 2 Induktivitäten von 1,8mH zusammengesetzt werden, die einen Abstimmbereich von 3,6mH bis 5,4mH haben. &lt;br /&gt;
Zusammen mit einer Kapazität von 3,3nF ergibt sich ein Abstimmbereich von 36kHz bis 44kHz. Sie sind hierfür nicht zu kurz einzubauen und nach dem Abgleich mit etwas Heisskleber zu fixieren.&lt;br /&gt;
&lt;br /&gt;
Manfred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Operationsverstärker]]&lt;br /&gt;
* [[Ultraschall Interface]] &lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://de.wikipedia.org/wiki/Diode&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10049</id>
		<title>Kleinsignalverstärker</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10049"/>
				<updated>2007-01-23T07:42:47Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltung für einen Ultraschallsignal-Verstärker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkung von Signalen.'''&lt;br /&gt;
&lt;br /&gt;
Analoge Signale, wie sie beim Messen mit Sensoren vorkommen, werden meistens mit Operationsverstärkerschaltungen verarbeitet, die das Signal nach Möglichkeit über einen großen Bereich linear umsetzen. In speziellen Fällen wie beim Ultraschallempfänger, bei dem ein 40kHz-Signal verstärkt werden soll, kommt es aber auch vor, dass die Wirkungsweise einer Transistorschaltung äußerst zweckmäßig ist. Eine solche Verstärkerstufe mit einem Transistor, bei der die Verstärkung einstellbar ist, wird hier behandelt. Die Arbeitspunktgrößen beispielsweise für Spannung und Widerstand werden mit großen Buchstaben (U, R) benannt und die Signalgrößen mit kleinen Buchstaben (u, r).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkungsfaktor'''&lt;br /&gt;
&lt;br /&gt;
'''Operationsverstärker:'''&lt;br /&gt;
&lt;br /&gt;
Bei der Operationsverstärkerschaltung links gilt U2 / U1 = -R2 / R1. Bei der Transistorschaltung in der Mitte gilt für relativ kleine AC-Signale in gewisser Näherung das gleiche u2 / u1 = -r2 / r1. &lt;br /&gt;
&lt;br /&gt;
'''Transistorenverstärker:'''&lt;br /&gt;
Bei einer hohen Stromverstärkung ß &amp;gt;= 300 ist der Kollektorstrom etwa genauso groß wie der Emitterstrom und durch die Widerstände R1 und R2 fließt der gleiche Strom. Da sich die Spannung an Ub und GND nicht ändert, sind die Änderungen an R1 und R2 proportional der Widerstände und unterschiedlich gerichtet. &lt;br /&gt;
&lt;br /&gt;
Soweit besteht auch noch kein Unterschied zwischen R und r. Für R1 ist bei genauerer Betrachtung  der Widerstand der Basis Emitter Diode mit zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zur genaueren Betrachtung wird auf eine Schaltung ohne den Widerstand R1 übergegangen, die Schaltung rechts. Auch hier steigt der Emitterstrom bei einem Anstieg der Basisspannung nicht beliebig steil an. Der Emitterstrom ist durch die Diodengleichung ([[#Weblinks|siehe WikiPedia unter Weblinks]]) beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_e = I_s * ( e^{\frac{U1}{n*u_t}}- 1 )&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
mit ut = 26mV und n = 1...2&lt;br /&gt;
&lt;br /&gt;
Der differenzielle Widerstand r1 ist n * ut / Ie. Bei n = 1,2 ist n * ut = 30mV. &lt;br /&gt;
&lt;br /&gt;
Der Stromanstieg  pro Spannungsanstieg an der Basis-Emitter-Diode wird auch die Steilheit S des Transistors genannt, der differenzielle Widerstand r1 ist damit 1/S.  &lt;br /&gt;
&lt;br /&gt;
Damit gilt r1 = 1 / S = 30mV / Ie. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommt dann noch der Widerstand zwischen Emitter und GND, der hier aber weggelassen wurde. Man erhält damit einen Verstärker, dessen Verstärkung über den Emitterstrom steuerbar ist. &lt;br /&gt;
&lt;br /&gt;
Die Verstärkung ist u2 / u1:&lt;br /&gt;
&lt;br /&gt;
v = -R2 * Ie / 30mV&lt;br /&gt;
&lt;br /&gt;
Für R2 = 3kOhm gilt damit:&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 10 µA ) = -1&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 100µA) = -10&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 1 mA ) = -100&lt;br /&gt;
&lt;br /&gt;
Bei R2 = 3kOhm kommt es damit schon zu einer deutlichen Arbeitspunktverschiebung und die Kollektorspannung wird je nach Versorgungsspannung bald zu gering. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Schmalbandverstärker'''&lt;br /&gt;
&lt;br /&gt;
Für Wechselspannungssignale geht es aber weiter. Ein Parallelschwingkreis hat einen kleinen Widerstand für Gleichstrom und einen relativ hohen Widerstand für Wechselstrom. &lt;br /&gt;
&lt;br /&gt;
Der Gleichstromwiderstand ist etwa der Widerstand der Spule. Der Betrag des Wechselstromwiderstands ist relativ leicht in guter Näherung zu berechnen. Es sind die drei Leitwerte 1/R2, 1/jwL und -jwC zu addieren. &lt;br /&gt;
&lt;br /&gt;
Für den Leitwert ergibt das zusammen 1/R2 + j( 1/wl – wC ) mit dem Betrag &lt;br /&gt;
&amp;lt;math&amp;gt;\sqrt{\left( \frac{1}{R_2} \right)^2 + \left( \frac{1}{wL}- wC \right)^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Betrag des Widerstandes über der Frequenz ist im Bild aufgetragen, für die Widerstandswerte von R2 = 1,0k 1,5k 2,2k (grau)  3,3k 4,7k 6,8k (rot) 10k 15k 22k (blau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit L = 4,7mH und C = 3,3nF ergibt sich eine Resonanzfrequenz von 40,4kHz und ein Betrag des Widerstands der etwa so groß ist wie der Parallelwiderstand R2. Bis zu einem Grenzwert der durch die Spulengüte gegeben ist der etwa bei 30-50 liegt und den Widerstand auf  30-50kOhm begrenzt. &lt;br /&gt;
Damit lässt sich dann bei 1mA Emitterstrom mit dem Widerstand im Emitterzweig von 1/S = 30Ohm eine Verstärkung von  v =  –1000 erreichen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frequenzabgleich'''&lt;br /&gt;
&lt;br /&gt;
Bei einer hohen Güte erkennt man die Empfindlichkeit des Resonanzkreises gegen Toleranzen der Bauelemente. Eine Abweichung von 10 Prozent führt im Beispiel schon zu einem Abfall der Verstärkung um den Faktor 4 (oberste blaue Kurve). &lt;br /&gt;
&lt;br /&gt;
Bei Nutzung der hohen Verstärkung ist deshalb eine Abgleichmöglichkeit von Vorteil. &lt;br /&gt;
Den Kondensator kann man nicht abstimmen, doch die Spule ist als offener Zylinderkern ausgeführt und lässt damit einen Abgleich bei gleichzeitiger Verbesserung der Güte zu. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild3.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die radialen Zylinderspulen gestatten (ähnlich wie die axialen Zylinderspulen) bei paarweisem Einsatz einen Abstimmbereich von etwa dem 2-fachen Wert (keine oder geringe Kopplung) bis zum 3-fachen Wert (relativ enge Kopplung).  &lt;br /&gt;
&lt;br /&gt;
Eine Induktivität von 4,7mH kann damit aus 2 Induktivitäten von 1,8mH zusammengesetzt werden, die einen Abstimmbereich von 3,6mH bis 5,4mH haben. &lt;br /&gt;
Zusammen mit einer Kapazität von 3,3nF ergibt sich ein Abstimmbereich von 36kHz bis 44kHz. Sie sind hierfür nicht zu kurz einzubauen und nach dem Abgleich mit etwas Heisskleber zu fixieren.&lt;br /&gt;
&lt;br /&gt;
Manfred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Operationsverstärker]]&lt;br /&gt;
* [[Ultraschall Interface]] &lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://de.wikipedia.org/wiki/Diode&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10048</id>
		<title>Kleinsignalverstärker</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10048"/>
				<updated>2007-01-23T07:42:14Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltung für einen Ultraschallsignal-Verstärker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkung von Signalen.'''&lt;br /&gt;
&lt;br /&gt;
Analoge Signale, wie sie beim Messen mit Sensoren vorkommen, werden meistens mit Operationsverstärkerschaltungen verarbeitet, die das Signal nach Möglichkeit über einen großen Bereich linear umsetzen. In speziellen Fällen wie beim Ultraschallempfänger, bei dem ein 40kHz-Signal verstärkt werden soll, kommt es aber auch vor, dass die Wirkungsweise einer Transistorschaltung äußerst zweckmäßig ist. Eine solche Verstärkerstufe mit einem Transistor, bei der die Verstärkung einstellbar ist, wird hier behandelt. Die Arbeitspunktgrößen beispielsweise für Spannung und Widerstand werden mit großen Buchstaben (U, R) benannt und die Signalgrößen mit kleinen Buchstaben (u, r).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkungsfaktor'''&lt;br /&gt;
&lt;br /&gt;
''Operationsverstärker''&lt;br /&gt;
Bei der Operationsverstärkerschaltung links gilt U2 / U1 = -R2 / R1. Bei der Transistorschaltung in der Mitte gilt für relativ kleine AC-Signale in gewisser Näherung das gleiche u2 / u1 = -r2 / r1. &lt;br /&gt;
&lt;br /&gt;
''Transistorenverstärker''&lt;br /&gt;
Bei einer hohen Stromverstärkung ß &amp;gt;= 300 ist der Kollektorstrom etwa genauso groß wie der Emitterstrom und durch die Widerstände R1 und R2 fließt der gleiche Strom. Da sich die Spannung an Ub und GND nicht ändert, sind die Änderungen an R1 und R2 proportional der Widerstände und unterschiedlich gerichtet. &lt;br /&gt;
&lt;br /&gt;
Soweit besteht auch noch kein Unterschied zwischen R und r. Für R1 ist bei genauerer Betrachtung  der Widerstand der Basis Emitter Diode mit zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zur genaueren Betrachtung wird auf eine Schaltung ohne den Widerstand R1 übergegangen, die Schaltung rechts. Auch hier steigt der Emitterstrom bei einem Anstieg der Basisspannung nicht beliebig steil an. Der Emitterstrom ist durch die Diodengleichung ([[#Weblinks|siehe WikiPedia unter Weblinks]]) beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_e = I_s * ( e^{\frac{U1}{n*u_t}}- 1 )&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
mit ut = 26mV und n = 1...2&lt;br /&gt;
&lt;br /&gt;
Der differenzielle Widerstand r1 ist n * ut / Ie. Bei n = 1,2 ist n * ut = 30mV. &lt;br /&gt;
&lt;br /&gt;
Der Stromanstieg  pro Spannungsanstieg an der Basis-Emitter-Diode wird auch die Steilheit S des Transistors genannt, der differenzielle Widerstand r1 ist damit 1/S.  &lt;br /&gt;
&lt;br /&gt;
Damit gilt r1 = 1 / S = 30mV / Ie. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommt dann noch der Widerstand zwischen Emitter und GND, der hier aber weggelassen wurde. Man erhält damit einen Verstärker, dessen Verstärkung über den Emitterstrom steuerbar ist. &lt;br /&gt;
&lt;br /&gt;
Die Verstärkung ist u2 / u1:&lt;br /&gt;
&lt;br /&gt;
v = -R2 * Ie / 30mV&lt;br /&gt;
&lt;br /&gt;
Für R2 = 3kOhm gilt damit:&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 10 µA ) = -1&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 100µA) = -10&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 1 mA ) = -100&lt;br /&gt;
&lt;br /&gt;
Bei R2 = 3kOhm kommt es damit schon zu einer deutlichen Arbeitspunktverschiebung und die Kollektorspannung wird je nach Versorgungsspannung bald zu gering. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Schmalbandverstärker'''&lt;br /&gt;
&lt;br /&gt;
Für Wechselspannungssignale geht es aber weiter. Ein Parallelschwingkreis hat einen kleinen Widerstand für Gleichstrom und einen relativ hohen Widerstand für Wechselstrom. &lt;br /&gt;
&lt;br /&gt;
Der Gleichstromwiderstand ist etwa der Widerstand der Spule. Der Betrag des Wechselstromwiderstands ist relativ leicht in guter Näherung zu berechnen. Es sind die drei Leitwerte 1/R2, 1/jwL und -jwC zu addieren. &lt;br /&gt;
&lt;br /&gt;
Für den Leitwert ergibt das zusammen 1/R2 + j( 1/wl – wC ) mit dem Betrag &lt;br /&gt;
&amp;lt;math&amp;gt;\sqrt{\left( \frac{1}{R_2} \right)^2 + \left( \frac{1}{wL}- wC \right)^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Betrag des Widerstandes über der Frequenz ist im Bild aufgetragen, für die Widerstandswerte von R2 = 1,0k 1,5k 2,2k (grau)  3,3k 4,7k 6,8k (rot) 10k 15k 22k (blau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit L = 4,7mH und C = 3,3nF ergibt sich eine Resonanzfrequenz von 40,4kHz und ein Betrag des Widerstands der etwa so groß ist wie der Parallelwiderstand R2. Bis zu einem Grenzwert der durch die Spulengüte gegeben ist der etwa bei 30-50 liegt und den Widerstand auf  30-50kOhm begrenzt. &lt;br /&gt;
Damit lässt sich dann bei 1mA Emitterstrom mit dem Widerstand im Emitterzweig von 1/S = 30Ohm eine Verstärkung von  v =  –1000 erreichen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frequenzabgleich'''&lt;br /&gt;
&lt;br /&gt;
Bei einer hohen Güte erkennt man die Empfindlichkeit des Resonanzkreises gegen Toleranzen der Bauelemente. Eine Abweichung von 10 Prozent führt im Beispiel schon zu einem Abfall der Verstärkung um den Faktor 4 (oberste blaue Kurve). &lt;br /&gt;
&lt;br /&gt;
Bei Nutzung der hohen Verstärkung ist deshalb eine Abgleichmöglichkeit von Vorteil. &lt;br /&gt;
Den Kondensator kann man nicht abstimmen, doch die Spule ist als offener Zylinderkern ausgeführt und lässt damit einen Abgleich bei gleichzeitiger Verbesserung der Güte zu. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild3.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die radialen Zylinderspulen gestatten (ähnlich wie die axialen Zylinderspulen) bei paarweisem Einsatz einen Abstimmbereich von etwa dem 2-fachen Wert (keine oder geringe Kopplung) bis zum 3-fachen Wert (relativ enge Kopplung).  &lt;br /&gt;
&lt;br /&gt;
Eine Induktivität von 4,7mH kann damit aus 2 Induktivitäten von 1,8mH zusammengesetzt werden, die einen Abstimmbereich von 3,6mH bis 5,4mH haben. &lt;br /&gt;
Zusammen mit einer Kapazität von 3,3nF ergibt sich ein Abstimmbereich von 36kHz bis 44kHz. Sie sind hierfür nicht zu kurz einzubauen und nach dem Abgleich mit etwas Heisskleber zu fixieren.&lt;br /&gt;
&lt;br /&gt;
Manfred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Operationsverstärker]]&lt;br /&gt;
* [[Ultraschall Interface]] &lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://de.wikipedia.org/wiki/Diode&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10047</id>
		<title>Kleinsignalverstärker</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Kleinsignalverst%C3%A4rker&amp;diff=10047"/>
				<updated>2007-01-23T07:41:33Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltung für einen Ultraschallsignal-Verstärker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkung von Signalen.'''&lt;br /&gt;
&lt;br /&gt;
Analoge Signale, wie sie beim Messen mit Sensoren vorkommen, werden meistens mit Operationsverstärkerschaltungen verarbeitet, die das Signal nach Möglichkeit über einen großen Bereich linear umsetzen. In speziellen Fällen wie beim Ultraschallempfänger, bei dem ein 40kHz-Signal verstärkt werden soll, kommt es aber auch vor, dass die Wirkungsweise einer Transistorschaltung äußerst zweckmäßig ist. Eine solche Verstärkerstufe mit einem Transistor, bei der die Verstärkung einstellbar ist, wird hier behandelt. Die Arbeitspunktgrößen beispielsweise für Spannung und Widerstand werden mit großen Buchstaben (U, R) benannt und die Signalgrößen mit kleinen Buchstaben (u, r).&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Verstärkungsfaktor'''&lt;br /&gt;
'Operationsverstärker'&lt;br /&gt;
Bei der Operationsverstärkerschaltung links gilt U2 / U1 = -R2 / R1. Bei der Transistorschaltung in der Mitte gilt für relativ kleine AC-Signale in gewisser Näherung das gleiche u2 / u1 = -r2 / r1. &lt;br /&gt;
&lt;br /&gt;
'Transistorenverstärker'&lt;br /&gt;
Bei einer hohen Stromverstärkung ß &amp;gt;= 300 ist der Kollektorstrom etwa genauso groß wie der Emitterstrom und durch die Widerstände R1 und R2 fließt der gleiche Strom. Da sich die Spannung an Ub und GND nicht ändert, sind die Änderungen an R1 und R2 proportional der Widerstände und unterschiedlich gerichtet. &lt;br /&gt;
&lt;br /&gt;
Soweit besteht auch noch kein Unterschied zwischen R und r. Für R1 ist bei genauerer Betrachtung  der Widerstand der Basis Emitter Diode mit zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zur genaueren Betrachtung wird auf eine Schaltung ohne den Widerstand R1 übergegangen, die Schaltung rechts. Auch hier steigt der Emitterstrom bei einem Anstieg der Basisspannung nicht beliebig steil an. Der Emitterstrom ist durch die Diodengleichung ([[#Weblinks|siehe WikiPedia unter Weblinks]]) beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_e = I_s * ( e^{\frac{U1}{n*u_t}}- 1 )&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
mit ut = 26mV und n = 1...2&lt;br /&gt;
&lt;br /&gt;
Der differenzielle Widerstand r1 ist n * ut / Ie. Bei n = 1,2 ist n * ut = 30mV. &lt;br /&gt;
&lt;br /&gt;
Der Stromanstieg  pro Spannungsanstieg an der Basis-Emitter-Diode wird auch die Steilheit S des Transistors genannt, der differenzielle Widerstand r1 ist damit 1/S.  &lt;br /&gt;
&lt;br /&gt;
Damit gilt r1 = 1 / S = 30mV / Ie. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommt dann noch der Widerstand zwischen Emitter und GND, der hier aber weggelassen wurde. Man erhält damit einen Verstärker, dessen Verstärkung über den Emitterstrom steuerbar ist. &lt;br /&gt;
&lt;br /&gt;
Die Verstärkung ist u2 / u1:&lt;br /&gt;
&lt;br /&gt;
v = -R2 * Ie / 30mV&lt;br /&gt;
&lt;br /&gt;
Für R2 = 3kOhm gilt damit:&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 10 µA ) = -1&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 100µA) = -10&lt;br /&gt;
&lt;br /&gt;
v ( Ie = 1 mA ) = -100&lt;br /&gt;
&lt;br /&gt;
Bei R2 = 3kOhm kommt es damit schon zu einer deutlichen Arbeitspunktverschiebung und die Kollektorspannung wird je nach Versorgungsspannung bald zu gering. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Schmalbandverstärker'''&lt;br /&gt;
&lt;br /&gt;
Für Wechselspannungssignale geht es aber weiter. Ein Parallelschwingkreis hat einen kleinen Widerstand für Gleichstrom und einen relativ hohen Widerstand für Wechselstrom. &lt;br /&gt;
&lt;br /&gt;
Der Gleichstromwiderstand ist etwa der Widerstand der Spule. Der Betrag des Wechselstromwiderstands ist relativ leicht in guter Näherung zu berechnen. Es sind die drei Leitwerte 1/R2, 1/jwL und -jwC zu addieren. &lt;br /&gt;
&lt;br /&gt;
Für den Leitwert ergibt das zusammen 1/R2 + j( 1/wl – wC ) mit dem Betrag &lt;br /&gt;
&amp;lt;math&amp;gt;\sqrt{\left( \frac{1}{R_2} \right)^2 + \left( \frac{1}{wL}- wC \right)^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Betrag des Widerstandes über der Frequenz ist im Bild aufgetragen, für die Widerstandswerte von R2 = 1,0k 1,5k 2,2k (grau)  3,3k 4,7k 6,8k (rot) 10k 15k 22k (blau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit L = 4,7mH und C = 3,3nF ergibt sich eine Resonanzfrequenz von 40,4kHz und ein Betrag des Widerstands der etwa so groß ist wie der Parallelwiderstand R2. Bis zu einem Grenzwert der durch die Spulengüte gegeben ist der etwa bei 30-50 liegt und den Widerstand auf  30-50kOhm begrenzt. &lt;br /&gt;
Damit lässt sich dann bei 1mA Emitterstrom mit dem Widerstand im Emitterzweig von 1/S = 30Ohm eine Verstärkung von  v =  –1000 erreichen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Frequenzabgleich'''&lt;br /&gt;
&lt;br /&gt;
Bei einer hohen Güte erkennt man die Empfindlichkeit des Resonanzkreises gegen Toleranzen der Bauelemente. Eine Abweichung von 10 Prozent führt im Beispiel schon zu einem Abfall der Verstärkung um den Faktor 4 (oberste blaue Kurve). &lt;br /&gt;
&lt;br /&gt;
Bei Nutzung der hohen Verstärkung ist deshalb eine Abgleichmöglichkeit von Vorteil. &lt;br /&gt;
Den Kondensator kann man nicht abstimmen, doch die Spule ist als offener Zylinderkern ausgeführt und lässt damit einen Abgleich bei gleichzeitiger Verbesserung der Güte zu. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Kleinsignalverst%C3%A4rker_Bild3.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die radialen Zylinderspulen gestatten (ähnlich wie die axialen Zylinderspulen) bei paarweisem Einsatz einen Abstimmbereich von etwa dem 2-fachen Wert (keine oder geringe Kopplung) bis zum 3-fachen Wert (relativ enge Kopplung).  &lt;br /&gt;
&lt;br /&gt;
Eine Induktivität von 4,7mH kann damit aus 2 Induktivitäten von 1,8mH zusammengesetzt werden, die einen Abstimmbereich von 3,6mH bis 5,4mH haben. &lt;br /&gt;
Zusammen mit einer Kapazität von 3,3nF ergibt sich ein Abstimmbereich von 36kHz bis 44kHz. Sie sind hierfür nicht zu kurz einzubauen und nach dem Abgleich mit etwas Heisskleber zu fixieren.&lt;br /&gt;
&lt;br /&gt;
Manfred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[Operationsverstärker]]&lt;br /&gt;
* [[Ultraschall Interface]] &lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* http://de.wikipedia.org/wiki/Diode&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Elektronik]]&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=9960</id>
		<title>Linuxdistribution Avr-live-cd DISCONTINUED</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Linuxdistribution_Avr-live-cd_DISCONTINUED&amp;diff=9960"/>
				<updated>2007-01-07T10:24:38Z</updated>
		
		<summary type="html">&lt;p&gt;Overthere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Avr-live-CD hat die Zielsetzung, ein komfortables und kostenloses Betriebsystem bereitstellen, das &lt;br /&gt;
möglichst viele Funktionen für das Programmieren von [[AVR]]s zur Verfügung stellt. &lt;br /&gt;
[[Bild:Avrlivecd_screen1.png|thumb|Desktop]]&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
[[Bild:Avrlivecd_screen2.png|thumb|Kontrollerlab]]&lt;br /&gt;
Die Avr-live-CD basiert auf Slax. Slax basiert auf der Linuxdistribution Slackware und hieß Ursprünglich &amp;quot;Linux Live CD&amp;quot;. &lt;br /&gt;
Für das Compilieren des Quelltextes wird [[avr-gcc]] verwendet. Der Binärcode in Hex-Form wird mittels avrdude auf den AVR geladen. Kontrollerlab wird als Interface und Programmierumgebung genutzt. &lt;br /&gt;
&lt;br /&gt;
Diese CD bietet dem Nutzer somit eine kostenlose Softwarelösung, die auf fast jedem PC lauffähig ist. Es werden durch avrdude und avr-gcc viele Programmierkabel, AVRs und Programmiersprachen untersützt. Eine komfortable Bedienung vereinfacht das Entwickeln. Bald wird auch ein Simulator folgen. Diese CD ist nicht nur für Linuxprofis geeignet, sondern wurde auf eine einfache Bedienung ausgelegt. Es sind die schnelleren, aber umständlicheren Konsolenprogramme vorhanden, jedoch lassen sich alle Entwicklungsaufgaben auch über grafische Benutzeroberflächen erledigen. Die CD wurde speziell für diese Aufgaben entwickelt und hat die benötigten Anwendungen schon vorinstalliert.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Um die Avr-live-CD zu verwenden, entpacke man das RAR-Verzeichnis und brenne die ISO Datei. &lt;br /&gt;
Der Computer wird nun neu gestartet, dann ruft man das Bios auf. Hier muss man die Bootreihenfolge&lt;br /&gt;
ändern. Die CD muss hierbei von höherer Priorität sein als die Harddisk. Nach einem Neustart des Computers started die Avr-Live-CD.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Benutzung/Eigenarten ===&lt;br /&gt;
Im Moment ist es nötig in das Verzeichnis, in der sich der Quelltext befindet, eine Datei zu kopieren. Diese Datei heist &amp;quot;crt[avrtyp].o&amp;quot;. Diese Dateien sind unter &amp;quot;Avrlibs&amp;quot; auf dem Destop verlinkt. In der nächsten Version wird verucht diese Eigenart zu beheben.&lt;br /&gt;
&lt;br /&gt;
== Relases ==&lt;br /&gt;
=== Alpha (relased) ===&lt;br /&gt;
Die AvrLiveCD hatte mitte Dezember 2006 das 1. Relase. Erhaten sind die Grundlegenden AVR-Tools wie [[avr-gcc]] und [[avrdude]].&lt;br /&gt;
=== Betha (scheduled)===&lt;br /&gt;
Das nächste Relase der AvrLiveCD wird mitte Januar 2007 erwarted. Geplant sind hier KiCad sowie die 0.8 Version von Kontrollerlab einzubinden. Ebenfalls wird warscheinlich ein EEPROM-Programmer vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
== Feedback ==&lt;br /&gt;
Hier werden alle Feedbacks über die AvrLiveCD gelistet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Außerdem wollt ich Dir noch zu Deinem großartigen Projekt gratulieren. Ich denke, dass &lt;br /&gt;
speziell viele Windows-Leute genau auf sowas gewartet haben, und dass sie dann damit&lt;br /&gt;
vielleicht auch in die Linux-Community gelockt werden.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 7. Jan. 2007&lt;br /&gt;
== Mitarbeit ==&lt;br /&gt;
Jeder kann bei der Avr-live-CD mitarbeiten. Jeder kann die Versionen nach belieben modifizieren, verändern, etc. Nun nurnoch hochladen und hier publizieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch|Diesen Artikel bitte noch erweitern. Dabei eventuell die Installation und eine Benutzertutorial erstellen.}}&lt;br /&gt;
&lt;br /&gt;
== Autoren ==&lt;br /&gt;
--[[Benutzer:Overthere|Overthere]] 08:12, 15. Dez 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
* [[AVR]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
* [http://www.slax.org Slax]&lt;br /&gt;
* [http://www.cadmaniac.org Kontrollerlab] &lt;br /&gt;
* [http://www.roboternetz.de/phpBB2/viewtopic.php?t=25912 Forumbeitrag]&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] &lt;br /&gt;
* [http://www.xfuture-media.de Xfuture-Media(Hoster der Avr-Live-CD)]&lt;br /&gt;
&lt;br /&gt;
=== Sponsoring ===&lt;br /&gt;
Die Avr-live-CD [http://www.xfuture-media.de Xfuture-Media] hat sich bereiterklärt die Avr-Live-CD zu hosten. Herzlichen Dank!&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ Avr-Live-CD] Version auswählen und .rar Datei downloaden.  ''Achtung 256 MegaByte''&lt;br /&gt;
* [http://livecd.ff-aulendorf.de/avr.rar Mirror1]&lt;br /&gt;
Alternativ, wenn man schon Slax hat:&lt;br /&gt;
* [http://avrlivecd.xfuture-server.de/ AvrLiveCD-Slaxmodule(21 Mb) (Qt-Lib noch notwendig)]&lt;br /&gt;
* Version auswählen und .mo Datei downloaden.&lt;br /&gt;
* [http://www.slax.org/modules.php?category=libraries&amp;amp;id=1422&amp;amp;name=Qt+Libraries Qt-Lib]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Microcontroller]]&lt;/div&gt;</summary>
		<author><name>Overthere</name></author>	</entry>

	</feed>