<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mikrocontroller Archive | ET-Tutorials.de</title>
	<atom:link href="https://et-tutorials.de/category/mikrocontroller/feed/" rel="self" type="application/rss+xml" />
	<link>https://et-tutorials.de/category/mikrocontroller/</link>
	<description></description>
	<lastBuildDate>Fri, 16 Jul 2021 14:41:01 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.8</generator>

<image>
	<url>https://et-tutorials.de/wp-content/uploads/2019/07/Video2.png</url>
	<title>Mikrocontroller Archive | ET-Tutorials.de</title>
	<link>https://et-tutorials.de/category/mikrocontroller/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bedingte Anweisungen mit switch–case</title>
		<link>https://et-tutorials.de/1511/bedingte-anweisungen-mit-switch%e2%80%93case/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 30 Jul 2020 09:10:55 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1511</guid>

					<description><![CDATA[<p>In der letzten Folge habe ich Abfragen mit „if“ und „else if“ vorgestellt. Es gibt jedoch Fälle, in denen eine if-Abfrage eher ungünstig ist. Manchmal kann eine Variable nämlich potentiell viele unterschiedliche Werte haben. Diese unterschiedlichen Werte müsste man jeweils in einzelnen if-Abfragen auswerten. Diese Auswertung der Variablen kann dann sehr aufwändig werden. Oft sind [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1511/bedingte-anweisungen-mit-switch%e2%80%93case/">Bedingte Anweisungen mit switch–case</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--> In der letzten Folge habe ich Abfragen mit <a href="https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/">„if“ und „else if“</a> vorgestellt.</p>
<p>Es gibt jedoch Fälle, in denen eine if-Abfrage eher ungünstig ist.</p>
<p>Manchmal kann eine Variable nämlich potentiell viele unterschiedliche Werte haben.<br />
Diese unterschiedlichen Werte müsste man jeweils in einzelnen if-Abfragen auswerten.</p>
<p>Diese Auswertung der Variablen kann dann sehr aufwändig werden. Oft sind lange und geschachtelte if-/ else if- Abfragen die Folge.</p>
<p>Effektiver und deutlich lesbarer ist häufig eine Alternative, die ich heute vorstellen möchte.<br />
Mit einer <strong>switch-case-Abfrage</strong> lassen sich solche Abfragen manchmal eleganter lösen.</p>
<p>Mit switch-case ist es möglich, sehr übersichtlich &#8211; abhängig vom aktuellen Wert der Variablen- unterschiedliche Anweisungen ausführen.</p>
<p>In der heutigen Folge möchte ich die Abfrage mit switch–case vorstellen:</p>
<p>Viel Spaß mit dem Video.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1511/bedingte-anweisungen-mit-switch%e2%80%93case/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FfjQ1VlRPAk0%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1511/bedingte-anweisungen-mit-switch%e2%80%93case/">Bedingte Anweisungen mit switch–case</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Arduino Lernen &#8211; Arduino Überblick</title>
		<link>https://et-tutorials.de/6603/arduino-lernen-arduino-uberblick/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 15 Oct 2012 12:29:17 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=6603</guid>

					<description><![CDATA[<p>Der Einstieg in die Entwicklung von Mikrocontrolleranwendungen ist in den letzten Jahren sehr vereinfacht worden. Ein sehr bekanntes und verbreitetes System für einen leichten Einstieg in die Mikrocontroller-Programmierung ist das System von Arduino . In einer Gast-Artikelreihe wird das Arduino-System und die Erstellung eigener Applikationen vorgestellt. Dies ist die erste Folge der Gast-Reihe Arduino Lernen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/6603/arduino-lernen-arduino-uberblick/">Arduino Lernen &#8211; Arduino Überblick</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://ssl-vg03.met.vgwort.de/na/05e6a31f05cc4e7794cc7785fd36bda7" width="1" height="1" alt="">Der Einstieg in die Entwicklung von Mikrocontrolleranwendungen ist in den letzten Jahren sehr vereinfacht worden.</p>
<p>Ein sehr bekanntes und verbreitetes System für einen leichten Einstieg in die Mikrocontroller-Programmierung ist das System von <a href="https://www.amazon.de/gp/product/B00719T7BG/ref=as_li_tf_tl?ie=UTF8&#038;camp=1638&#038;creative=6742&#038;creativeASIN=B00719T7BG&#038;linkCode=as2&#038;tag=ettut-21">Arduino</a><img loading="lazy" decoding="async" src="https://www.assoc-amazon.de/e/ir?t=ettut-21&#038;l=as2&#038;o=3&#038;a=B00719T7BG" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />
.</p>
<p>In einer Gast-Artikelreihe wird das Arduino-System und die Erstellung eigener Applikationen vorgestellt.<br />
Dies ist die erste Folge der Gast-Reihe Arduino Lernen von fritzing.org hier bei ET-Tutorials.de.</p>
<p>In dieser Folge geht es zunächst einmal um die Vorstellung des  verwendeten Arduino-Boards. </p>
<p>Im Gegensatz zu selbsterstellten Mikrocontroller-Platinen wird mit dem verwendeten Arduino-Board eine komplette Entwicklungsumgebung zur Verfügung gestellt.</p>
<p>Das fertige Arduino-Board ermöglicht es, sehr einfach den auf dem Board eingebauten  Mikrocontroller in eigenen Projekten zu verwenden.</p>
<p>Zur Kommunikation mit dem PC wird das Arduino-Board über eine USB-Schnittstelle an den PC angeschlossen.</p>
<p>So können die auf dem PC entwickelten Programme sehr leicht auf das Board geladen werden.</p>
<p>Um das Board auch ohne PC, quasi als Embedded System, betreiben zu können, verfügt das Board über eine zusätzliche Stromversorgung. So ist der Anschluss eines PCs beim Betrieb des Boards nicht zwingend notwendig.</p>
<p>Zudem ermöglicht die zusätzliche Stromversorgung den Betrieb weiterer Hardware am Arduino-Board, bei der die Stromversorgung über die einfache USB-Schnittstelle nicht ausreichen würde.</p>
<p>Die Kommunikation mit der Außenwelt kann über die digitalen In&#038;Out Pins realisiert werden. Zudem verfügt das Board auch über analoge Input Pins.<br />
Eingangssignale für das Board müssen also nicht nur in digitaler Form darliegen. Auch analoge Werte können eingelesen und vom Arduino-Board verarbeitet werden.</p>
<h2>Das Video zum Arduino-Board</h2>
<p>Jetzt aber zum Video, in dem das Arduino-Board vorgestellt wird.</p>
<a href="https://et-tutorials.de/6603/arduino-lernen-arduino-uberblick/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FanzB5HcGSao%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<br />
<!--wpads#Unter_Video--><br />
<br />
Dieser Artikel ist Teil der Gastartikel-Reihe von Fritzing.org zum Thema Arduino.<br />
Unter folgendem Amazon-Link findest Du weitere Informationen zum verwendeten <a href="https://www.amazon.de/gp/product/B00719T7BG/ref=as_li_tf_tl?ie=UTF8&#038;camp=1638&#038;creative=6742&#038;creativeASIN=B00719T7BG&#038;linkCode=as2&#038;tag=ettut-21" target="_blank" rel="noopener">Arduino-Board.</a><img loading="lazy" decoding="async" src="https://www.assoc-amazon.de/e/ir?t=ettut-21&#038;l=as2&#038;o=3&#038;a=B00719T7BG" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />
<br />
Unter folgendem Link findest Du einen Überblick über die <a href="https://et-tutorials.de/Mikrocontroller/Arduino">bereits erschienenen Artikel der Arduino-Reihe</a></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/6603/arduino-lernen-arduino-uberblick/">Arduino Lernen &#8211; Arduino Überblick</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Raspberry Pi</title>
		<link>https://et-tutorials.de/6264/raspberry-pi/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 13 Aug 2012 14:29:18 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=6264</guid>

					<description><![CDATA[<p>Die Raspberry Pi Foundation hat mit dem Einplatinen-Computer Raspberry Pi einen kreditkartengroßen PC entwickelt. Die Raspberry Pi Foundation ist eine Stiftung. Das Ziel dieser Stiftung ist, das Studium und die Ausbildung der Informatik und verwandter Themen zu fördern. Wichtig ist der hohe Spaßfaktor beim Erlernen der Computergrundlagen und der Programmierung. Mit dem Raspberry Pi sollen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/6264/raspberry-pi/">Raspberry Pi</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/045add5712114c7cb24d390eca277703" width="1" height="1" alt="">Die Raspberry Pi Foundation hat mit dem Einplatinen-Computer Raspberry Pi einen kreditkartengroßen PC entwickelt.</p>
<p>Die Raspberry Pi Foundation ist eine Stiftung. Das Ziel dieser Stiftung ist, das Studium und die Ausbildung der Informatik und verwandter Themen zu fördern. </p>
<p>Wichtig ist der hohe Spaßfaktor beim Erlernen der Computergrundlagen und der Programmierung.<br />
Mit dem Raspberry Pi sollen Schulen, Universitäten und Privatpersonen ein sehr kostengünstiger Rechner zur Verfügung gestellt werden mit dem man die Programmierung und die Handhabung von Rechnern erlernen kann.</p>
<h2> Versionen vom Raspberry Pi</h2>
<p>Es gibt zwei Versionen vom Raspberry Pi auf dem Markt, Version A und Version B.</p>
<p>Vor allem in der Netzwerkfunktionalität unterscheiden sich die beiden Versionen.<br />
Während Version A einen USB 2.0 Anschluss hat, verfügt Version B über zwei USB-Anschlüsse und zusätzlich über einen 10/100 MBit Ethernet-Controller.<br />
Ansonsten gibt es noch einen Klinke-Audio-Anschluss, einen Composite-Ausgang mit einem RGB-Signal und einen digitalen HDMI-Anschluss. Das Betriebssystem kann man per SD-Karte einstecken. Für die Stromversorgung nimmt man einen der USB-Anschlüsse.<br />
<br />
Zusätzlich benötigt man ein HDMI-Kabel für den Monitor (und natürlich einen Monitor selbst), eine SD-Karte, eine Tastatur, eine Maus. Das war’s <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>… und los geht’s.</p>
<p>Im Gast-Video von <a href="https://homofaciens.de" target="_blank" rel="noopener">homofaciens</a> wird das Gesamtsystem einmal vorgeführt.</p>
<p>In diesem Video wird die Platine auch auf ihren Stromverbrauch hin untersucht. </p>
<p>Beim Booten lag die Stromstärke gerade einmal bei I=400mA. Bei 5 V Spannung sind das gerade einmal 2W. </p>
<p>Bei diesem geringen Stromverbrauch ist der Einsatz des Raspberry PI auch als Embedded Sysztem interessant.</p>
<p>Wie jedes ordentliche Linux lässt sich auch hier eine graphische Oberfläche verwenden.</p>
<p>Bei bunten Bildchen geht natürlich der Stromverbrauch in die Höhe.</p>
<h2>Das Video zum Raspberry Pi</h2>
<p>Im Video werden einige interessante Anwendungen gezeigt.</p>
<p>Bevor ich das aber hier schreibe, guck einfach ins Video.</p>
<p>Ich bin begeistert. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;"><a href="https://et-tutorials.de/6264/raspberry-pi/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FS7FWIxvGpJU%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br />
</div>
<p><!--wpads#Unter_Video--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/6264/raspberry-pi/">Raspberry Pi</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programmierung der Pulsweitenmodulation</title>
		<link>https://et-tutorials.de/4789/programmierung-der-pulsweitenmodulation/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Fri, 07 Oct 2011 10:03:08 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4789</guid>

					<description><![CDATA[<p>Heute geht es um die Programmierung der Pulsweitenmodulation in C. Mit Hilfe des Programmablaufplans ist das nun ganz einfach. Nach der Definition der Variablen muss nur noch der Programmablaufplan Schritt für Schritt in den C-Code übersetzt werden. Wichtig, und eine beliebte Fehlerquelle, ist die richtige Wahl des Variablentyps. Die Variablen &#8222;slot&#8220; und &#8222;temp&#8220; sollen jeweils [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4789/programmierung-der-pulsweitenmodulation/">Programmierung der Pulsweitenmodulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--> Heute geht es um die Programmierung der Pulsweitenmodulation in C.</p>
<p>Mit Hilfe des Programmablaufplans ist das nun ganz einfach.</p>
<p>Nach der Definition der Variablen muss nur noch der Programmablaufplan Schritt für Schritt in den C-Code übersetzt werden.</p>
<p>Wichtig, und eine beliebte Fehlerquelle, ist die richtige Wahl des Variablentyps.<br />
Die Variablen &#8222;slot&#8220; und &#8222;temp&#8220; sollen jeweils Werte von 0 bis 255 abspeichern können.<br />
Wie benötigen also 8 bit, d.h. 1 Byte. Die Variablen müssen aber vorzeichenlos sein, damit bis 255 gezählt werden kann.</p>
<p>Also: unsigned char slot, temp;</p>
<p>Anschließend muss, wie gesagt, der Programmablauf in das C-Programm übersetzt werden.</p>
<p>Im heutigen Video zeige ich diesen Vorgang.</p>
<a href="https://et-tutorials.de/4789/programmierung-der-pulsweitenmodulation/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FHe81vgwDMSA%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<!--wpads#Unter_Video--></p>
<p>Weil der Mikrocontroller das Programm sehr schnell abarbeitet, sieht man in Realzeit nur, ob das Programm qualitativ funktioniert. Bei temp = 0 bleibt die Heizung ausgeschaltet, bei temp = 255 ist die Heizung eingeschaltet und bei Werten dazwischen wechselt der Zustand des Portpins für die Heizung.</p>
<p>In der nächsten Folge nutzen wir den Debugger von µVision und lassen das Programm einmal langsam, Schritt für Schritt ablaufen und beobachten dabei den Zustand der Variablen, Register und Portpins.</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4789/programmierung-der-pulsweitenmodulation/">Programmierung der Pulsweitenmodulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ein Programmablaufplan für die Pulsweitenmodulation</title>
		<link>https://et-tutorials.de/4768/ein-programmablaufplan-fur-die-pulsweitenmodulation/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Wed, 05 Oct 2011 15:19:29 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4768</guid>

					<description><![CDATA[<p>Im heutigen Artikel soll die Pulsweitenmodulation mit Hilfe eines Programmablaufplans realisiert werden. Und zwar in Zusammenhang mit der Programmierung des Timers. Der Timer soll jeweils nach 1 ms ablaufen. Da der Mikrocontroller mit 12 MHz getaktet ist, die Timer-Register also jede µs (Mikrosekunde)inkrementiert werden, müssen wir bis 1.000 zählen bis 1 ms vergangen ist. Da [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4768/ein-programmablaufplan-fur-die-pulsweitenmodulation/">Ein Programmablaufplan für die Pulsweitenmodulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/0a3436565c0040b78bb607cc5dc9378c" alt="" width="1" height="1" />Im heutigen Artikel soll die <a href="https://et-tutorials.de/4741/pwm-pulsweitenmodulation/" target="_blank" rel="noopener">Pulsweitenmodulation</a> mit Hilfe eines Programmablaufplans realisiert werden.</p>
<p>Und zwar in Zusammenhang mit der Programmierung des Timers.</p>
<p>Der Timer soll jeweils nach 1 ms ablaufen. Da der Mikrocontroller mit 12 MHz getaktet ist, die Timer-Register also jede µs (Mikrosekunde)inkrementiert werden, müssen wir bis 1.000 zählen bis 1 ms vergangen ist.</p>
<p>Da wir dafür TH0 und TL0 benötigen, mit einem Byte kann man ja nur bis 255 zählen, wählen wir nicht den <a href="https://et-tutorials.de/4696/timer-interrupts-8-bit-auto-reload/" target="_blank" rel="noopener">auto-reload Modus</a>, sondern wählen den Modus 1, bei dem wir beide Timerregister für das Zählen zur Verfügung haben.</p>
<p>Berechnung der Initialisierungswerte für die Register TH0 und TL0:<br />
Da wir bei 65536 einen Überlauf haben, müssen wir bei dezimal 64536 starten. Hexadezimal ist das FC18. Das bedeutet TH0=0xFC und TL0=0x18.</p>
<p>In dem Video zeige ich noch einmal die Berechnung und die Programmierung der Registerwerte.</p>
<h2>Planung des Programms mit Hilfe eines Programmablaufplans, PAP</h2>
<p>In der Interrupt Service Routine des Timers soll nun die Pulsweitenmodulation realisiert werden.</p>
<p>Da die Realisierung des Programms nicht ganz trivial ist, ist die Planung des Programms zu empfehlen.<br />
Für diese Planung gibt es verschiedene Möglichkeiten. Neben Struktogrammen hat sich in der Programmierung der sogenannte Programmablaufplan als zweckmäßig erwiesen.</p>
<p>In einem Programmablaufplan plant man das Programm zunächst einmal unabhängig von der Sprachsyntax und schreibt den Ablauf der Programms mit all seinen Verzweigungen zunächst einmal z.B. auf einem Blatt Papier auf.</p>
<p>Hierdurch bekommt man eine gute Vorstellung vom Ablauf des Programms. Ein Programmablaufplan ist hierbei einfacher zu lesen und zu erstellen als das benötigte C-Programm.</p>
<p>In einem zweiten Schritt schreibt man dann mit Hilfe des Programmablaufplans sein C-Programm. Diese Umsetzung geht einem dann in den meisten Fällen sehr leicht von der Hand.</p>
<p>Wie man einen Programmablaufplan erstellen kann, zeige ich im folgenden Video.</p>
<a href="https://et-tutorials.de/4768/ein-programmablaufplan-fur-die-pulsweitenmodulation/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F6jMHfdX5gmQ%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<!--wpads#Unter_Video--></p>
<h2>Deine Aufgabe</h2>
<p>Wenn ich Du wäre <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> , würde ich mir jetzt, nachdem Du das Video gesehen hast, ein Blatt Papier nehmen und versuchen, den Programmablaufplan einmal selbständig zu erstellen – ohne noch einmal in das Video zu spicken.</p>
<p>Anschließend kannst Du µVision aufrufen und die Interrupt Service Routine erstellen.</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4768/ein-programmablaufplan-fur-die-pulsweitenmodulation/">Ein Programmablaufplan für die Pulsweitenmodulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PWM &#8211; Pulsweitenmodulation</title>
		<link>https://et-tutorials.de/4741/pwm-pulsweitenmodulation/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 27 Sep 2011 15:56:06 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4741</guid>

					<description><![CDATA[<p>Heute geht es wieder um die Programmierung unseres Kaffeeautomaten. Und zwar nutzen wir den Mechanismus der Pulsweitenmodulation, abgekürzt PWM, um die Wassertemperatur in der Anlage über eine Heizung gewünscht einzustellen. Mit Hilfe der PWM können elektrische Verbraucher, die relativ langsam auf Änderungen reagieren, wie beispielsweise Heizwiderstände, aber auch beispielsweise elektrische Motoren, mit Hilfe von digitalen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4741/pwm-pulsweitenmodulation/">PWM &#8211; Pulsweitenmodulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/c9cf5f2bce3849ee9d4d71104abeb421" width="1" height="1" alt=""> Heute geht es wieder um die Programmierung unseres Kaffeeautomaten. </p>
<p>Und zwar nutzen wir den Mechanismus der <strong>Pulsweitenmodulation</strong>, abgekürzt <strong>PWM</strong>, um die Wassertemperatur in der Anlage über eine Heizung gewünscht einzustellen.  </p>
<p>Mit Hilfe der PWM können elektrische Verbraucher, die relativ langsam auf Änderungen reagieren, wie beispielsweise Heizwiderstände, aber auch beispielsweise elektrische Motoren, mit Hilfe von digitalen Signalen gesteuert werden.</p>
<p>Der „Trick“ dabei ist, dass man die Stromstärke durch den Verbraucher nicht analog auf  den gewünschten Wert einstellt. Mit Hilfe der PWM wird der Verbraucher sehr schnell ein- und wieder ausgeschaltet.</p>
<p>Über das Verhältnis zwischen Einschalt- und Ausschaltzeit kann so die zugeführte Leistung eingestellt werden.<br />
</p>
<h2>Ein Beispiel</h2>
<p>
Wenn die Leistung des Heizwiderstandes auf die „halbe Leistung“ eingestellt werden soll, schaltet man die Heizung abwechselnd zu jeweils gleichen Zeiten ein- und wieder aus.</p>
<p>Soll die Leistung auf 80% der Maximalleitung eingestellt werden, schaltet man die Heizung 4 Zeiteinheiten ein und dann 1 Zeiteinheit aus. So wird die Heizung zu 80% der Zeit mit voller Leistung betrieben, 20% der Zeit ist sie ausgeschaltet. Im Mittel setzt die Heizung so 80% der größtmöglichen Leistung um.</p>
<h2>Das Video zur PWM-Pulsweitenmodulation</h2>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;"><a href="https://et-tutorials.de/4741/pwm-pulsweitenmodulation/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FFmG8BzLehx8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br />
</div>
<p><!--wpads#Unter_Video--></p>
<h2>Deine Aufgabe zur nächsten Woche </h2>
<p>Für die Wasserzubereitung soll über eine PWM-gesteuerte Heizung das Wasser auf die gewünschte Temperatur gebracht werden.</p>
<p>Die gewünschte Leistung kann über den Port P0 eingestellt werden. <br />
P1=0x00 bedeutet also: die Heizung ist ausgeschaltet.</p>
<p>P1=0xFF bedeutet: die Heizung ist eingeschaltet und setzt die maximal mögliche Leistung um</p>
<p>Da der Port P0 8 Bit hat, kann die Leistung der Heizung also in 255 Stufen eingestellt werden.<br />
</p>
<h2>Ein möglicher Ansatz zur Lösung die PWM</h2>
<p>Möglich wäre beispielsweise einen Timer zu programmieren, der jede 1ms einen Interrupt auslöst. <br />
Das gesamte Zeitintervall könnte man dann auf 255 ms setzen. Der Wert in P0 bestimmt dann, in wie vielen Zeitschlitzen von jeweils 1 ms der Portpin 1.0 auf 1 gesetzt werden müsste. In den übrigen Zeitschlitzen müsste der Portpin P1.0 dann  auf 0 gesetzt werden.</p>
<p>Viel Spaß bei der Umsetzung und bis zum nächsten Mal.<br />
Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4741/pwm-pulsweitenmodulation/">PWM &#8211; Pulsweitenmodulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Timer Interrupts 8 bit auto reload</title>
		<link>https://et-tutorials.de/4696/timer-interrupts-8-bit-auto-reload/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 19 Sep 2011 10:41:51 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4696</guid>

					<description><![CDATA[<p>In dieser Folge geht es um den Mode 2 des Timer Interrupts, den 8 bit auto-reload Modus. Im Gegensatz zum Mode 1, der ja die Register TH0 und TL0 als 16-Bit Zähler verwendet, wird im auto-reload Mode nur das Register TL0 als Zähler verwendet. Im nun freigewordene Register TH0 wird der gewünschte Startpunkt des Zählers [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4696/timer-interrupts-8-bit-auto-reload/">Timer Interrupts 8 bit auto reload</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->In dieser Folge geht es um den Mode 2 des Timer Interrupts, den 8 bit auto-reload Modus.</p>
<p>Im Gegensatz zum <a href="https://et-tutorials.de/4464/programmieren-des-timer-interrupts/" target="_blank" rel="noopener">Mode 1, der ja die Register TH0 und TL0 als 16-Bit Zähler verwendet</a>, wird im auto-reload Mode nur das Register TL0 als Zähler verwendet.</p>
<p>Im nun freigewordene Register TH0 wird der gewünschte Startpunkt des Zählers festgelegt.<br />
So muss nur einmal das Register initialisiert werden. Nach jedem Überlauf des Registers TL0 startet also nicht nur die Interrupt Service Routine des Timers.<br />
Die Mikrocontroller-Hardware kopiert zudem automatisch den Wert des Registers TH0 in das Register TL0. Der Zähler wird also automatisch wieder initialisiert und kann sofort ohne Zeitverzögerung weiterlaufen.</p>
<p>Wie das Ganze im System funktioniert, zeige ich im heutigen Video.</p>
<a href="https://et-tutorials.de/4696/timer-interrupts-8-bit-auto-reload/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FJoSMJFTZNPo%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<!--wpads#Unter_Video--></p>
<p>Viel Spaß und bis zur nächsten Folge, in der es wieder eine Aufgabe zum Thema Interrupts gibt.</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4696/timer-interrupts-8-bit-auto-reload/">Timer Interrupts 8 bit auto reload</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Timer Interrupt Lösung der Aufgabe</title>
		<link>https://et-tutorials.de/4628/timer-interrupt-losung-der-aufgabe/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 08 Sep 2011 07:27:21 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4628</guid>

					<description><![CDATA[<p>Am Ende der vergangen Folge, in der es um die Programmierung eines Timer Interrupts ging, hatte ich die Aufgabe gestellt, eine Interrupt Service Routine zu erstellen, die den Port P0 genau alle 10 Sekunden inkrementiert. Die Aufgabe sollte so gelöst werden, dass die Interrupt Service Routine des Timers 0 alle 10 ms aufgerufen wird. Bei [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4628/timer-interrupt-losung-der-aufgabe/">Timer Interrupt Lösung der Aufgabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/90784b3223114747b1cf5a17cbeba942" alt="" width="1" height="1" />Am Ende der vergangen Folge, in der es um die Programmierung eines Timer Interrupts ging, hatte ich die Aufgabe gestellt, eine Interrupt Service Routine zu erstellen, die den Port P0 genau alle 10 Sekunden inkrementiert.</p>
<p>Die Aufgabe sollte so gelöst werden, dass die Interrupt Service Routine des Timers 0 alle 10 ms aufgerufen wird.</p>
<p>Bei jedem 1.000 Durchlauf der Interrupt Service Routine sollte dann der Port inkrementiert werden.</p>
<p>1000 x 10ms = 10s</p>
<p>Zunächst müssen also die SFR-Register TH0 und TL0 bestimmt werden, um eine Zeit von 10ms zu realisieren. Im Video rechne ich die Prozedur einmal vor.</p>
<h2>Die Berechnung der Timer-Werte für TH0 und TL0</h2>
<p>Damit Du die Werte besser mit Deinen Werten vergleichen kannst, gebe ich die Rechnung hier noch einmal kurz an.</p>
<p>Der Mikrocontroller wird mit 12 MHz getaktet. Durch den Teiler von 12 wird TL0 also jede µs inkrementiert.</p>
<p>10 ms entsprechen 10.000 Inkrementierungen, denn 10.000 x 1µs = 10 ms</p>
<p>Da die beiden Bytes bei 0xFF, dezimal also 65536 überlaufen, muss der Timerstand dezimal auf</p>
<p>65536-10000 =55536</p>
<p>gesetzt werden.</p>
<p>55536 dezimal entspricht D8F0 hexadezimal</p>
<p>Damit ergeben sich folgende Werte:</p>
<p>TH0 = 0xD8;<br />
TL0 = 0xF0</p>
<p>Soweit zur Theorie <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h2>Video zur Programmierung des Timers</h2>
<p>Im Video zeige ich die Programmierung der Interrupt Service Routine. Wichtig hierbei ist, die Werte für TH0 und TL0 in der Interrupt Service Routine noch einmal zu setzen, weil die Zähler ansonsten beim aktuellen Stand, also TH0 = 0x00 und TL0=0x00 loslaufen würden, statt bei TH0 = 0xD8 und TL0 = 0xF0.<br />
Zudem darf natürlich nicht vergessen werden mit</p>
<ul>
<li>EAL = 1; Interrupts generell freizugeben</li>
<li>ET0 = 1; den Interrupt für den Timer 0 freizugeben</li>
<li>TR0 = 1; den Timer zu starten</li>
</ul>
<p>Viel Spaß beim Video und bis zum nächsten Mal. Dann geht es um das auto-reload, bei dem der Timerstartwert „automatisch“ gesetzt wird.</p>
<a href="https://et-tutorials.de/4628/timer-interrupt-losung-der-aufgabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FZFNlFsA0DBY%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4628/timer-interrupt-losung-der-aufgabe/">Timer Interrupt Lösung der Aufgabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programmieren des Timer Interrupts</title>
		<link>https://et-tutorials.de/4464/programmieren-des-timer-interrupts/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 01 Sep 2011 08:50:21 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4464</guid>

					<description><![CDATA[<p>Heute geht es wieder ans Eingemachte. Mit einer schönen Aufgabe zum Schluss. Wann wird ein Timer Interrupt denn nun aufgerufen, bzw. wie stellst Du ein, dass der Timer Interrupt genau dann ausgelöst wird, wann Du es möchtest? Um diese Fragen geht es heute. Die Zeit, bis ein Timer ausgelaufen ist, ist zunächst einmal abhängig von [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4464/programmieren-des-timer-interrupts/">Programmieren des Timer Interrupts</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/d4ccb910403f444cbd85d965490cd8b6" alt="" width="1" height="1" />Heute geht es wieder ans Eingemachte. Mit einer schönen Aufgabe zum Schluss.<br />
Wann wird ein Timer Interrupt denn nun aufgerufen, bzw. wie stellst Du ein, dass der Timer Interrupt genau dann ausgelöst wird, wann Du es möchtest?</p>
<p>Um diese Fragen geht es heute.</p>
<p>Die Zeit, bis ein Timer ausgelaufen ist, ist zunächst einmal abhängig von der Taktfrequenz, mit der der Mikrocontroller betrieben wird. Von dieser Taktfrequenz ist abhängig, wie lange ein Maschinenzyklus dauert und die Dauer eines Maschinenzyklus bestimmt, wie schnell die Register TH0 und TL0 inkrementiert werden.<br />
Ein Machinenzyklus dauert 12 Taktzyklen und nach jedem Maschinenzyklus wird der Zähler um 1 inkrementiert.</p>
<p><strong>Ein Beispiel:</strong></p>
<p>Wir der Mikrocontroller mit 12 MHz getaktet, beträgt die Frequenz für die Maschinenzyklen<br />
12 Mhz : 12 = 1 MHz. Es gibt dann also 1 Million Maschinenzyklen pro Sekunde.<br />
Ein Maschinenzyklus dauert also 1 µs. Jede µs wird das Registerpaar TH0/TL0 also inkrementiert.</p>
<p>Im Video lasse ich den Initialwert von TH0 und TL0 auf 0. Wir benötigen also 2 hoch 16 = 65536 Inkrementierungen bis zum Überlauf.<br />
Die Interrupt Service Routine des Timers wird also jede 65536 x 1µs = 0,065536s aufgerufen.</p>
<h2>Die Programmierung dieses Timers im Video</h2>
<a href="https://et-tutorials.de/4464/programmieren-des-timer-interrupts/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FaCduSaVNFc0%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Deine Aufgabe</h2>
<p>Durch die Wahl der Werte von TH0 und TL0 kann man bestimmen, wie lange es vom Start des Timers bis zum Aufruf der Interrupt Service Routine dauert.<br />
Es soll nun ein Timer programmiert werden , der alle 10 ms aufgerufen wird und dann bei jedem 1000. Mal den Port P1 inkrementiert. Der Port P1 wird dann also genau alle 10s inkrementiert.</p>
<h2>Hinweis</h2>
<p>Berechne also zunächst einmal die Werte für TH0 und TL0, um einen Überlauf nach 10ms zu erreichen. Diese Werte musst Du in die Register TH0 und TL0 schreiben, bevor Du den Timer startest.<br />
Zudem musst Du die Werte in der Interrupt Service Routine wieder in die Register TH0 und TL0 schreiben, weil Du ja möchtest, dass der Zähler genau bei diesen Werten weiterzählt,um nach 10 ms den nächsten Überlauf zu erhalten.</p>
<p>Viel Spaß!</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4464/programmieren-des-timer-interrupts/">Programmieren des Timer Interrupts</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Timer Interrupt des 8051 Mikrocontrollers</title>
		<link>https://et-tutorials.de/4458/timer-interrupt-des-8051-mikrocontrollers/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 29 Aug 2011 08:00:20 +0000</pubDate>
				<category><![CDATA[Dies&Das]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4458</guid>

					<description><![CDATA[<p>Zu den wichtigsten Aufgaben eines Mikrocontrollers gehören Steuerungs-, Regelungs- und Messaufgaben. Sehr häufig müssen in diesen Aufgabenstellungen Zeiten sehr genau eingehalten werden, um zeitkritische Abläufe zu messen und zu steuern . Aus diesem Grund sind Mikrocontroller häufig mit mehreren Timern ausgestattet, die unabhängig voneinander programmiert werden können. Bei Ablauf eines Timers wird dann beispielsweise eine [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4458/timer-interrupt-des-8051-mikrocontrollers/">Timer Interrupt des 8051 Mikrocontrollers</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/45a2da1ef77f42d892348059234716c3" alt="" width="1" height="1" />Zu den wichtigsten Aufgaben eines Mikrocontrollers gehören Steuerungs-, Regelungs- und Messaufgaben.</p>
<p>Sehr häufig müssen in diesen Aufgabenstellungen Zeiten sehr genau eingehalten werden, um zeitkritische Abläufe zu messen und zu steuern .</p>
<p>Aus diesem Grund sind Mikrocontroller häufig mit mehreren <strong>Timern</strong> ausgestattet, die unabhängig voneinander programmiert werden können.</p>
<p>Bei Ablauf eines Timers wird dann beispielsweise eine Interrupt Service Routine aufgerufen, die so also genau zu dem gewünschten Zeitpunkt zuschlägt. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Heute geht es darum, wie die Timer eines 8051 Mikrocontrollers programmiert werden und welche Register man zur Programmierung benötigt.</p>
<h2>Konfiguration eines Timers</h2>
<p>Die Konfiguration eines Timer Interrupts ist etwas aufwändiger als beim externen Interrupt.<br />
Im ersten Video zeige ich also zunächst einmal die wichtigsten Register zur Konfiguration eines Timers.</p>
<a href="https://et-tutorials.de/4458/timer-interrupt-des-8051-mikrocontrollers/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FkR0P-9daZlI%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Im zweiten Video zeige ich dann die Konfiguration des Timers und die Programmierung der Interrupt Service Routine am Emulator.</p>
<a href="https://et-tutorials.de/4458/timer-interrupt-des-8051-mikrocontrollers/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fi7SBb5at9h8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Deine Aufgabe</h2>
<p>Heute gibt es keine spezielle Programmieraufgabe, in der Du eine bestimmte Aufgabe lösen sollst.</p>
<p>Du solltest Dich aber bis zur nächsten Folge mit dem Timer beschäftigen. So könntest Du beispielsweise das Beispiel nachprogrammieren, oder dieses Beispiel auf den Timer 1 übertragen.</p>
<p>Wichtig ist hierbei, dass Du die zu verwendenden Register kennenlernst. Also: Mit welchem Register gibt man den Timer frei, wie startet man einen Timer, wie schreibt man eine Interrupt Service Routine, usw.</p>
<p>Man muss die Befehle einmal selbst eingetippt haben, die Register einmal selbst gesetzt und gelöscht haben, um ein Gefühl dafür zu bekommen.</p>
<p>Also: Programmiere das Beispiel einmal nach und setze es anschließend für den Timer 1 um.</p>
<p>Die Priority Order für den Timer 1 ist übrigens 3.</p>
<p>Also: void ISR_Timer1(void) interrupt 3</p>
<p>{}</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4458/timer-interrupt-des-8051-mikrocontrollers/">Timer Interrupt des 8051 Mikrocontrollers</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Software Interrupts, Traps</title>
		<link>https://et-tutorials.de/4453/software-interrupts-traps/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 22 Aug 2011 07:31:59 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4453</guid>

					<description><![CDATA[<p>Wie bereits in der Übersicht zu externen Interrupts gezeigt, können Interrupts auch durch Software ausgelöst werden. Dies nennt man Software Interrupt, Trap oder Exception. Ein solcher Software Interrupt sollte in der Aufgabe aus der letzten Folge genutzt werden, um bei dem Eintreffen eines Signals für den Interrupt INT1 auch die Interrupt Service Routine für den [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4453/software-interrupts-traps/">Software Interrupts, Traps</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Wie bereits in der <a href="https://et-tutorials.de/4429/externe-interrupts-beim-8051/">Übersicht zu externen Interrupts</a> gezeigt, können Interrupts auch durch Software ausgelöst werden.</p>
<p>Dies nennt man Software Interrupt, Trap oder Exception.</p>
<p>Ein solcher Software Interrupt sollte in der Aufgabe aus der letzten Folge genutzt werden, um bei dem Eintreffen eines <a href="https://et-tutorials.de/4444/losung-der-aufgabe-zu-den-externen-interrupts">Signals für den Interrupt INT1 auch die Interrupt Service Routine für den Interrupt INT0</a> auszuführen.</p>
<p>Um Software Interrupts auszuführen nutzt man das Interrupt Pending Flag.</p>
<p>Es muss also lediglich das Interrupt Pending Flag IE0 in der Interrupt Service Routine für den Interrupt INT1 gesetzt werden.</p>
<p>Voilá</p>
<a href="https://et-tutorials.de/4453/software-interrupts-traps/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F_jiullJjEcg%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4453/software-interrupts-traps/">Software Interrupts, Traps</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lösung der Aufgabe zu den externen Interrupts</title>
		<link>https://et-tutorials.de/4444/losung-der-aufgabe-zu-den-externen-interrupts/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 16 Aug 2011 08:00:24 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4444</guid>

					<description><![CDATA[<p>Heute geht es nun um die Lösung aus dem Artikel der vergangenen Woche, in dem ich die Mechanismen des externen Interrupts des 8051 Mikrocontrollers vorgestellt habe. Zur Erinnerung. Die Aufgabe lautete: Bei der Kaffeemaschine können zwei Störungen auftreten, die jeweils einen Interrupt am Mikrocontroller auslösen. Diese beiden Fehlermeldungen sollen ausgewertet werden. Die Maschine muss (bei [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4444/losung-der-aufgabe-zu-den-externen-interrupts/">Lösung der Aufgabe zu den externen Interrupts</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Heute geht es nun um die Lösung aus dem Artikel der vergangenen Woche, in dem ich die Mechanismen des <a href="https://et-tutorials.de/4429/externe-interrupts-beim-8051/">externen Interrupts des 8051 Mikrocontrollers</a> vorgestellt habe.</p>
<p>Zur Erinnerung. Die Aufgabe lautete:</p>
<p>Bei der Kaffeemaschine können zwei Störungen auftreten, die jeweils einen Interrupt am Mikrocontroller auslösen.</p>
<p>Diese beiden Fehlermeldungen sollen ausgewertet werden.</p>
<ol>
<li>Die Maschine muss (bei Gelegenheit) entkalkt werden.<br />
Der Sensor, der eine zu hohe Verkalkung anzeigt, ist an INT0 angeschlossen und gibt als Meldung eine „0“ aus. Wenn der Sensor eine Verkalkung feststellt, soll an Portpin P0.0 eine &#8222;1&#8220; ausgegeben werden. Hierdurch wird ein Warnsummer eingeschaltet. Da diese Meldung nicht so kritisch ist, kann der Summer ausgeschaltet werden. Er soll nicht automatisch wieder eingeschaltet werden, auch wenn die Kaffeemaschine noch nicht entkalkt worden ist.</li>
<li>Der Druck der Maschine ist zu hoch. Der Sensor hierfür ist an INT1 angeschlossen und gibt als Meldung eine „0“ aus. Dieser Zustand ist kritisch. In der zugehörigen Interrupt Service Routine soll an Port P0.1 eine &#8222;1&#8220; ausgegeben werden. Hierdurch wird ein Alarm ausgelöst und die Kaffeemaschine heruntergefahren. Sollte jemand den Alam löschen, der Druck aber immer noch zu hoch sein, soll automatisch die ISR wieder aufgerufen werden.</li>
</ol>
<p>&nbsp;</p>
<h2>Flankengesteuerter Interrupt</h2>
<p>Für den ersten Fall sollte die Programmierung also so aussehen, dass die Fehlermeldung „weggedrückt“ werden kann. Obwohl der Fehler vom Sensor weiter gemeldet wird, sollten keine neuen Interrupts generiert werden. Die Lösung dafür ist, den Interrupt INT0 flankengesteuert zu konfigurieren, so dass die Interrupt Service Routine nur einmal, beim Auftreten des Fehlers, ausgelöst wird. Nur dann sehen wir die negative Flanke.</p>
<h2>Pegelgesteuerter Interrupt</h2>
<p>Im zweiten Fall soll der Alarm nicht abgeschaltet werden können. So lange der Druck zu groß ist, soll der Alarm wieder erneut eingeschaltet werden.</p>
<p>Das kann dadurch erreicht werden, indem der Interrupt pegelgesteuert realisiert wird. Das heißt, so lange die Fehlerbedingung anlegt, wird laufend die Interrupt Service Routine ausgeführt.</p>
<h2>Das Video</h2>
<a href="https://et-tutorials.de/4444/losung-der-aufgabe-zu-den-externen-interrupts/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FJrarrV2FXp8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Auch in dieser Woche gibt es wieder eine kleine Aufgabe. Du erinnerst Dich vielleicht noch an den Begriff der Interrupt Pending Flags aus der Folge <a href="https://et-tutorials.de/4429/externe-interrupts-beim-8051/">externe Interrupts</a>.</p>
<p>Dieser Mechanismus, das Auslösen von Interrupts per Software, soll nun genutzt werden.</p>
<h2>Aufgabe</h2>
<p>Wenn der Druck zu hoch ist, soll so viel Radau wie möglich gemacht werden. Es soll neben dem eigentlichen Alarm „Druck zu hoch“ auch der Summer für die Kalkmeldung eingeschaltet werden.</p>
<p>Da nicht an der Hardware geschraubt werden soll, muss dies durch Software gelöst werden. Hierzu soll auch der Interrupt INT0 ausgelöst werden, wenn der Druck zu hoch ist.</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/368ed99aca4d4cd09bcedbdedf1c9039" alt="" width="1" height="1" /></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4444/losung-der-aufgabe-zu-den-externen-interrupts/">Lösung der Aufgabe zu den externen Interrupts</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Externe Interrupts beim 8051</title>
		<link>https://et-tutorials.de/4429/externe-interrupts-beim-8051/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 09 Aug 2011 09:16:23 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4429</guid>

					<description><![CDATA[<p>Heute geht es nun um die Programmierung eines externen Interrupts. Die Programmierung eines externen Interrupts ist eigentlich sehr einfach. Lediglich einige wichtige Register, die über die Special Function Register des 8051 erreicht werden können, müssen gesetzt werden. Dann muss noch die gewünschte Interrupt Service Routine erstellt werden und schon kann auf externe Signale reagiert werden. [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4429/externe-interrupts-beim-8051/">Externe Interrupts beim 8051</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/cd32caca1cd54db19d713be1ebf816f8" alt="" width="1" height="1" />Heute geht es nun um die Programmierung eines externen Interrupts. Die Programmierung eines externen Interrupts ist eigentlich sehr einfach.</p>
<p>Lediglich einige wichtige Register, die über die Special Function Register des 8051 erreicht werden können, müssen gesetzt werden. Dann muss noch die gewünschte Interrupt Service Routine erstellt werden und schon kann auf externe Signale reagiert werden.</p>
<p>Der heutige Artikel besteht aus 2 Videos. Im ersten Video erläutere ich die wichtigsten Register, die ich hier noch einmal aufführe.</p>
<h2>Register für den Interrupt INT0</h2>
<p><strong>/INT0</strong> am Portpin 3.2:<br />
An diesen Anschluss muss das Signal für den externen Interrupt 0 angeschlossen werden.</p>
<p><strong>EAL</strong>, Enable All Interrupts:<br />
EAL muss gleich 1 gesetzt werden, damit eine Anforderung eines Interrupts überhaupt durchgelassen werden können. Dieses Bit ist nach dem Start des Controllers auf 0 gesetzt. Interrupts werden also zunächst nicht zugelassen. So kann das Gesamtsystem zunächst einmal initialisiert werden, ohne von Interrupts gestört zu werden.</p>
<p><strong>EX0</strong>, Enable eXternal Interrupt 0:<br />
schaltet den externen Interrupt 0 frei</p>
<p><strong>IT0</strong>:<br />
0 bedeutet pegelgesteuerter Interrupt<br />
1 bedeutet flankengesteuerter Interrupt</p>
<p><strong>IE0</strong>: ist das zugehörige Interrupt Pendig Flag,<br />
das auch per Software gesetzt werden kann. So könnte man eine Interrupt Service Routine auch per Software auslösen, ein sogenannter Software Trap.</p>
<p>&nbsp;</p>
<h2>Externer Interrupt 0</h2>
<p>Jetzt aber zum Video <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<a href="https://et-tutorials.de/4429/externe-interrupts-beim-8051/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FWa28lx0TGCA%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Der externe Interrupt 0 umgesetzt</h2>
<p>Im folgenden Video zeige ich eine Umsetzung des externen Interrupts 0, bei der ich auch den Unterschied zwischen flankengesteuertem Interrupt und pegelgesteuerten Interrupt erläutere.</p>
<p><object width="425" height="349"><param name="movie" value="https://www.youtube.com/v/XC3CfPrY2mA?version=3&hl=de_DE&hd=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="https://www.youtube.com/v/XC3CfPrY2mA?version=3&hl=de_DE&hd=1" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="allowfullscreen" /></object></p>
<p>&nbsp;</p>
<h2>Deine Aufgabe</h2>
<p>Heute lohnt es sich wieder eine Funktion für den Kaffeeautomaten zu schreiben. Und zwar fehlen noch einige Sicherheitsfunktionen.</p>
<p>In so einer professionellen Kaffeemaschine <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> muss die Funktionstüchtigkeit der Gesamtanlage dauernd überwacht werden.</p>
<p>Deine Aufgabe ist es zwei mögliche Fehler auszuwerten und anzuzeigen.</p>
<ol>
<li>Die Maschine muss (bei Gelegenheit) entkalkt werden<br />
Der Sensor, der eine zu hohe Verkalkung anzeigt, ist an INT0 angeschlossen und gibt als Meldung eine „0“ aus. Wenn der Sensor eine Verkalkung feststellt, soll an Portpin P0.0 eine 1 ausgegeben werden. Hierdurch wird ein Warnsummer eingeschaltet. Da diese Meldung nicht so kritisch ist, kann der Summer ausgeschaltet werden. Er soll nicht automatisch wieder eingeschaltet werden, auch wenn die Kaffeemaschinen noch nicht entkalkt worden ist.</li>
<li>Der Druck der Maschine ist zu hoch. Der Sensor hierfür ist an INT1 angeschlossen und gibt als Meldung eine „0“ aus. Dieser Zustand ist kritisch. In der zugehörigen Interrupt Service Routine soll an Port P0.1 eine 1 ausgegeben werden. Hierdurch wird ein Alarm ausgelöst und die Kaffeemaschine heruntergefahren. Sollte jemand den Alarm löschen, der Druck aber immer noch zu hoch sein, soll automatisch die ISR wieder aufgerufen werden.</li>
</ol>
<p>Es geht also in der Aufgabe sowohl um den Interrupt 0 und den Interrupt 1 und um pegelgesteuerte wie auch um flankengesteuerte Interrupts.</p>
<h2>Hinweis zur Programmierung der Interrupt Service Routine.</h2>
<p>Im Video habe ich gezeigt, dass für den Interrupt 0 die Priority Order 0 gilt. Für den Interrupt 1 gilt die Priority Order 2.</p>
<p>Die Interrupt Service Routinen sehen also beispielsweise wie folgt aus:</p>
<p>void ISR_INT0 (void) interrupt 0<br />
{}</p>
<p>void ISR_INT1 (void) interrupt 2<br />
{}</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4429/externe-interrupts-beim-8051/">Externe Interrupts beim 8051</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Interrupts und Polling</title>
		<link>https://et-tutorials.de/4414/interrupts-und-polling/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Wed, 03 Aug 2011 10:25:56 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4414</guid>

					<description><![CDATA[<p>Heute geht es nun um das Thema Interrupts. Was sind Interrupts? Wozu benötigt man Interrupts? Was ist der Unterschied zum Polling-Verfahren? Interrupts versus Polling Beim Polling fragt man Signale regelmäßig innerhalb der while-Schleife ab und wertet diese Signale aus. Ein großer Nachteil beim Polling ist allerdings, dass auf Signale nicht sofort reagiert werden kann, sondern [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4414/interrupts-und-polling/">Interrupts und Polling</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/b2d361ad7d2a4d75926f0b6da310befa" alt="" width="1" height="1" />Heute geht es nun um das Thema Interrupts.</p>
<ul>
<li>Was sind Interrupts?</li>
<li>Wozu benötigt man Interrupts?</li>
<li>Was ist der Unterschied zum Polling-Verfahren?</li>
</ul>
<h2>Interrupts versus Polling</h2>
<p>Beim Polling fragt man Signale regelmäßig innerhalb der while-Schleife ab und wertet diese Signale aus.<br />
Ein großer Nachteil beim Polling ist allerdings, dass auf Signale nicht sofort reagiert werden kann, sondern erst mit einer Verzögerung.<br />
So kann es im schlechtesten Fall passieren, dass man ein Signal gerade abgefragt hat und kurz nach dieser Abfrage das externe Signal am entprechenden Port anliegt.</p>
<p>In dieser Situation kann es relativ lange dauern, bis der Port wieder abgefragt wird, je nach dem wie lange die Verarbeitung der Befehle in der while-Schleife dauert.</p>
<p>Bei kritischen Signalen, beispielsweise einer kritischen Fehlersituation, bei der sofort reagiert werden muss, kann das untragbar sein.</p>
<p>In solchen Fällen nimmt man besser Interrupts.</p>
<p>Bei Interrupts wird sofort reagiert. Wenn ein Interrupts-Signal auftritt, wird der aktuelle Befehl des Hauptprogramms beendet, die nötigen Register auf den Stack gerettet und dann anschließend sofort die ISR aufgerufen.<br />
Man hat in diesem Fall also kaum Zeitverzug zwischen der Ausführung der ISR und dem Auftreten des Signals.</p>
<p>Den Unterschied zwischen dem Polling-Verfahren und Interrupts zeige ich im folgenden Video.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/4414/interrupts-und-polling/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FUayQQ8yy9S0%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>In der heutigen Folge sollte es lediglich um den Unterschied zwischen Polling und Interrupts gehen. Die Feinheiten von Interrupts werden wir in den folgenden Folgen behandeln.<br />
Der Vollständigkeit halber kopiere ich hier noch die beiden Quellcodes hinein.</p>
<h2>Polling</h2>
<blockquote><p>#include&lt;REG515.H&gt;</p>
<p>sbit Fehler=P2^0;<br />
sbit Alarm=P2^1;</p>
<p>void alarmauswertung(void)<br />
{<br />
Alarm = Fehler;<br />
}</p>
<p>void main(void)<br />
{<br />
unsigned long int i=0;<br />
P1 = 0;<br />
P2 = 0;</p>
<p>Fehler = 1;<br />
Alarm = Fehler;</p>
<p>while(1)<br />
{<br />
for (i=0; i&lt;100000;i++)<br />
{<br />
P1=i;<br />
}<br />
alarmauswertung();</p>
<p>}</p>
<p>}</p></blockquote>
<h2>Interrupt</h2>
<blockquote><p>#include&lt;REG515.H&gt;</p>
<p>sbit Alarm=P2^1;</p>
<p>void ISR_alarmauswertung(void) interrupt 0<br />
{<br />
Alarm = 1;<br />
}</p>
<p>void main(void)<br />
{<br />
unsigned long int i=0;<br />
P1 = 0;<br />
P2 = 0;</p>
<p>EAL    = 1;<br />
EX0 = 1;</p>
<p>while(1)<br />
{<br />
for (i=0; i&lt;100000;i++)<br />
{<br />
P1=i;<br />
}</p>
<p>}</p>
<p>;</p>
<p>}</p></blockquote>
<p>Bis zum nächsten Mal!</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4414/interrupts-und-polling/">Interrupts und Polling</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lösung zur Aufgabe: Lesen aus Ports</title>
		<link>https://et-tutorials.de/4391/losung-zur-aufgabe-lesen-aus-ports/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 28 Jul 2011 11:20:08 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4391</guid>

					<description><![CDATA[<p>Heute geht es nun um die Lösung der Aufgabe aus der vorherigen Folge. Also darum, wie man Ports auslesen kann. Es ging wieder um den Kaffeeautomaten. Über LEDs sollte angezeigt werden, welches Getränk ausgewählt wurde. Die Eingabe sollte nun über Schalter erfolgen, die den jeweiligen Portpin entweder mit  High, also logisch &#8222;1“, oder mit Low, [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4391/losung-zur-aufgabe-lesen-aus-ports/">Lösung zur Aufgabe: Lesen aus Ports</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Heute geht es nun um die Lösung der Aufgabe aus der vorherigen Folge. Also darum, wie man Ports auslesen kann.</p>
<p>Es ging wieder um den Kaffeeautomaten. Über LEDs sollte angezeigt werden, welches Getränk ausgewählt wurde.</p>
<p>Die Eingabe sollte nun über Schalter erfolgen, die den jeweiligen Portpin entweder mit  High, also logisch &#8222;1“, oder mit Low, logisch “0“, verbindet.</p>
<p>Im Gegensatz zu den vorherigen Aufgaben sollte nun also nicht in einen Port geschrieben, sondern aus den Ports gelesen werden.</p>
<p>Wie wir in der vorherigen Folge bereits gesehen haben, muss man eine 1 in das Port-Latch schreiben, wenn aus dem zugehörigen Portpin gelesen werden soll.</p>
<h2>Das Video</h2>
<p>Im Video zeige ich eine mögliche Lösung.</p>
<p>Letztendlich geht es nur darum, die jeweiligen Portpins P1.5, P1.6 und  P1.7 auf &#8222;1“ zu setzen und schon kann es losgehen.</p>
<a href="https://et-tutorials.de/4391/losung-zur-aufgabe-lesen-aus-ports/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F9QsQg78ergw%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
Zur Kontrolle kopiere, gebe ich Dir hier noch einmal den  Code aus dem Video.</p>
<p>&nbsp;</p>
<blockquote><p>#include&lt;REG515.H&gt;</p>
<p>sbit EingabeKaffee = P1^0;</p>
<p>sbit EingabeEspresso = P1^1;</p>
<p>sbit EingabeCapuccino = P1^2;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>sbit AusgabeKaffee = P1^3;</p>
<p>sbit AusgabeEspresso = P1^4;</p>
<p>sbit AusgabeCapuccino = P1^5;</p>
<p>&nbsp;</p>
<p>void main(void)</p>
<p>{</p>
<p>P1 = 0x07;</p>
<p>while(1)</p>
<p>{</p>
<p>AusgabeKaffee=EingabeKaffee;</p>
<p>AusgabeEspresso=EingabeEspresso;</p>
<p>AusgabeCapuccino=EingabeCapuccino;</p>
<p>}</p>
<p>&nbsp;</p>
<p>}</p></blockquote>
<p>&nbsp;</p>
<p>In der nächsten Folge geht es um Interrupts.</p>
<p>&nbsp;</p>
<p>Bis dann!</p>
<p>&nbsp;</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .<br />
&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4391/losung-zur-aufgabe-lesen-aus-ports/">Lösung zur Aufgabe: Lesen aus Ports</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lesen aus Portpins</title>
		<link>https://et-tutorials.de/4339/lesen-aus-portpins/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Wed, 27 Jul 2011 08:03:15 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4339</guid>

					<description><![CDATA[<p>Heute geht es nun um die Treiberschaltung für die Portpins. Diese Treiberschaltung benötigt man für das Schreiben und für das Lesen aus Ports. In der letzten Folge haben wir ja bereits bemerkt, dass ein Portpin, der zum Lesen externer Signale genutzt werden soll, entsprechend vorbereitet werden muss. Und zwar müssen wir eine 1 in das [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4339/lesen-aus-portpins/">Lesen aus Portpins</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/d27ff2e1a44e459bb3eb255c24d94c04" alt="" width="1" height="1" />Heute geht es nun um die Treiberschaltung für die Portpins.</p>
<p>Diese Treiberschaltung benötigt man für das Schreiben und für das Lesen aus Ports. In der letzten Folge haben wir ja bereits bemerkt, dass ein Portpin, der zum Lesen externer Signale genutzt werden soll, entsprechend vorbereitet werden muss.<br />
Und zwar müssen wir eine <strong>1</strong> in das entsprechende Portbit schreiben. Diese 1 wird in ein Latch, ein D-Flipflop, gespeichert.</p>
<p>Um Informationen an ein Portpin auszugeben, ist eine einfache Transistorschaltung auf dem Mikrocontroller integriert, mit dessen Hilfe über eine Pullup-Schaltung (manchmal ist auch ein externer Pullup-Widerstand nötig) die Information nach außen geschaltet werden kann. Das ist noch relativ unspektakulär <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Das Lesen aus einem Portpin ist etwas kniffeliger.</p>
<p>Wäre der Ausgangstransistor durchgeschaltet, so wäre der Portpin dauernd auf Masse gezogen, unabhängig davon, welcher Pegel physikalisch am Portpin angelegt werden würde. Die gelesene Information wäre immer 0.<br />
Aus diesem Grund muss, wenn man aus einem Portpin gelesen werden soll, das D-Flipflop immer gesetzt werden. Dies erreicht man, indem man eine 1 in den Portpin schreibt.<br />
<strong>Die Regel lautet also:</strong></p>
<blockquote><p>Wenn man aus einem Portpin lesen möchte, muss das Portbit auf 1 gesetzt werden</p></blockquote>
<p>Jetzt, wo das nun klar ist, gibt es noch eine gute Nachricht <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Unsere Portbits sind nämlich bitadressierbar. Das heißt, man muss sich nicht bei der Arbeit mit einzelnen Portpins , wie in der Folge zur Bitweisen Manipulation gezeigt, mit Masken herumschlagen, sondernman kann die Portbits einzeln ansprechen.<br />
Was man tun muss, um die Portbits einzeln anzusprechen, zeige ich ebenfalls im heutigen Video.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/4339/lesen-aus-portpins/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2Fp0JgoqdtfNs%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<h2>Jetzt bist Du wieder an der Reihe</h2>
<p>Die Wahl des Getränks für den bereits im ersten Teil des Mikrocontrollerkurses verwendeten Kaffeeautomaten, soll nun über Schalter erfolgen, die an die Portpins P0_0 bis P0_2 angeschlossen sind.</p>
<p>Dem Kunden, der ein Getränk ausgewählt hat, soll die Getränkewahl über Leuchtdioden angezeigt werden, die an den Ports P0_3 bis P0_5 angeschlossen sind.</p>
<p><a href="https://et-tutorials.de/wp-content/uploads/2011/07/PortsLesenUndSchreiben1.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-4360" title="PortsLesenUndSchreiben" src="https://et-tutorials.de/wp-content/uploads/2011/07/PortsLesenUndSchreiben1.jpg" alt="" width="506" height="654" srcset="https://et-tutorials.de/wp-content/uploads/2011/07/PortsLesenUndSchreiben1.jpg 506w, https://et-tutorials.de/wp-content/uploads/2011/07/PortsLesenUndSchreiben1-232x300.jpg 232w" sizes="(max-width: 506px) 100vw, 506px" /></a><br />
Das heißt, wenn der Schalter P0_0 geschlossen ist, soll die LED an P0_5 leuchten, usw.</p>
<p>Versuche bitte einmal, diese Funktionalität zu programmieren.</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4339/lesen-aus-portpins/">Lesen aus Portpins</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Definition der Portadresse durch die Special Function Register</title>
		<link>https://et-tutorials.de/4332/definition-der-portadresse-durch-die-special-function-register/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 21 Jul 2011 16:23:52 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4332</guid>

					<description><![CDATA[<p>Heute geht es wie angekündigt noch einmal um Ports. Wir setzen auf das von uns neu erstellte Projekt auf. Wenn Du dieses Projekt noch nicht erstellt hast, dann guck Dir am besten noch einmal die vorherige Folge an. Dort zeige ich, wie man von Beginn an ein neues Projekt in uVision 4 aufsetzt. Um in [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4332/definition-der-portadresse-durch-die-special-function-register/">Definition der Portadresse durch die Special Function Register</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/aba7d7a60d7044a0a872ef97d453b206" alt="" width="1" height="1" />Heute geht es wie angekündigt noch einmal um Ports.</p>
<p>Wir setzen auf das von uns neu erstellte Projekt auf. Wenn Du dieses Projekt noch nicht erstellt hast, dann guck Dir am besten noch einmal die vorherige Folge an. Dort zeige ich, wie man von Beginn an ein neues Projekt in uVision 4 aufsetzt.</p>
<p>Um in unserem neuen, leeren Projekt mit Ports zu arbeiten, muss dem Compiler zunächst einmal mitgeteilt werden, unter welcher Adresse er die Ports des Mikrocontrollers findet.</p>
<p>Dies macht man beispielsweise durch die  Zuordnung:</p>
<p><strong>sfr P0     = 0x80;</strong></p>
<p>In diesem Beispiel wird definiert, dass ein Zugriff auf P0 (das ist der Port 0) über die Adresse 0x80 erfolgt.</p>
<p>Sfr steht für Special Function Register. Das Special Function Register ist ein für den 8051 sehr wichtiger Speicherbereich, über den die CPU mit der zusätzlichen Hardware, wie beispielsweise den Ports, den Timern und weiteren Schnittstellen kommunizieren kann.</p>
<p>Mit den Special Function Registern werden wir hier noch sehr häufig zu tun haben.</p>
<p><strong>Aber zurück zu den Ports.</strong></p>
<p>Die einzelnen Adresszuordnungen, also welcher Port über welche Adresse angesprochen werden kann, muss man glücklicherweise nicht mühsam aus den Datenblättern heraussuchen.</p>
<p>Diese Zuweisungen sind in einer .h-Datei bereits vorbereitet worden.</p>
<p>In unserem Fall ist das die Datei reg515.h. Diese Datei enthält die gesamten Definitionen der Special Function Register unseres Mikrocontrollers.</p>
<p>Um diese Informationen nutzen zu können, bindet man einfach die Datei reg515.h oben in den Quelllcode ein, mit</p>
<p><strong>#include&lt;REG515.H&gt;</strong></p>
<p>Im Video führe ich das gesamte Prozedere einmal durch.</p>
<a href="https://et-tutorials.de/4332/definition-der-portadresse-durch-die-special-function-register/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F741FBw6kTkU%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
Bereite nun Dein Projekt entsprechend vor. In der nächsten Folge zeige ich, wie man aus Ports lesen kann. Dann gibt es auch die erste Programmieraufgabe.</p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4332/definition-der-portadresse-durch-die-special-function-register/">Definition der Portadresse durch die Special Function Register</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ein neues Projekt in uVision 4</title>
		<link>https://et-tutorials.de/4321/ein-neues-projekt-in-uvision-4/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Sun, 17 Jul 2011 18:22:39 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4321</guid>

					<description><![CDATA[<p>Im heutigen Artikel werden wir nun ein neues Projekt in µVision 4 von Grund aus anlegen. Im Gegensatz zu den Projekten aus dem ersten Teil des Mikrocontroller-Kurses soll es also nicht darum gehen, ein bestehendes Projekt mit einem Grundgerüst weiter zu entwickeln, sodern darum, ein komplett neues Projekt aufzubauen. Dies ist zwar in wenigen Schritten [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4321/ein-neues-projekt-in-uvision-4/">Ein neues Projekt in uVision 4</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/f35ceb1f2a6045ec9130ac4058c3318f" alt="" width="1" height="1" />Im heutigen Artikel werden wir nun ein neues Projekt in µVision 4 von Grund aus anlegen.</p>
<p>Im Gegensatz zu den Projekten aus dem ersten Teil des <a href="https://et-tutorials.de/mikrocontroller/" target="_blank" rel="noopener">Mikrocontroller-Kurses</a> soll es also nicht darum gehen, ein bestehendes Projekt mit einem Grundgerüst weiter zu entwickeln, sodern darum, ein komplett neues Projekt aufzubauen.</p>
<p>Dies ist zwar in wenigen Schritten erledigt. An einigen Stellen ist die Einrichtung jedoch nicht komplett intuitiv.</p>
<p>Zudem wird man aufgefordert, schon bei dem Anlegen des Projektes vorzugeben, für welchen Mikrocontroller man die Software erstellen möchte. Hier hat man die Wahl zwischen sehr vielen Herstellern mit den unterschiedlichsten Typen.</p>
<p>Wir wählen für unseren Kurs einen einfachen Mikrocontroller aus. Und zwar einen Mikrocontroller der Firma Infineon, den 80C51.</p>
<p>Unter folgendem Link findest Du das <a href="http://www.datasheetcatalog.org/datasheet/infineon/1-d80515.pdf" target="_blank" rel="noopener">Datenblatt zum Controller</a>.</p>
<p>Aber keine Angst: Für den Kurs musst Du das Datenblatt nicht komplett verstehen. Die Teile, die wir aus dem Datenblatt benötigen, werde ich ausführlich in diesem Kurs erklären.<br />
Und auch wenn das  Datenblatt in englischer Sprache geschrieben ist, die Information, die wir benötigen sind international. Man muss also nicht unbedingt eine „Englisch-Leuchte sein.</p>
<p>Der Mikrocontroller Infineon 80C51 ist einfach aufgebaut und hat wenig mehr als der „Ur-8051“, so dass man die Struktur eines 8051 sehr leicht verstehen kann, ohne sich von den zusätzlichen Features eines modernen 8051 verwirren zu lassen.<br />
Wie ich bereits in der einführenden Folge zum 8051-Kurs geschrieben habe, kann man später, wenn man die Grundlagen verstanden hat, leicht auf das gewünschte 8051-Derivat umsteigen.</p>
<p><strong>Aber der Reihe nach &#8230;</strong></p>
<p>Im folgenden Video zeige ich zunächst, wie Du Schritt für Schritt ein neues Projekt anlegst.<br />
<a href="https://et-tutorials.de/4321/ein-neues-projekt-in-uvision-4/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FXNeQDaIgHQY%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Jetzt solltest Du in Deiner µVision-Software ein neues Projekt anlegen, damit Du für die nächste Folge gerüstet bist <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4321/ein-neues-projekt-in-uvision-4/">Ein neues Projekt in uVision 4</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Übersicht zum 8051 Mikrocontroller Kurs</title>
		<link>https://et-tutorials.de/4313/ubersicht-zum-8051-mikrocontroller-kurs/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Wed, 13 Jul 2011 10:23:15 +0000</pubDate>
				<category><![CDATA[Leitartikel]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4313</guid>

					<description><![CDATA[<p>Nachdem wir uns im 1. Teil des Mikrocontrollerkurses mit den Grundlagen der Programmiersprache C beschäftigt haben, geht es nun konkret um die Programmierung des Mikrocontrollers. Und zwar um die Programmierung eines Mikrocontrollers aus der 8051-Familie. Bereits Anfang der 80er Jahre hat die Firma Intel die 8051-Familie vorgestellt. Zu dieser 8051-Familie gehören verschiedene Mikrocontroller unterschiedlicher Hersteller, [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4313/ubersicht-zum-8051-mikrocontroller-kurs/">Übersicht zum 8051 Mikrocontroller Kurs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/0a000ec41a49433d8db7ddb94a06b343" width="1" height="1" alt="">Nachdem wir uns im 1. Teil des <a href="https://et-tutorials.de/mikrocontroller/" target="_blank" rel="noopener">Mikrocontrollerkurses</a> mit den Grundlagen der Programmiersprache C beschäftigt haben, geht es nun konkret um die Programmierung des Mikrocontrollers.</p>
<p>Und zwar um die Programmierung eines Mikrocontrollers aus der 8051-Familie. Bereits Anfang der 80er Jahre hat die Firma Intel die 8051-Familie vorgestellt.</p>
<p>Zu dieser 8051-Familie gehören verschiedene Mikrocontroller unterschiedlicher Hersteller, die alle auf Basis der 8051 Mikrocontroller basieren.</p>
<p>Im Laufe der Jahre wurden so von den verschiedenen Herstellern immer neue Mikrocontroller auf 8051-Basis entwickelt.</p>
<p>Wir haben also eine Mikrocontrollerfamilie vor uns, die einerseits schon sehr lange existiert, andererseits nicht „alt“ im Sinne von „überholt“ ist.</p>
<p>Durch die ständige Weiterentwicklung sind sehr leistungsfähige Mikrocontroller entstanden, die mit den alten 8051-Derivaten nicht mehr zu vergleichen sind und zu den leistungsfähigsten Mikrocontrollern gehören, die am Markt erhältlich sind.</p>
<p>Zudem ergibt sich so der Vorteil, dass man beim Erlernen der Feinheiten der 8051-Mikrocntroller, mit einfach aufgebauten Modellen beginnen und dann je nach Anforderung in der Praxis einen komplizierten 8051 auswählen kann.</p>
<h2>Merkmale eines 8051 Mikrocontrollers</h2>
<p>Die wichtigsten <a href="http://de.wikipedia.org/wiki/Intel_MCS-51" target="_blank" rel="noopener">Merkmale</a> sind</p>
<p>•	Der 8-Bit Prozessorkern mit einheitlichem Befehlssatz</p>
<p>•	ein mindestens 128 Bytes großes internes RAM</p>
<p>•	ein einheitliches Adressierungsmodell für so genannte Special Function Register (SFR)</p>
<p>•	Full-Duplex-UART</p>
<p>•	Externe Interrupts</p>
<p>•	diverse Timer</p>
<p>Diese Merkmale und die Programmierung des ADC (Analog/Digital-Converter), also des Analgog/Digital-Wandlers werden wir uns in diesem Teil des Kurses anschauen und natürlich programmieren.</p>
<h2>Eine Übersicht zum 2. Teil (8051)</h2>
<p>Im folgenden Video stelle ich eine Übersicht zu den Inhalten des Kurses vor.</p>
<a href="https://et-tutorials.de/4313/ubersicht-zum-8051-mikrocontroller-kurs/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F_ctVQXmJtC0%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Im nächsten Teil werden wir dann ein neues Projekt von Anfang an in Keil anlegen und den gewünschten 8051 auswählen.</p>
<p>&nbsp;</p>
<p>&nbsp;<br />
Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.<br />
<a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .<br />
&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4313/ubersicht-zum-8051-mikrocontroller-kurs/">Übersicht zum 8051 Mikrocontroller Kurs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mikrocontroller Emailkurs</title>
		<link>https://et-tutorials.de/4239/mikrocontroller-emailkurs/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 14 Jun 2011 14:07:59 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4239</guid>

					<description><![CDATA[<p>Wie ich in der letzten Woche bereits angekündigt, habe ich einen Email-Kurs für den Mikrocontroller Workshop eingerichtet. Natürlich ist auch dieser Kurs wieder kostenlos. Es handelt sich genau genommen auch nicht um einen neuen Kurs, sondern eher um eine andere Organissation der Durchführung. Bisher war es so, dass jeder, der sich neu für den bereits [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4239/mikrocontroller-emailkurs/">Mikrocontroller Emailkurs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Wie ich in der letzten Woche bereits angekündigt, habe ich einen <strong>Email-Kurs</strong> für den Mikrocontroller Workshop eingerichtet.</p>
<p>Natürlich ist auch dieser Kurs wieder kostenlos.</p>
<p>Es handelt sich genau genommen auch nicht um einen neuen Kurs, sondern eher um eine andere Organissation der Durchführung.</p>
<p>Bisher war es so, dass jeder, der sich neu für den bereits bestehenden Kurs angemeldet hatte, einen &#8222;Quereinstieg&#8220; gemacht hat. Das macht nun da wir schon 40 Folgen hinter uns gebracht haben, keinen Sinn.</p>
<h2>Der Mikrocontroller-Kurs als Email-Kurs</h2>
<p>Wer sich ab jetzt neu für den Mikrocontroller-Kurs anmeldet, bekommt nun die Kursinhalte von Anfang an per Email.</p>
<p><strong>Also beginnend ab Folge 1.</strong></p>
<p>Zudem wird es zusätzliche Inhalte, wie beipielsweise der Quellcode für die Lösungen der Übungsaufgaben per Email geben.</p>
<p>Wenn Du bereits alle Folgen gesehen hast, brauchst Du nichts weiter zu unternehmen. Du erhälst dann weiterhin wie gehabt alle neuen Folgen per Email zugeschickt. Es ändert sich dann für Dich nichts.</p>
<p>Wenn Du den Kurs von Anfang an mitmachen möchtest, dann <strong>trage Deine Emailadresse in das folgende Feld ein</strong>. Du erhälst dann von mir eine Email mit einem Bestätigungs-Link.<br />
Durch einen Klick auf diesen Link , bestätigst Du, dass Deine Email-Adresse tatsächlich von Dir und niemand anderem eingetragen wurde. So wird verhindert, dass irgendein Witzbold andere Emailadressen einträgt.<br />
Trage hier nun Deine Email-Adresse ein, um Dich für den Kurs anzumelden.</p>
<div style="float: left; margin-left: 0px; margin-right: 0px; padding: 10px;">
<div class="klicktipp-form">
<table style="width: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) 0 0;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) 0px -40px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) -20px 0;"></td>
</tr>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) 0px -80px;"></td>
<td class="c" style="background: #ffffff; text-align: center;">
<form id="ktfs" action="https://www.klick-tipp.com/de/subscribe.php" accept-charset="UTF-8" method="post"> <input id="FormValue_EmailAddress" style="margin-bottom: 10px; background: #fff; border: 1px solid #aaa; color: #000; width: 205px; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;" name="FormValue_Fields[EmailAddress]" type="text" value="E-Mail-Adresse"></p>
<div style="vertical-align: top; text-align: center;"><button id="FormButton_Subscribe" style="background: none; padding: 0; margin: 0; border: none; display: inline; vertical-align: top;"><img decoding="async" src="https://klick-tipp.s3.amazonaws.com/buttons/jetzt-anmelden_orange_blau.png" alt="Jetzt anmelden!"></button></div>
<p><input id="FormValue_ListID" name="FormValue_ListID" type="hidden" value="2293"> <input id="FormValue_Command" name="FormValue_Command" type="hidden" value="Subscriber.Add"></p>
</form>
<div style="font-size: 10px; text-align: center; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;">Wir halten uns an den <a style="color: #888; text-decoration: none; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;" title="Klick-Tipp Datenschutzrichtlinie" href="http://www.klick-tipp.com/datenschutz/5323" target="_blank" rel="noopener noreferrer">Datenschutz</a>.</div>
</td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) -20px -80px;"></td>
</tr>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) 0 -20px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) 0px -60px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url(https://klick-tipp.s3.amazonaws.com/shadow.png) -20px -20px;"></td>
</tr>
</tbody>
</table>
<p><script type="text/javascript">// <![CDATA[
function ktfsFocus(a){a=a||window.event;var b=(a.srcElement)?a.srcElement:a.target;var c=b.value;var d=b.getAttribute('oldtext');if(d==undefined){b.setAttribute('oldtext',c);b.value='';b.style.backgroundColor='#f8ffba';}}function ktfsBlur(a){a=a||window.event;var b=(a.srcElement)?a.srcElement:a.target;var c=b.value;if(c==''){c=b.getAttribute('oldtext');b.removeAttribute('oldtext');b.value=c;b.style.backgroundColor='#fff';}}function ktfsRecursion(el){var i;for(i=0;i<el.children.length;i++){var el1=el.children[i];if(el1.nodeName=='INPUT') if('text'==el1.getAttribute('type')){el1.onfocus=ktfsFocus;el1.onblur=ktfsBlur};ktfsRecursion(el1)}}var form=document.getElementById('ktfs');ktfsRecursion(form);<br />
// ]]&gt;</script></p>
</div>
</div>
<p><strong>Wichtig:</strong><br />
<strong> Deine EMail-Adresse behandle ich natürlich vertraulich und gebe diese an niemanden weiter. Zudem kannst Du Dich jederzeit durch einen Klick auf den Abmeldelink in einer der Emails einfach wieder abmelden.</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4239/mikrocontroller-emailkurs/">Mikrocontroller Emailkurs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mikrocontroller-Kurs &#8211;  Wie geht&#8217;s weiter?</title>
		<link>https://et-tutorials.de/4232/mikrocontroller-kurs-wie-gehts-weiter/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 07 Jun 2011 20:14:43 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=4232</guid>

					<description><![CDATA[<p>Die Pause nach dem ersten Teil hat nun doch länger gedauert als ich geplant hatte, weil ich viel u.a. mit Prüfungen zu tun hatte. Glücklicherweise gehen die Abitur- und Fachabiturprüfungen nun in die letzte Runde. Ja, Nordrhein-Westfalen ist in diesem Jahr ziemlich spät dran. Wie dem auch sei: In dieser Woche halte ich noch eine [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/4232/mikrocontroller-kurs-wie-gehts-weiter/">Mikrocontroller-Kurs &#8211;  Wie geht&#8217;s weiter?</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg08.met.vgwort.de/na/79f134ee7fb44dda8f2c4adf89fc6a5c" width="1" height="1" alt="">Die Pause nach dem ersten Teil hat nun doch länger gedauert als ich geplant hatte, weil ich viel u.a. mit Prüfungen zu tun hatte.</p>
<p>Glücklicherweise gehen die Abitur- und Fachabiturprüfungen nun in die letzte Runde. Ja, Nordrhein-Westfalen ist in diesem Jahr ziemlich spät dran.</p>
<p>Wie dem auch sei: In dieser Woche halte ich noch eine schriftliche Fachabitur-Prüfung, in der nächsten Woche noch eine mündliche Prüfung und dann ist wieder Land in Sicht. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Zwei Dinge sind für den Mikrocntroller-Kurs geplant.</p>
<h2>Der zweite Teil: Programmierung des 8051 Mikrocontrollers</h2>
<p>Im zweiten Teil wird es wie geplant um die Programmierung der 8051-Familie gehen.<br />
Interrupts, Timer, Analog/Digital-Wandlung, serielle Schnittstelle werden die Themen sein.<br />
Die Vorbereitungen sind gemacht, die Videos muss ich aber noch produzieren.</p>
<h2>Der Mikrocontroller-Kurs als Email-Kurs</h2>
<p>Seitdem der Kurs online ist haben sich mittlerweile über 500 Teilnehmer angemeldet, einige davon auch erst in der Pause von Weihnachten bis jetzt.</p>
<p>Viele haben also den Aufbau des Kurses nicht &#8222;live&#8220; verfolgt, sondern sind erst später eingestiegen.</p>
<p>Das ergibt folgendes Problem.</p>
<p>Wer sich heute anmeldet, erhält nur die aktuelle Folge, also Folge 41, als Email.</p>
<p>Sinnvoller wäre es aber bei der ersten Folge zu beginnen.</p>
<p>Ich werde daher, den Kurs noch einmal als Email-Kurs aufsetzen, so dass diejenigen, die sich anmelden, von Anfang an, Folge für Folge per Email durch den gesamten Kurs begleitet werden.</p>
<p>Die Softwarelösung hierfür habe ich bereits ausgesucht und bestellt.</p>
<p>Ich hoffe, in der nächsten Woche den Kurs aufsetzen zu können. Du bekommst dann Bescheid und kannst Dich dann entscheiden, ob es für Dich mehr Sinn macht in diesem Email-Verteiler zu bleiben, Dich in den Email-Kurs von Anfang anzumelden oder beides zu tun.</p>
<p>Wie gesagt, in der nächsten Woche gibt es (hoffentlich) dazu mehr.</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/4232/mikrocontroller-kurs-wie-gehts-weiter/">Mikrocontroller-Kurs &#8211;  Wie geht&#8217;s weiter?</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Implementierung von Bubblesort</title>
		<link>https://et-tutorials.de/3641/implementierung-von-bubblesort/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 21 Dec 2010 17:20:50 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3641</guid>

					<description><![CDATA[<p>Nachdem wir in der letzten Folge geklärt haben, wie das Sortieren mit Bubblesort funktioniert, geht es heute um die Implementierung des Bubblesort Sortieralgorithmus. Ich hoffe, Du konntest mit der Aufgabe etwas anfangen.  Auch wenn die Funktionsweise des Bubblesort Algorithmus sehr einsichtig und leicht zu verstehen ist, die Implementierung von Bubblesort hat schon hier und da [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3641/implementierung-von-bubblesort/">Implementierung von Bubblesort</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Nachdem wir in der letzten Folge geklärt haben, wie das <a href="https://et-tutorials.de/3634/anwendung-von-pointern-bubblesort/">Sortieren mit Bubblesort</a> funktioniert, geht es heute um die Implementierung des Bubblesort Sortieralgorithmus.</p>
<p>Ich hoffe, Du konntest mit der Aufgabe etwas anfangen.  Auch wenn die Funktionsweise des Bubblesort Algorithmus sehr einsichtig und leicht zu verstehen ist, die Implementierung von Bubblesort hat schon hier und da seine Tücken.</p>
<p>Zunächst einmal muss man auf die Funktionsweise der Pointer achten und aufpassen, dass man nicht irgendwann einmal ins Nirwarna pointert.</p>
<p>Zusätzlich hat man das Problem, dass man mit mehreren ineinander geschachtelten Schleifen hantieren muss.</p>
<p>Es gilt also: Die Übersicht bewahren. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Im Video zeige ich eine mögliche Lösung zur Implementierung des Bubblesort Algorithmus.</p>
<a href="https://et-tutorials.de/3641/implementierung-von-bubblesort/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FK-R6cOKkduU%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Es gibt noch viele andere Lösungen Bubblesort zu implementieren, sicher auch noch schönere.</p>
<p>Wenn Du Lust hast, dann poste Deine Lösung einfach unter dem Artikel.</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3641/implementierung-von-bubblesort/">Implementierung von Bubblesort</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Anwendung von Pointern &#8211; Bubblesort</title>
		<link>https://et-tutorials.de/3634/anwendung-von-pointern-bubblesort/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Wed, 15 Dec 2010 16:34:49 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3634</guid>

					<description><![CDATA[<p>Heute wird es wieder praktisch: Es geht um Sortierung mit Bubblesort.Es gibt verschiedene Möglichkeiten zu Sortieren. Bubblesort ist nur eine davon. Aber der Reihe nach. In den vergangenen Folgen haben wir uns ja schon ausgiebig mit Pointern und Arrays beschäftigt. Die Theorie sitzt soweit, denke ich. Falls Du noch ein bisschen Übung beim Programmieren benötigst, [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3634/anwendung-von-pointern-bubblesort/">Anwendung von Pointern &#8211; Bubblesort</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/b5d8194b37a84801add53651d52c6b5e" alt="" width="1" height="1" />Heute wird es wieder praktisch: Es geht um Sortierung mit Bubblesort.Es gibt verschiedene Möglichkeiten zu Sortieren. Bubblesort ist nur eine davon.</p>
<p>Aber der Reihe nach.</p>
<p>In den vergangenen Folgen haben wir uns ja schon ausgiebig mit Pointern und Arrays beschäftigt.</p>
<p>Die Theorie sitzt soweit, denke ich. Falls Du noch ein bisschen Übung beim Programmieren benötigst, ist das Thema  Pointer eine wunderbare Gelegenheit.<br />
Das Programmieren mit Pointern und das Ausprobieren erklärt viele Dinge.</p>
<p>Nachdem die Grundlagen zu Pointern also abgehakt sind, stellt sich die  Frage, was man mit Pointern überhaupt machen kann.  Zum Selbstzweck sind  Pointer bestimmt nicht erfunden worden.</p>
<p>Ein Kommentar von Christos im letzten Artikel bringt die Problematik schön auf den Punkt.</p>
<p>Leider habe ich bisher in Übungen usw. Pointer nur bis zu diesem Punkt<br />
angewendet.<br />
Wofür sind Pointer eigentlich in der Programmierpraxis gut? In welchen Fällen<br />
hat man in der allgemeinen Programmierpraxis und beim programmieren von Mikrocontrollern Vorteile, wenn man mit Pointern arbeitet? Und welche?<br />
Wozu dienen Sie? Ich hab mal gehört, dass Sie z.B. Speicherplatz sparen sollen?</p>
<p>Das kann doch eigentlich nicht sein. Oder? Sie benötigen doch schließlich auch ein Speicherplatz wie eine „normale“ Variable.</p></blockquote>
<h2>Bubblesort</h2>
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-3639" title="sort" src="https://et-tutorials.de/wp-content/uploads/2010/12/sort.png" alt="sort" width="256" height="256" srcset="https://et-tutorials.de/wp-content/uploads/2010/12/sort.png 256w, https://et-tutorials.de/wp-content/uploads/2010/12/sort-150x150.png 150w" sizes="(max-width: 256px) 100vw, 256px" />Deshalb soll es jetzt einmal um eine Anwendung von Pointern gehen. Und zwar am Beispiel einer Sortieraufgabe mit Bubblesort.</p>
<p>Bubble kommt aus dem Englischen und bedeutet Blase, im Sinne von Luftblase.  Und genau wie die Luftblasen in einer Flüssigkeit nach oben steigen und sich schwere Elemente unten und leichtere Elemente oben anlagern, treiben durch  Bubblesort Elemente aufgrund ihres Wertes an die richtige Stelle.</p>
<h2>Video zu Pointern und Bubblesort</h2>
<p>Wie das genau funktioniert zeige ich im folgenden Video.</p>
<a href="https://et-tutorials.de/3634/anwendung-von-pointern-bubblesort/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fg7No_XFldbw%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Falls Du Dich noch tiefer mit Bubblesort beschäftigen möchtest /musst poste ich hier noch einem mal den Link zum <a href="https://de.wikipedia.org/wiki/Bubblesort">Wikipedia Bubblesort-Artikel</a>.</p>
<p>Bubblesort ist keine sehr elegante Art zu sortieren. Es gibt bessere Algorithmen zur Sortierung. Hier geht es darum, den Umgang mit Pointern zu üben. Und dafür benötigen wir einen Algorithmus, der leicht zu implementieren ist.</p>
<h2>Deine Bubblesort Funktion</h2>
<p>Die heute Aufgabe hat es schon in sich. Programmiere die Funktion sort, die die Elemente mit Bubblesort ordnet.</p>
<p>Beim nächsten Mal gibt es dann eine mögliche Lösung zur Implementierung von  Bubblesort.<br />
<br />
Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3634/anwendung-von-pointern-bubblesort/">Anwendung von Pointern &#8211; Bubblesort</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pointer in C &#8211; Lösung und Spielereien</title>
		<link>https://et-tutorials.de/3540/pointer-in-c-losung-und-spielereien/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 30 Nov 2010 20:05:35 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3540</guid>

					<description><![CDATA[<p>Nachdem ich die letzte Folge über Pointer und Arrays mit einer kleinen Aufgabe beendet habe, wird es heute nun die Lösung der Aufgabe gehen. Du bist sicher schnell auf die Lösung gekommen, auch ohne die Zeilen einfach in die Entwicklungsumgebung einzugeben. Falls Du die Aufgabe noch nicht gemacht habe, lies Dir die vergangene Folge noch [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3540/pointer-in-c-losung-und-spielereien/">Pointer in C &#8211; Lösung und Spielereien</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="http://vg01.met.vgwort.de/na/2f03b75d7f8844b99a027dc2608f882d" alt="" width="1" height="1" />Nachdem ich die letzte Folge über <a href="https://et-tutorials.de/3441/pointer-und-arrays/">Pointer und Arrays</a> mit einer kleinen Aufgabe beendet habe, wird es heute nun die Lösung der Aufgabe gehen.</p>
<p>Du bist sicher schnell auf die Lösung gekommen, auch ohne die Zeilen einfach in die Entwicklungsumgebung einzugeben.</p>
<p>Falls Du die Aufgabe noch nicht gemacht habe, lies Dir die vergangene Folge noch einmal durch, schau Dir das Video an und versuche die kleine Aufgabe zu lösen.<br />
Gesucht war ja, herauszufinden, was die folgenden Befehle machen.</p>
<blockquote><p>i_ptr=Array;<br />
for ( i=0;  i&lt;10; i++)<br />
{<br />
printf(&#8222;%d\n&#8220;,*i_ptr++);</p>
<p>}</p></blockquote>
<p>Auch wenn der Term *i_ptr++ zunächst ein wenig kompliziert aussieht, ist die Lösung der Aufgabe eigentlich ganz einfach.</p>
<p>Man muss sich nur Schritt für Schritt der Lösng nähern.</p>
<p>Der Inhalt des Pointers i_ptr wird ausgeben und anschließend wird der Pointer inkrementiert.</p>
<p>Danach zeigt der Pointer auf das nächste Feld des Arrays. Hierbei ist es wichtig den Unterschied zwischen i++ und ++i zu kennen. Im zweiten Fall würde die Variable zuerst inkrementiert. Das erste Feld würde dann also nicht ausgegeben. Dafür aber die Speicherstelle hinter dem Array. Was dort auch immer stehen mag.</p>
<p>Im folgenden Video zeige ich noch einmal die Lösung in der Entwicklungsumgebung.</p>
<p>Am Ende des Videos zeige ich noch eine kleine Spielerei mit Pointern. Mit Pointern kann man allerlei Unfug treiben.</p>
<p>Daher Vorsicht: Um Dinge auszuprobieren und um zu testen, ob man das Thema Pointer wirklich verstanden hat, kann man solche harten Zugriffe auf den Speicher durchaus einmal machen.</p>
<p>Mit seriöser Mikrocontrollerprogrammierung hat das natürlich nichts zu tun. In der Praxis also unbedingt Finger weg von solchen Tricks.</p>
<p>Man kann nie sicher sein, wie der Compiler und der Linker die Variablen verwalten. Wenn man dann mit einem Pointer eine falsche Speicherstelle beschreibt kann das böse Auswirkungen haben.</p>
<p>Bei einer ernsthaften Programmierung bitte nie in hart-codierte Adressen schreiben.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/sl5hXkkqg7E?fs=1&hl=de_DE&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/sl5hXkkqg7E?fs=1&hl=de_DE&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Bis zum nächsten Mal!</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3540/pointer-in-c-losung-und-spielereien/">Pointer in C &#8211; Lösung und Spielereien</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pointer und Arrays</title>
		<link>https://et-tutorials.de/3441/pointer-und-arrays/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 11 Nov 2010 15:15:02 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3441</guid>

					<description><![CDATA[<p>In einem der vorherigen Artikeln hatten wir schon einmal Arrays kennengelernt. Arrays sind nichts anderes als ein Feld mit Variablen gleichen Typs. So erzeugt beispielsweise die Anweisung int arr [10]; ein Feld mit 10 Integerwerten, die ich mit arr[0] bis arr[9] ansprechen kann. Der Name des Arrays ist dabei ein Zeiger auf dieses Feld und [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3441/pointer-und-arrays/">Pointer und Arrays</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--> In einem der vorherigen Artikeln hatten wir schon einmal <a href="https://et-tutorials.de/2579/arrays/">Arrays</a> kennengelernt.</p>
<p>Arrays sind nichts anderes als ein Feld mit Variablen gleichen Typs.</p>
<p>So erzeugt beispielsweise die Anweisung</p>
<blockquote><p>int arr [10];</p></blockquote>
<p>ein Feld mit 10 Integerwerten, die ich mit arr[0] bis arr[9] ansprechen kann.</p>
<p>Der Name des Arrays ist dabei ein Zeiger auf dieses Feld und zeigt auf das erste Feld des Arrays.</p>
<p>Man kann also den Namen des Arrays einem Pointer des gleichen Typs zuordnen und dann anschließend den Pointer dereferenzieren um den Inhalt zu erhalten.</p>
<p>Desweiteren ist es möglich, den Pointer zu inkrementieren, um so auf den nächsten Eintrag des Arrays zu verweisen.</p>
<p>Im folgenden Video zeige ich den Zusammenhang zwischen Array und Pointer an einem Beispiel.</p>
<a href="https://et-tutorials.de/3441/pointer-und-arrays/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FOdMUStRGMUI%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Deine Aufgabe</h2>
<p>Und hier nun wie im Video versprochen die 5 Zeilen Code.</p>
<p>i_ptr=Array;<br />
for ( i=0;  i&lt;10; i++)<br />
{<br />
printf(&#8222;%d\n&#8220;,*i_ptr++);</p>
<p>}<br />
<br />
<em>Anmerkung: i ist eine Variable vom Typ integer, die selbstverständlich noch vorher definiert werden muss.</em></p>
<ul>
<li>Versuche einmal herauszufinden, was dieser Code genau macht und warum.</li>
</ul>
<ul>
<li>Überlege zunächst, bevor Du den Code compilierst und ausprobierst.</li>
</ul>
<p>Im nächsten Artikel gibt es ein paar Anmerkungen zu diesen Zeilen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3441/pointer-und-arrays/">Pointer und Arrays</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pointer in C &#8211; Lösung der Aufgabe</title>
		<link>https://et-tutorials.de/3437/pointer-in-c-losung-der-aufgabe/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 08 Nov 2010 18:09:36 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3437</guid>

					<description><![CDATA[<p>In der vergangenen Folge gab es bereits eine kleine Einführung in das Thema Pointer in C. Heute werde ich einem kurzen Artikel auf die Aufgabe aus der letzten Folge eingehen. Die Aufgabe sah folgendermaßen aus: Definiere zwei Integer-Variablen i und j und weise den Variablen Werte zu. Definiere zwei Pointer auf Integervariable und lasse diese [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3437/pointer-in-c-losung-der-aufgabe/">Pointer in C &#8211; Lösung der Aufgabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->In der vergangenen Folge gab es bereits eine kleine Einführung in das Thema <a href="https://et-tutorials.de/3368/pointer-in-c/" target="_blank">Pointer in C</a>.</p>
<p>Heute werde ich einem kurzen Artikel auf die Aufgabe aus der letzten Folge eingehen.</p>
<p>Die Aufgabe sah folgendermaßen aus:</p>
<ol>
<li>Definiere zwei      Integer-Variablen i und j und weise den Variablen Werte zu.</li>
<li>Definiere zwei Pointer auf      Integervariable und lasse diese Pointer auf die Variablen zeigen.</li>
<li>Addiere die Werte der      Variablen, indem Du NICHT die Variablen verwendest, sondern über die      Pointer gehst und gebe die Summe mit printf aus.</li>
</ol>
<p>Im folgenden Video zeige ich eine mögliche Lösung.</p>
<a href="https://et-tutorials.de/3437/pointer-in-c-losung-der-aufgabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FVk-Ot14rKRw%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<br />
Bis zum nächsten Mal. Dann geht es um das Thema Arrays und Pointer.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3437/pointer-in-c-losung-der-aufgabe/">Pointer in C &#8211; Lösung der Aufgabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pointer in C</title>
		<link>https://et-tutorials.de/3368/pointer-in-c/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Fri, 29 Oct 2010 14:09:36 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3368</guid>

					<description><![CDATA[<p>Nun kommen wir zu einem Thema, für das die Programmiersprache C berühmt, berüchtigt und teilweise auch gefürchtet ist. Es geht um Pointer. Ich weiß nicht, warum viele Programmierer solche Angst vor Pointern haben und deshalb zu viel Respekt vor der Programmiersprache C haben. Und aus diesem Grund erst gar nicht in C programmieren wollen. Denn [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3368/pointer-in-c/">Pointer in C</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/415205d893fb4079be0242487aea2e30" alt="" width="1" height="1" />Nun kommen wir zu einem Thema, für das die Programmiersprache C berühmt, berüchtigt und teilweise auch gefürchtet ist.</p>
<p>Es geht um <strong>Pointer</strong>.</p>
<p>Ich weiß nicht, warum viele Programmierer solche Angst vor Pointern haben und deshalb zu viel Respekt vor der Programmiersprache C haben. Und aus diesem Grund erst gar nicht in C programmieren wollen.</p>
<p>Denn</p>
<ol>
<li>Ist das Programmieren mit Pointer gar nicht so schwer, wenn man ohne Vorbehalt an das Thema rangeht und</li>
<li>kann man mit Pointern viele Dinge tun, die man mit anderen Programmiersprachen erst gar nicht machen kann. Statt auf eine weniger  mächtige Programmiersprache zu wechseln, könnte man dann auch einfach in C programmieren ohne Pointer zu verwenden <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ol>
<p>Wie ich unter 1. aber schon geschrieben habe, braucht man aber keine Angst vor Pointer zu haben.</p>
<h2>Was sind Pointer</h2>
<p>In diesem Artikel beginnen wir erst einmal damit, zu klären, was Pointer eigentlich sind.</p>
<p>Pointer sind nichts anderes als Variablen, in denen man keine Zahlenwerte, sondern Speicheradressen abspeichert. Man kann also beispielsweise eine Speicheradresse einer Integervariablen in einem Pointer abspeichern.</p>
<p>Der Name Pointer (engl. Zeiger) ist passend gewählt, weil ein Pointer auf eine Adresse zeigt.</p>
<p>Ein Pointer zeigt auf eine Adresse und wird daher häufig auch als <strong>Referenz</strong> bezeichnet</p>
<p>Man nennt dieses „Zeigen auf eine Adresse“ daher auch <strong>Referenzieren</strong>.</p>
<p>Wenn man einen Pointer gegeben hat und den Inhalt der Speicheradresse, auf die der Pointer zeigt nennt man das <strong>Dereferenzieren</strong>.</p>
<h2>Das Video zum Pointer</h2>
<p>Im folgenden Video zeige ich zunächst an einem konkreten Beispiel, wie man sich das Zeigen eines Pointers auf eine Speicherstelle vorstellen kann. Wie also das Referenzieren und Dereferenzieren im Speicher aussieht.</p>
<p>Anschließend zeige ich, wie die Syntax zu Pointern aussieht.</p>
<p>Man kann sich diese Syntax eigentlich sehr leicht merken.</p>
<p><strong>&</strong> bedeutet <strong>Adresse von</strong></p>
<p><strong>*</strong> Bedeutet <strong>Inhalt von</strong></p>
<p>Abschließend zeige ich die einfache Verwendung von Pointern in der Entwicklungsumgebung.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/3368/pointer-in-c/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F2bMUyYTawEo%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<h2>Deine Aufgabe</h2>
<p>Du solltest jetzt die Verwendung von Pointer selbst üben.</p>
<p>Programmier dazu zunächst einmal selbst das Beispiel aus dem Video</p>
<p>Stell Dir eigene Aufgaben, z.B.</p>
<ol>
<li> Definiere zwei Integer-Variablen i und j und weise den Variablen Werte zu.</li>
<li>Definiere zwei Pointer auf Integerervariable und lasse diese Pointer auf die Variablen zeige.</li>
<li>Addiere die Werte der Variablen, indem Du NICHT die Variablen verwendest, sondern über die Pointer gehst und gebe die Summe mit printf aus.</li>
</ol>
<p>Im nächsten Video zeige ich dann eine mögliche Lösung.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3368/pointer-in-c/">Pointer in C</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Geschachtelte for-Schleife</title>
		<link>https://et-tutorials.de/3265/geschachtelte-for-schleife/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Fri, 15 Oct 2010 11:17:45 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3265</guid>

					<description><![CDATA[<p>Im letzten Artikel hast Du die Schleifen-Programmierung mit „for“ kennengelernt. Die Aufgabe für heute bestand darin, die Anzeige für den Kaffeeautomaten so zu programmieren, dass zunächst ein „x“, dann „xx“, &#8230; auf der Anzeige erscheint. Als Befehl sollte printf(“x“); verwendet werden. Die Lösung sollte als NICHT so aussehen: 😉 printf(„x\n)“; printf(„xx\n)“; printf(„xxxx\n)“; printf(„xxxxx\n)“; &#8230; sondern [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3265/geschachtelte-for-schleife/">Geschachtelte for-Schleife</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Im letzten Artikel hast Du die <a href="https://et-tutorials.de/3206/schleifen-mit-for/">Schleifen-Programmierung mit „for“</a> kennengelernt.</p>
<p>Die Aufgabe für heute bestand darin, die Anzeige für den Kaffeeautomaten so zu programmieren, dass zunächst ein „x“, dann „xx“, &#8230; auf der Anzeige erscheint.</p>
<p>Als Befehl sollte <strong>printf(“x“);</strong> verwendet werden.</p>
<p>Die Lösung sollte als NICHT so aussehen: <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<blockquote><p>printf(„x\n)“;</p>
<p>printf(„xx\n)“;</p>
<p>printf(„xxxx\n)“;</p>
<p>printf(„xxxxx\n)“;</p>
<p>&#8230;</p></blockquote>
<p>sondern mit for-Schleifen programmiert werden.</p>
<p>Spätestens bei 1.000 Ausgaben erkennt man den Vorteil ;-).</p>
<p>Eine mögliche Lösung dazu findest Du im heutigen Video.</p>
<a href="https://et-tutorials.de/3265/geschachtelte-for-schleife/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FsPUMiC0_tdU%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3265/geschachtelte-for-schleife/">Geschachtelte for-Schleife</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Schleifen mit for</title>
		<link>https://et-tutorials.de/3206/schleifen-mit-for/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Fri, 08 Oct 2010 06:20:56 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3206</guid>

					<description><![CDATA[<p>Dies ist nun der dritte Artikel, der sich mit der Programmierung von Schleifen beschäftigt. Neben der while-Schleife und der im letzten Artikel beschriebenen do while Schleife gibt es noch eine weitere Möglichkeit, Schleifen zu programmieren. Hierbei handelt es sich um die for- Schleife. Die for-Schleife wird sehr häufig verwendet. Die Syntax für die for-Schleife sieht [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3206/schleifen-mit-for/">Schleifen mit for</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/da5370ffa4fb4ea4bffa825fb8eef3cb" alt="" width="1" height="1" />Dies ist nun der dritte Artikel, der sich mit der Programmierung von Schleifen beschäftigt.</p>
<p>Neben der <a href="https://et-tutorials.de/3033/schleifen-mit-while/">while-Schleife</a> und der im letzten Artikel beschriebenen <a href="https://et-tutorials.de/3048/schleifen-mit-do-while/">do while Schleife</a> gibt es noch eine weitere Möglichkeit, Schleifen zu programmieren.</p>
<p>Hierbei handelt es sich um die for- Schleife.<span id="more-3206"></span></p>
<p>Die for-Schleife wird sehr häufig verwendet.</p>
<p>Die Syntax für die for-Schleife sieht folgendermaßen aus:</p>
<blockquote><p>for (Initialisierung;Bedingung;Schrittweite)</p>
<p>{</p>
<p>// Schleifenkörper</p>
<p>}</p></blockquote>
<p>Wie die for-Schleife funktioniert sieht man am besten an einem Beispiel. Eine Erklärung findet Du im heutigen kurzen Video.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;"><a href="https://et-tutorials.de/3206/schleifen-mit-for/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FDb3dYxVLUrs%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br />
</div>
<p><!--wpads#Unter_Video--></p>
<h2>Deine Aufgabe</h2>
<p>Wie in der letzten Folge versprochen, gibt es endlich auch mal wieder eine Aufgabe zum üben.</p>
<p>Es geht natürlich wieder um eine Erweiterung für unseren Kaffeeautomaten.</p>
<p>Mit Hilfe von for-Schleifen soll die Fortschrittsanzeige während des Brühvorgangs ergänzt werden.</p>
<p>Statt wie in den vergangenen Artikeln eine Anzeige mit Hilfe von LEDs zu realisieren, soll die Fortschrittsanzeige nun über die serielle Schnittstelle ausgegeben werden.</p>
<p>Zunächst soll ein „x“ ausgegeben werden. Nach einer Wartezeit soll in der nächsten Zeile „xx“ ausgegeben werden, usw.</p>
<p>Dies soll weitergeführt werden bis 12 Zeilen ausgegeben worden sind.</p>
<p>In jeder Zeile soll ein „x“ mehr ausgegeben werden als in der vorherigen, so dass die Ausgabe folgendermaßen aus sieht.</p>
<blockquote><p>x<br />
xx<br />
xxx<br />
xxxx<br />
xxxxx<br />
xxxxxx<br />
xxxxxxx<br />
xxxxxxxx<br />
xxxxxxxxx<br />
xxxxxxxxxx<br />
xxxxxxxxxxx<br />
xxxxxxxxxxxx</p></blockquote>
<p>Natürlich soll dies nicht einfach mit 12 printf()s gemacht werden, sondern mit der Verwendung von for-Schleifen.  Als Ausgabebefehl soll jeweils nur ein Zeichen mit</p>
<blockquote><p>printf(„x“);</p></blockquote>
<p>ausgegeben werden.</p>
<p>Die Aufgabe läßt sich gut mit zwei geschachteln for-Schleifen lösen.</p>
<p>Dir fällt schon etwas ein ;-).</p>
<p>Eine mögliche Lösung gibt es dann in der nächsten Woche &#8230;</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3206/schleifen-mit-for/">Schleifen mit for</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Schleifen mit do while</title>
		<link>https://et-tutorials.de/3048/schleifen-mit-do-while/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 23 Sep 2010 13:21:43 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3048</guid>

					<description><![CDATA[<p>In der vergangenen Folge hatte ich mit einer while-Schleife eine Funktion programmiert, die unser Programm an den gewünschten Stellen ausbremst. Hierzu wurde ein Schleifenkörper einfach 50.000 Mal durchlaufen und so die erwünschte Verzögerungszeit einfach durch Warten verbracht. Es gibt noch weitere Möglichkeiten Schleifen zu programmieren. Eine Möglichkeit ist die sogenannte do-while Schleife. Diese Möglichkeit möchte [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3048/schleifen-mit-do-while/">Schleifen mit do while</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/6421635a7766456391f6381a63cce3af" alt="" width="1" height="1" />In der vergangenen Folge hatte ich mit einer <strong>while</strong>-Schleife eine Funktion programmiert, die unser Programm an den gewünschten Stellen ausbremst.</p>
<p>Hierzu wurde ein Schleifenkörper einfach 50.000 Mal durchlaufen und so die erwünschte Verzögerungszeit einfach durch Warten verbracht.</p>
<p>Es gibt noch weitere Möglichkeiten Schleifen zu programmieren.</p>
<p>Eine Möglichkeit ist die sogenannte <strong>do-while</strong> Schleife. Diese Möglichkeit möchte ich im heutigen Artikel vorstellen.</p>
<p>Der Aufbau der Schleifentypen ist sehr ähnlich. Eine Gegenüberstellung von <strong>while</strong> und <strong>do while</strong> macht den Unterschied deutlich.</p>
<blockquote><p>while (Bedingung)<br />
{<br />
Schleifenkörper<br />
}</p></blockquote>
<blockquote><p>do<br />
{<br />
Schleifenkörper<br />
}<br />
while (Bedingung);</p></blockquote>
<p>Bei der <strong>while</strong> Schleife wird zuerst die Bedingung überprüft. Nur wenn die  Bedingung erfüllt ist, wird der Schleifenkörper durchlaufen und anschließend die Bedingung erneut überprüft.</p>
<p>Der Schleifenkörper wird also durchlaufen solange die Bedingung erfüllt ist.</p>
<p>Bei der <strong>do while</strong> Schleife wird zuerst der Schleifenkörper durchlaufen. Anschließend wird erst die Bedingung überprüft und entschieden, ob der Schleifenkörper noch einmal durchlaufen werden soll.</p>
<p>Bei <strong>do while</strong> wird der Schleifenkörper also mindestens ein Mal durchlaufen und erst NACH dem ersten Durchlauf die Bedingung überprüft!</p>
<p>Wichtig bei <strong>do while</strong> ist das <strong>;</strong> am Ende der Zeile „while (Bedingung)“.</p>
<h2>Das Video zu do while</h2>
<p>Im Video baue ich abwechselnd <strong>while </strong>und <strong>do while</strong> in das Programm ein und erläutere die Gemeinsamkeiten und den Unterschied der beiden Konstrukte.<br />
<a href="https://et-tutorials.de/3048/schleifen-mit-do-while/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FxyHrXb_4owU%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Wie geht's weiter</h2>
<p>Beim nächsten Mal geht es um eine sehr beliebte und sehr häufig verwendete Möglichkeit, Schleifen zu programmieren.</p>
<p>Es geht dann um die for-Schleife, die vom Aufbau etwas komplizierter ist, aber dafür viele Möglichkeiten bietet. Anschließend wird es dann auch wieder Aufgaben zur Schleifenprogrammierung geben, damit Du auch wieder an's Programmieren kommst.</p>
<p><!--wpads#Unter_Video--></p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3048/schleifen-mit-do-while/">Schleifen mit do while</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Schleifen mit while()</title>
		<link>https://et-tutorials.de/3033/schleifen-mit-while/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Fri, 17 Sep 2010 11:16:21 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=3033</guid>

					<description><![CDATA[<p>>Die Sommerpause ist vorbei. Ich danke Dir für Deine Geduld, aber jetzt hat das Warten ein Ende. Es gibt ab heute wieder neue Artikel zum Mikrocontroller-Kurs. Apropos Warten. Im heutigen Artikel geht es genau darum, um’s Warten. Die Programmierung des Kaffeeautomaten soll erweitert werden. Und zwar soll während des Brühvorgangs ein Lauflicht angezeigt werden, das [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/3033/schleifen-mit-while/">Schleifen mit while()</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/f75ab63b42734b0095287275c41fdaaf" alt="" width="1" height="1" /><br />
>Die Sommerpause ist vorbei. Ich danke Dir für Deine Geduld, aber jetzt hat das Warten ein Ende. Es gibt ab heute wieder neue <a href="https://et-tutorials.de/mikrocontroller/">Artikel zum Mikrocontroller-Kurs</a>.</p>
<p>Apropos Warten. Im heutigen Artikel geht es genau darum, um’s Warten.</p>
<p>Die Programmierung des Kaffeeautomaten soll erweitert werden. Und zwar soll während des Brühvorgangs ein Lauflicht angezeigt werden, das neben den Brühgeräuschen auch visuell den Brühvorgang anzeigt.  Das Auge isst mit <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h2>Programmierung des Lauflichts</h2>
<p>Hierzu soll ein Lauflicht programmiert werden. An einem Port werden hierzu LEDs angeracht, die nun nacheinander zugeschaltet werden sollen.</p>
<p>Zunächst soll also die erste LED leuchten, dann die ersten beiden, die ersten drei usw.</p>
<p>Wenn alle acht LEDs leuchten, beginnt der Vorgang wieder von vorn.</p>
<h2>Warten mit der while-Schleife</h2>
<p>Nach der Programmierung des Lauflichts fällt auf, dass das Lauflicht viel zu schnell läuft.</p>
<p>Wenn man die Hardware aufbauen würde, sähe man nur 8 leuchtende LEDs, deren Helligkeit von der ersten bis zur achten LED zunimmt. Ein Lauflicht wäre das aber nicht.</p>
<p>Also: Die Laufgeschwindigkeit muss verringert werden.</p>
<p>Hierfür wird im Video eine Funktion wait() erstellt, die nichts anderes macht als zu warten.<br />
Wir werden später noch bessere Möglichkeiten kennenlernen, so etwas zu realisieren (Timer), zur Zeit bietet sich diese Aufgabenstellung aber gut an, um Schleifen in allen möglichen Formen und Farben kennenzulernen.</p>
<p>Ich beginne in dieser Folge mit der while() – Schleife, die Du ja als Endlosschleife in main()  schon kennst.</p>
<p>Hier soll es aber nicht um eine Endlosschleife gehen, sondern eine Schleife mit einer definierten Abbruchbedingung. Nach einer bestimmten Zeit soll die Funktion ja wieder verlassen werden.</p>
<h2>Das Video zur while-Schleife</h2>
<p>Das heutige Video ist wieder etwas länger geworden. Glücklicherweise hat Youtube die 10-Minutenbegrenzung aufgehoben, so dass ich das Video nicht aufteilen musste.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;"><a href="https://et-tutorials.de/3033/schleifen-mit-while/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FOaKakmhITr8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br />
</div>
<p>In den nächsten Folgen werde ich noch weitere Möglichkeiten der Schleifenprogrammierung zeigen.</p>
<p>Bis dahin <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<p><!--wpads#Unter_Video--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/3033/schleifen-mit-while/">Schleifen mit while()</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Array-Lösung mit Löschen des Bits</title>
		<link>https://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 29 Jun 2010 13:41:21 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2681</guid>

					<description><![CDATA[<p>Nachdem wir in der vergangenen Folge die Funktion Eingabe mit Hilfe eines Arrays realisiert haben, ist die Aufgabe, das jeweilige Portbit nach der Bearbeitung wieder zu löschen noch offen. Dies möchte ich in dieser Folge nun nachholen. In der Funktion Eingabe() steht uns lediglich die Schachtnummer, in der eine Münze eingeworfen wurde, zu Verfügung. Mit [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/">Array-Lösung mit Löschen des Bits</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/f4047960c2a04a64b2f59b5325cce9f9" alt="" width="1" height="1" /><br />
Nachdem wir in der vergangenen Folge die Funktion Eingabe mit Hilfe eines Arrays realisiert haben, ist die Aufgabe, das jeweilige Portbit nach der Bearbeitung wieder zu löschen noch offen.</p>
<p>Dies möchte ich in dieser Folge nun nachholen.</p>
<p>In der Funktion Eingabe() steht uns lediglich die Schachtnummer, in der eine Münze eingeworfen wurde, zu Verfügung. Mit Hilfe dieser Schachtnummer muss nun das entsprechende Portbit – und zwar nur dieses Portbit ! – zurückgesetzt werden.</p>
<h2>Bitweises Löschen des Portbits</h2>
<p>In der Folge über die <a href="https://et-tutorials.de/1908/bitweise-manipulation/">Bitweise Manipulation also das Bitweise Setzen und Löschen des Ports</a> habe ich ja bereits den Mechanismus vorgestellt, wie man mit dem Operator & einzelne Bits zurücksetzen kann.</p>
<p>Die Maske hierfür müssen wir uns mit der Information über die Schachtnummer nun selbst zusammenbauen.</p>
<h2>Der SHIFT-Operator</h2>
<p>Wie bereits in der letzten Folge vorbereitet, kann man dies mit dem SHIFT-Operator &lt;&lt; prima machen. In dem heutigen Video zeige ich, wie man das gewünschte Bitmuster zusammenstellen kann.</p>
<p>Hierzu kann man einfach eine 1 (binär gedacht als 00000001) soweit wie gewünscht nach links schieben. Man erhält 1 Byte mit 0, bei dem nur an der gewünschten Stelle eine 1 steht. Zieht man diesen Wert anschließend von einer 0xFF (binär gedacht 11111111) ab, erhält man die gewünschte Maske, z.B. 11111101.</p>
<p>Mit Hilfe dieser Maske kann man dann, wie in der Folge zur <a href="https://et-tutorials.de/1908/bitweise-manipulation/">Bitweise Manipulation</a>,  also das Bitweise Setzen und Löschen des Ports, gezeigt, das gewünschte Portbit zurückzusetzen. Alle anderen Portbits werden nicht verändert.</p>
<h2>Noch einfacher durch das Bitweise Invertieren</h2>
<p>Am Ende des Videos zeige ich noch, wie man die Maske noch eleganter zusammenstellen kann. Durch das Bitweise Invertieren der „geschifteten 1“ lässt sich die Maske sehr einfach erstellen.</p>
<p>Die Details im folgenden Video:<br />
<a href="https://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FrcWOU2zrV40%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p><!--wpads#Unter_Video--></p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2681/array-losung-mit-loschen-des-bits/">Array-Lösung mit Löschen des Bits</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lösung der Aufgabe und SHIFT Operator</title>
		<link>https://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 22 Jun 2010 17:19:12 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2620</guid>

					<description><![CDATA[<p>In der letzten Folge habe ich das Element Array vorgestellt. Mit einem Array kann man eine Struktur von Daten gleichen Typs sehr geschickt speichern. Auf die einzelnen Feld des Arrays kann dann sehr elegant über den geeigneten Index zugegriffen werden. Deine Aufgabe aus der letzten Woche war es, ein Array zu nutzen, um nur einen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/">Lösung der Aufgabe und SHIFT Operator</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/775efdc7bbc44f77a703236bd49a57bb" alt="" width="1" height="1" />In der letzten Folge habe ich das Element Array vorgestellt.</p>
<p>Mit einem Array kann man eine Struktur von Daten gleichen Typs sehr geschickt speichern.</p>
<p>Auf die einzelnen Feld des Arrays kann dann sehr elegant über den geeigneten Index zugegriffen werden.</p>
<p>Deine Aufgabe aus der letzten Woche war es, ein Array zu nutzen, um nur einen Parameter an die Funktion Eingabe zu übergeben.</p>
<p>In dem Array</p>
<pre>int Schacht[8]</pre>
<p>sind die 8 möglichen Zahlenwerte einer europäischen Münze gespeichert. Da sich diese Information nicht ändert, muss sie nicht bei jedem Funktionsaufruf übergeben zu werden.</p>
<p>Das heutige Video ist in 2 Teile unterteilt.</p>
<p>Im ersten Teil zeige ich eine mögliche Lösung für das Auslesen des Münzwertes aus dem Array.</p>
<p>Im zweiten Teil des Videos geht es dann um das zurücksetzen des Portbits. Anhand der Information, in welchem Schacht eine Münze erkannt worden ist, kann ein Bitmuster errechnet werden, mit dessen Hilfe das entsprechende Portbit zurückgesetzt werden kann.</p>
<h2>Die Lösung der Aufgabe</h2>
<p>Im heutigen Video geht es also zunächst um eine mögliche Lösung der Aufgabe von letzter Woche.</p>
<p>Aus der Information, an welcher Stelle eine Münze erkannt worden ist, wird der Münzwert aus dem Array gelesen und dann zum aktuellen Betrag addiert. Damit es nicht ganz so einfach ist, habe ich alles in einer Zeile programmiert.</p>
<a href="https://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fm7ETH36shIY%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Der SHIFT-Operator</h2>
<p>Nach der Addition des Münzwertes zum Gesamtbetrag muss noch das jeweilige Port-Bit zurückgesetzt werden. Wie im Video gezeigt, kann mit dem SHIFT-Operator ein Bit nach links oder rechts verschoben werden.</p>
<p>Deine Aufgabe für die nächste Woche ist es, den SHIFT Operator zu nutzen, um das korrekte Bit wieder auf 0 zu setzen. Wenn Du Dich nicht mehr so genau daran erinnerst, wie man einzelne Bits löscht, kann Dir der <a href="https://et-tutorials.de/1908/bitweise-manipulation/">Artikel über das Setzen und Löschen von Bits innerhalb eines Bytes</a> sicher helfen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2620/losung-der-aufgabe-und-shift-operator/">Lösung der Aufgabe und SHIFT Operator</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Arrays</title>
		<link>https://et-tutorials.de/2579/arrays/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 15 Jun 2010 13:47:08 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2579</guid>

					<description><![CDATA[<p>In den vergangenen Folgen ging es ja schon um die Optimierung der Programmierung für unsren Kaffeeautomaten. Bei der Aufgabenstellung zur Auslagerung von Code in Funktionen habe ich ja schon angedeutet, dass man nicht unbedingt die Münzschachtnummer UND den Wert der Münze bei jedem Funktionsaufruf übergeben muss. Wenn man weiß in welchen Münzschacht eine Münze liegt, [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2579/arrays/">Arrays</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/67f541484dab4c2f9b481819752331d4" alt="" width="1" height="1" />In den vergangenen Folgen ging es ja schon um die Optimierung der Programmierung für unsren Kaffeeautomaten.</p>
<p>Bei der Aufgabenstellung zur <a href="https://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/">Auslagerung von Code in Funktionen</a> habe ich ja schon angedeutet, dass man nicht unbedingt die Münzschachtnummer UND den Wert der Münze bei jedem Funktionsaufruf übergeben muss.</p>
<p>Wenn man weiß in welchen Münzschacht eine Münze liegt, kennt man ja auch den Wert der Münze.</p>
<p>Bei der ersten Lösung haben wir der Einfachheit beide Informationen an die Funktion Eingabe() übergeben und dort ausgewertet.</p>
<p>Im folgenden soll es darum gehen, nur die Nummer des Münzschachts zu übergeben und dann aus dieser Information, den Wert der Münze zu ermitteln.</p>
<h2>Array</h2>
<p>Dies lässt sich einfach über sogenannte Arrays realisieren.</p>
<p>In einem Array lassen sich Daten gleichen Typs in einem Feld anordnen.</p>
<p>Die einzelnen Daten lassen sich dann über einen fortlaufenden Index ansprechen.</p>
<p>Also genau das, was wir brauchen.</p>
<p>Beim Kaffeeautomaten lassen sich die einzelnen Münzschächte durchnummerieren. Die Zuordnung Schacht-Nummer und Münzwert lässt sich dann über ein Array realisieren.</p>
<p>Im Video zeige ich die</p>
<ul>
<li>Definition des Arrays</li>
<li>die Möglichkeiten der Initialisierung</li>
<li>und das Auslesen des Arrays</li>
</ul>
<a href="https://et-tutorials.de/2579/arrays/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F8U2IYvXjT3Q%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Nun bist Du wieder an der Reihe</h2>
<p>Das Array soll nun verwendet werden, um die Parameterübergabe an die Funktion Eingabe zu erleichtern. Es soll in folgenden nur noch der Index des Schachtes [0 &#8230; 7] übergeben werden.</p>
<p>In der Funktion Eingabe() soll dann der korrekte Münzwert über das Array ermittelt werden und der Gesamtbetrag entsprechend erhöht werden.</p>
<p>Das Zurücksetzen des Ports ist nun etwas schwieriger, weil wir die Schachtnummer als Index von 0 bis 7 und nicht mehr als binärcodiertes Portbit zur Verfügung haben.</p>
<p>Kümmere Dich also noch nicht um das Zurücksetzen des Ports. Dies wird Inhalt des nächsten Artikels sein.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2579/arrays/">Arrays</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lösung für eine Funktion zur Münzeingabe</title>
		<link>https://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 07 Jun 2010 18:31:26 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2436</guid>

					<description><![CDATA[<p>Im heutigen Artikel möchte ich eine mögliche Lösung für die Aufgabe aus dem letzten Artikel, nämlich die Programmierung der Funktion Eingabe() für unseren Kaffeeautomaten vorstellen. Wie immer gibt es verschiedene Möglichkeiten die Funktion zu realisieren. Mein Vorschlag ist daher nur eine mögliche Lösung. Es gibt sicher elegantere Lösung. Vor allem der Umgang mit der Variablen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/">Lösung für eine Funktion zur Münzeingabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/39342b6a47694371a3a92f68e4e319a5" alt="" width="1" height="1" />Im heutigen Artikel möchte ich eine mögliche Lösung für die Aufgabe aus dem letzten Artikel, nämlich die <a href="https://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/">Programmierung der Funktion Eingabe()</a> für unseren Kaffeeautomaten vorstellen.<br />
<!-- google_ad_section_start --><br />
Wie immer gibt es verschiedene Möglichkeiten die Funktion zu realisieren.</p>
<p>Mein Vorschlag ist daher nur eine mögliche Lösung. Es gibt sicher elegantere Lösung. Vor allem der Umgang mit der Variablen Betrag lässt sich sicher noch optimieren :-). Nähere Information gibt es dazu Video.</p>
<h2>Die Anforderungen an die Funktion Eingabe()</h2>
<p>In der Funktion Eingabe sollen zwei Dinge umgesetzt werden.</p>
<ol>
<li>Die      Erhöhung des Gesamtbetrages um den Wert der eingeworfenen Münze und die      Ausgabe des Gesamtbetrages.</li>
<li>Das      Zurücksetzen des entsprechenden Portbits, damit die Münze beim nächsten      Durchlauf nicht noch einmal gezählt wird.</li>
</ol>
<p>Um die Funktion Eingabe() zu realiseren, musst Du verschiedene Dinge, die Du in den vergangenen Folgen gelernt hast umsetzen.</p>
<p>Zur Verwendung von Funktionen kannst Du Dir evtl, noch einmal die Videos ab Artikel 22 <a href="../2155/funktionen-in-c/">Funktionen in C</a> angucken.</p>
<p>Auch die Videos zur <a href="../1226/variablenzuweisung-teil-2/">Variablenzuweisung</a>, <a href="../2369/1226/variablenzuweisung-teil-2/"></a>zur <a href="../1244/bedingte-anweisungen-mit-if/">if-Abfrage</a> und zur <a href="../1908/bitweise-manipulation/">Bitweisen Manipulation</a> können vielleicht helfen.</p>
<p>Während der erste Teil, Die Erhöhung des Gesamtbetrages um den Wert der eingeworfenen Münze und die Ausgabe des Gesamtbetrages, noch verhältnismäßig einfach ist, geht es bei dem 2. Teil der Aufgabe schon ziemlich zur Sache.</p>
<p>Wie häufig bei Funktionen, bei denen die Ausführung abhängig von Parametern ist, ist es auch in diesem Beispiel so, dass Du bei der Programmierung der Funktion noch nicht weißt, welche Parameter übergeben werden. Du musst also die Funktion so flexibel gestalten, dass aus den übergebenen Parametern die durchzuführenden Befehle errechnet werden können.<br />
<!-- google_ad_section_end --><br />
Eine mögliche Lösung findest Du im Video.</p>
<a href="https://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F7M1EDMIYppk%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<!--wpads#Unter_Video--></p>
<p>Bis zum nächsten Mal.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2436/losung-fur-eine-funktion-zur-munzeingabe/">Lösung für eine Funktion zur Münzeingabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kaffeeautomat-Funktion für die Münzauswertung</title>
		<link>https://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 01 Jun 2010 04:27:09 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2369</guid>

					<description><![CDATA[<p>Nach einem Ausflug in das Reich der Funktionen, geht es nun zurück zur Programmierung des Kaffeeautomaten. Zur Erinnerung: Der Kaffeeautomat hatte eine Münzeingabe, die alle europäischen Geldstücke vom 1 Ct Stück bis zum 2 € annimmt. Dass dies zufällig 8 verschiedene Münzen sind, freut uns natürlich. So können wir die einzelnen Münzschächte über die Bits [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/">Kaffeeautomat-Funktion für die Münzauswertung</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/1d46256a319b41d8a88f2852c1b81103" alt="" width="1" height="1" />Nach einem Ausflug in das Reich der Funktionen, geht es nun zurück zur <a href="https://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/">Programmierung des Kaffeeautomaten</a>.</p>
<p><strong>Zur Erinnerung:</strong></p>
<p>Der Kaffeeautomat hatte eine Münzeingabe, die alle europäischen Geldstücke vom 1 Ct Stück bis zum 2 € annimmt.</p>
<p>Dass dies zufällig 8 verschiedene Münzen sind, freut uns natürlich. So können wir die einzelnen Münzschächte über die Bits genau eines Bytes abfragen.</p>
<p>Eine mögliche <a href="https://et-tutorials.de/1537/programmierung-eines-kaffeeautomaten-%E2%80%93-teil-2/">Programmierung der Münzeingabe</a> haben wir ja bereits besprochen und haben anschließend noch das Programm optimiert, so dass auch mehrere Münzen gleichzeitig bzw. schnell hintereinander eingeworfen werden können.<br />
<!-- google_ad_section_start --><br />
Das war durch das <a href="https://et-tutorials.de/1991/bitweises-auslesen-eines-ports/  ">Bitweise Auslesen</a> der Information möglich.</p>
<h2>Schlanker Code</h2>
<p>Das Programm funktionierte bis dahin so weit auch ganz gut. Es fällt jedoch auf, dass der Code zur Identifikation der einzelnen Münzen fast gleich ist.</p>
<p>Das Programm besteht daher aus sehr ähnlichen Programmteilen.</p>
<p>Eine ideale Voraussetzung, um diese Programmteile in eine Funktion zu integrieren und dann jeweils nur diese Funktion aufzurufen.</p>
<p>Im folgenden Video zeige am C-Programm, was ich damit meine.<br />
<a href="https://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F7M1EDMIYppk%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Jetzt geht’s zur Sache</h2>
<p>Und hier kommt Deine Aufgabe zur nächsten Woche.</p>
<p>Versuche die Funktion Eingabe() zu realisieren, so dass sie so flexibel ist, um mit den unterschiedlichen Münzen zurecht zu kommen. Es soll also in der Funktion Eingabe der korrekte Wert zum Betrag addiert und anschließend das zughörige Bit des Ports P1 zurückgesetzt werden.<br />
<!-- google_ad_section_end --><br />
Guck Dir zur Lösung der Aufgabe am besten noch einmal die älteren Videos zum Kaffeeautomaten und die Videos zur Verwendung von Funktionen (ab Video 22 <a href="https://et-tutorials.de/2155/funktionen-in-c/">Funktionen in C</a> an.</p>
<p>Auch die Videos zur <a href="https://et-tutorials.de/1226/variablenzuweisung-teil-2/">Variablenzuweisung</a>, <a href="../1226/variablenzuweisung-teil-2/"></a> zur <a href="https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/">if-Abfrage</a> und zur <a href="https://et-tutorials.de/1908/bitweise-manipulation/">Bitweisen Manipulation</a> können vielleicht helfen.</p>
<p>In der nächsten Folge werde ich eine mögliche Lösung vorstellen. Ich empfehle aber nicht bis dahin zu warten, sondern auf jeden Fall selbst eine Lösung zu versuchen. Durch diese Aufgabe wird vieles aus den vergangenen Artikeln wiederholt und zusammengefasst. Das ist für Dich eine ideale Möglichkeit um zu überprüfen, ob Du bis hierhin wirklich alles verstanden hast.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2369/kaffeeautomat-funktion-fur-die-munzauswertung/">Kaffeeautomat-Funktion für die Münzauswertung</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lösung der Übungsaufgabe zu Funktionen</title>
		<link>https://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 24 May 2010 10:08:12 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2325</guid>

					<description><![CDATA[<p>In den vergangenen Artikeln bin ich auf die Behandlung von Funktionen und das Thema Parameterübergabe eingegangen. Zum Abschluss gab es dann im Artikel der letzten Woche eine Aufgabe. Und zwar ging es darum, mit Hilfe von Funktionen den Umfang und die Fläche eines Kreises zu berechnen. Als drittes sollte dann anschließend noch das Volumen eines [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/">Lösung der Übungsaufgabe zu Funktionen</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/bfedba8df0594dfca58ffdc4683139e4" alt="" width="1" height="1" />In den vergangenen Artikeln bin ich auf die Behandlung von Funktionen und das Thema Parameterübergabe eingegangen.</p>
<p>Zum Abschluss gab es dann im Artikel der letzten Woche eine Aufgabe. Und zwar ging es darum, mit Hilfe von Funktionen den Umfang und die Fläche eines Kreises zu berechnen.</p>
<p>Als drittes sollte dann anschließend noch das Volumen eines Zylinders berechnet werden, wobei bei der zu programmierenden Funktion volumen() auf die Funktion flaeche() zurückgegriffen werden sollte.</p>
<p>Die Berechnung der Grundfläche des Zylinders sollte also nicht in der Funktion volumen() selbst, sondern sozusagen an die Funktion flaeche delegiert werden. Also ein Aufruf einer Funktion innerhalb einer Funktion.</p>
<p>Um weiterhin mit Integer-Werten rechnen zu können, hatte ich für PI=3 vorgegeben &#8211; was ja zu 95% auch so stimmt <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Im ersten Video zeige ich Dir heute eine mögliche Lösung der Aufgabe.</p>
<a href="https://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FnE1ppb9iayo%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Da das Video zu lang geworden wäre, habe ich das Video heute wieder geteilt.  Im zweiten Teil werde ich das Programm zunächst einmal testen und dann den Quell-Code noch etwas nachbessern.</p>
<p>Auf viele Variablendefinitionen des ersten Videos kann man nämlich verzichten und somit das Programm kürzen und die Nutzung des Speicherplatzes optimieren.  Gerade wenn man mit dem Programmieren beginnt, ist es häufig einfach den Code ein bisschen ausführlicher als nötig zu schreiben und dann im zweiten Schritt das Programm zu kürzen.</p>
<p>Später, wenn man etwas mehr Erfahrung in der C-Programmierung hat, fasst man automatisch an bestimmten Stellen mehrere Befehle zusammen.  Aber auch dann sollte es m.E. nicht übertreiben. Man möchte ein C-Programm ja auch ein Jahr später noch verstehen können.  Zu sehr komprimierter C-Code ist aber häufig schwer zu lesen.    <a href="https://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F82eHdz5jSI0%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /><br />
<!--wpads#Unter_Video--></p>
<p>So, dass war zunächst einmal eine Einführung in den Bereich Funktionen. In der nächsten Folge werde ich mich wieder unserem Kaffeeautomaten zuwenden und überprüfen, an welchen Stellen wir durch den Gebrauch von Funktionen unser Programm für den Kaffeeautomaten verbessern können.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.</p>
<p>[ <a href="../mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .] </p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2325/losung-der-ubungsaufgabe-zu-funktionen/">Lösung der Übungsaufgabe zu Funktionen</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Funktionen in C, Parameterübergabe</title>
		<link>https://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 17 May 2010 09:55:06 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2305</guid>

					<description><![CDATA[<p>In der letzten Folge hatte ich bereits erläutert, wie Compiler und Linker und anschließend auch das Zielsystem, der Mikrocontroller selbst, mit Variablen umgeht, also wo Variablen gespeichert werden. Dieses Wissen hilft nun, beim Aufruf von Funktionen. Vor allem wenn es darum geht, den aufzurufenden Funktionen Parameter zu übergeben. Da das heutige Video etwas lang geworden [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/">Funktionen in C, Parameterübergabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/ddb0d2a0e9844edc80c1b1417ea466f3" alt="" width="1" height="1" />In der letzten Folge hatte ich bereits erläutert, wie Compiler und Linker und anschließend auch das Zielsystem, der Mikrocontroller selbst, mit Variablen umgeht, also wo Variablen gespeichert werden.</p>
<p>Dieses Wissen hilft nun, beim Aufruf von Funktionen. Vor allem wenn es darum geht, den aufzurufenden Funktionen Parameter zu übergeben.</p>
<p>Da das heutige Video etwas lang geworden wäre, habe ich es in 2 Teile aufgeteilt.</p>
<p>Im ersten Video zeige ich den prinzipiellen Funktionsaufruf und die Parameterübergabe sozusagen als Trockenübung.</p>
<p>Im zweiten Video werde ich dann wieder die Entwicklungsumgebung an und zeige den Funktionsaufruf am System.</p>
<h2>Alles geht über den Stack</h2>
<p>Wenn es sich vermeiden lässt, globale Variablen für die Kommunikation zwischen unterschiedlichen Funktionen zu nehmen, nutzt man lokale Variablen. Da lokale Variablen eine begrenzte Sichtbarkeit und eine begrenzte Gültigkeitsdauer haben, können Programme so besser strukturiert werden.</p>
<p>Die Variablen für die Parameterübergabe von Funktion zu Funktion werden also über den Stack übergeben.</p>
<a href="https://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FR1WEEoVBtI8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Im zweiten Video zeige ich die Implementierung des Funktionsaufrufes in der Entwicklungsumgebung und, am Ende des Videos, die Deklarationen von Funktionen, wenn Parameter mit übergeben werden sollen.<br />
<a href="https://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FqirS3cOs5M8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Nun bist Du wieder an der Reihe &#8230;</h2>
<p>Heute gibt es wieder – endlich <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> &#8211; eine Hausaufgabe.</p>
<p>Die heutige Hausaufgabe besteht aus drei Funktionen. Und zwar sollen zum einen für einen Kreis der Umfang und der Flächeninhalt berechnet werden. Zudem soll für einen Zylinder das Volumen berechnet werden.</p>
<p>Radius und Höhe sollen über den PORT 1 (Radius) und PORT 2(Höhe) eingegeben werden können. Der Einfachheit halber soll alles in der Grundeinheit m angegeben werden.</p>
<p>Die Besonderheit bei der Berechnung des Volumens für den Zylinder besteht darin, dass zur Berechnung der Grundfläche des Zylinders die vorher definierte Funktion genutzt werden soll.</p>
<p>Also:</p>
<p><strong>Programmiere die Funktionen</strong></p>
<ul>
<li>int umfang (int radius)</li>
</ul>
<ul>
<li>int flaeche (int radius)</li>
</ul>
<ul>
<li>int volumen(int radius, int hoehe)</li>
</ul>
<p>wobei in der Funktion volumen() die Funktion flaeche() genutzt werden soll.</p>
<p>Zu Beginn von main() sollen radius und hoehe über die Ports P1 und P2 eingelesen werden.</p>
<p>Am Ende von main sollen Umfang, Fläche und Volumen ausgegeben werden.</p>
<p>Hinweis:<br />
Für unsere Übung reichen grobe Werte. Wir nehmen für PI = 3</p>
<p>Und zur Erinnerung ein paar Formeln:</p>
<ul>
<li>U=2*PI*radius</li>
</ul>
<ul>
<li>A=Pi*radius²</li>
</ul>
<ul>
<li>V=A*hoehe</li>
</ul>
<p>Bis zum nächsten Mal!</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2305/funktionen-in-c-parameterubergabe/">Funktionen in C, Parameterübergabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Funktionen in C, Globale und lokale Variablen</title>
		<link>https://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 10 May 2010 12:25:01 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2276</guid>

					<description><![CDATA[<p>Was wären Funktionen doch langweilig, wenn sie immer nur das gleiche machen würden. Um Programme effizient zu machen, macht es Sinn mit unterschiedlichen Werten zu arbeiten, sogenannten Variablen. In einem der vergangenen Artikel habe ich ja schon gezeigt, welche Variablen es in der Programmiersprache C gibt. Beim Umgang mit Variablen und Funktionen stellt sich häufig [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/">Funktionen in C, Globale und lokale Variablen</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/c777df524ae14d6e854920ecb13d8cd1" width="1" height="1" alt="">Was wären Funktionen doch langweilig, wenn sie immer nur das gleiche machen würden. Um Programme effizient zu machen, macht es Sinn mit unterschiedlichen Werten zu arbeiten, sogenannten Variablen.</p>
<p>In einem der vergangenen Artikel habe ich ja schon gezeigt, welche <a href="https://et-tutorials.de/1179/datentypen-und-die-formatierte-ausgabe-mit-printf/">Variablen es in der Programmiersprache C</a> gibt.</p>
<p>Beim Umgang mit Variablen und Funktionen stellt sich häufig die Frage, auf welche Variablen kann eine Funktion zugreifen, mit welchen Variablen kann eine Funktion arbeiten.</p>
<h2>Wozu Gültigkeitsbereiche</h2>
<p>Häufig möchte man gar nicht, dass jede Variable von jeder Funktion änderbar ist. Stell Dir vor mehrere Programmierer arbeiten an einem Projekt und müssten sich einigen, wer denn seine Inter-Variable „i“ nennen darf.</p>
<p>Oder noch schlimmer: Man nutzt Funktionen aus einem anderen Projekt und müsste bevor man selbst programmiert, alle Programme durchforsten ob die Variable „Wert“ schon einmal genutzt worden ist.</p>
<p>Um dies zu verhindern unterscheidet man zwischen globalen Variablen, die global, also im gesamten Programm gelten und lokalen Variablen, die einen beschränkten Gültigkeitsbereich haben.</p>
<h2>Speicherorte von Variablen</h2>
<p>Welche Variablen global sind und welche lokal sind, versteht man am besten, wenn man sich einmal anguckt, in welche Speicherbereiche die Variablen vom Compiler/Linker bzw. vom Mikrocontroller abgelegt werden.</p>
<p>Globale Variablen kann der Compiler bei der Erstellung des Programms in den Datenbereich ablegen. Bei lokalen Variablen ist bei der Übersetzung des Programms nicht bekannt, wie häufig (oder ob überhaupt) diese Variablen  benötigt werden.</p>
<p>Im folgenden Video zeige ich daher zunächst, wie der Compiler bzw. während der Ausführung der Mikrocontroller Variablen behandelt.</p>
<a href="https://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FCgTt7j5y5QQ%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Nachdem Du nun gesehen hast, wo Compiler und Mikrocontroller die Variablen verwalten, möchte ich im nächsten Video einige Beispiele zeigen.</p>
<a href="https://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=https%3A%2F%2Fi.ytimg.com%2Fvi%2F-yUkcRWj6i8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>Am besten ist nun, Du rufst auf Deinem PC die Entwicklungsumgebung auf und testet selbst einmal die Gültigkeitsbereiche von Variablen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2276/funktionen-in-c-globale-und-lokale-variablen/">Funktionen in C, Globale und lokale Variablen</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Funktionen in C, Definition und Deklaration</title>
		<link>https://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 03 May 2010 15:12:56 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2198</guid>

					<description><![CDATA[<p>Durch die Verwendung von Funktionen kann man Programme strukturieren und effizienter machen. In unserem Beispiel möchten wir die Geldeingabe und die Getränkeausgabe für unseren Kaffeeautomaten optimieren. Gleiche Programmteile möchten wir nur einmal programmieren und dann von verschiedenen Stellen aufrufen können. Nachdem ich also in der letzten Folge schon einmal kurz die prinzipielle Verwendung von Funktion [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/">Funktionen in C, Definition und Deklaration</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/eecc26656e3e45bdb60fa881eb2bb583" alt="" width="1" height="1" />Durch die Verwendung von Funktionen kann man Programme strukturieren und effizienter machen.<br />
In unserem Beispiel möchten wir die Geldeingabe und die Getränkeausgabe für unseren Kaffeeautomaten optimieren. Gleiche Programmteile möchten wir nur einmal programmieren und dann von verschiedenen Stellen aufrufen können.</p>
<p>Nachdem ich also in der letzten Folge schon einmal kurz die prinzipielle Verwendung von Funktion angesprochen habe, möchte ich mit der heutigen Folge beginnen, etwas tiefer in das Thema Funktionen in C einzusteigen.</p>
<h2>Definition und Deklaration</h2>
<p>Konkret soll es heute um das Thema Definition und Deklarationen von Funktionen in C gehen. Um die Verwendung von Funktionen zu verstehen ist es hilfreich ein wenig über die Arbeitsweise eines Compilers zu verstehen.</p>
<p>Das prinzipielle Vorgehen beim Übersetzen eines Programms hatte ich zu Beginn des Kurs schon vorgestellt. Wenn Du Dich nicht mehr genau erinnerst, könnte diese Folge interessant sein, ich der ich die Zusammenarbeit von Compiler und Linker kurz zeige.</p>
<p>Im heutigen Video zeige ich zunächst noch einmal, wie Funktionen sich gegenseitig aufrufen können und demonstriere dann mit dem Emulator, die Probleme bei der Definition von Funktionen und die Lösung mit Hilfe der Deklaration von Funktionen.</p>
<p>Hier zunächst das heutige Video.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;">
<a href="https://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2F5au9O79NiXE%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--><br />
Die Ursprungsquelldatei:</p>
<blockquote>
<pre>/*——————————————————————————
 HELLO.C

 Copyright 1995-2005 Keil Software, Inc.
 ——————————————————————————*/

 #include &lt;REG52.H&gt;               
  #include &lt;stdio.h&gt;               
 /*————————————————
 The main C function.  Program execution starts
 here after stack initialization.
 ————————————————*/

void funk1(void); // Deklaration von funk1
void funk2(void); // Deklaration von funk2

void main (void) {

 /*————————————————
 Setup the serial port for 1200 baud at 16MHz.
 ————————————————*/
 #ifndef MONITOR51
 SCON  = 0x50;              
 TMOD |= 0x20;              
 TH1   = 221;               
 TR1   = 1;                                           
 TI    = 1;                 
 #endif

 /*————————————————
 Note that an embedded program never exits (because
 there is no operating system to return to).  It
 must loop and execute forever.
 ————————————————*/

printf("In main()\n");

while(1)
{

}

}    //end main</pre>
</blockquote>
<h2>Zusammengefasst</h2>
<p>In der <strong>Definition </strong>einer Funktion wird genau festgelegt, wie eine Funktion aufgebaut ist, welche Parameter sie übergeben bekommt und welchen Wert sie an die aufrufende Funktion zurückgibt.</p>
<p>Eine <strong>Deklaration</strong> gibt dem Compiler Informationen darüber, dass eine bestimmte Funktion existiert und welche Parameter sie erwartet und welchen Wert sie zurückgibt. Die Deklaration einer Funktion hilft dem Compiler beim weiteren Übersetzen des Programms.</p>
<p>Häufig werden Deklarationen von Funktionen in sogenannten Header-Dateien ausgelagert und dann im Quellcode über den #include-Befehl eingebettet. Dies erhöht bei größeren Programmen die Übersichtlichkeit.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2198/funktionen-in-c-definition-und-deklaration/">Funktionen in C, Definition und Deklaration</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Funktionen in C</title>
		<link>https://et-tutorials.de/2155/funktionen-in-c/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 26 Apr 2010 11:42:57 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2155</guid>

					<description><![CDATA[<p>Ähnliche oder gleiche Befehle, die öfter genutzt werden kann man besser in Funktionen ausgliedern. Für unseren Kaffeeautomaten wird beispielsweise bei der Auswertung des Geldeinwurfs jedes Mal zunächst überprüft, ob der Restbetrag noch ausreicht, eine passende Meldung ausgegeben, ggf. das Getränk ausgegeben und der Betrag entsprechend belastet. Den Code für diese Befehlfolge muss man, wenn man [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2155/funktionen-in-c/">Funktionen in C</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Ähnliche oder gleiche Befehle, die öfter genutzt werden kann man besser in Funktionen ausgliedern.</p>
<p>Für unseren Kaffeeautomaten wird beispielsweise bei der Auswertung des Geldeinwurfs jedes Mal zunächst überprüft, ob der Restbetrag noch ausreicht, eine passende Meldung ausgegeben, ggf. das Getränk ausgegeben und der Betrag entsprechend belastet.</p>
<p>Den Code für diese Befehlfolge muss man, wenn man eine Funktion hierfür schreibt, nur einmal programmieren (und im Speicher des Mikrocontrollers ablegen) und diese Funktion dann bei der Wahl eines Getränks aufrufen.</p>
<p>Wir habe in unserem Beispiel zwar nur 3 Getränke zur Auswahl um die Anwendung übersichtlich zu halten.</p>
<p>Welche Einsparung man bei 20 Getränken erhielte kann man sich aber leicht vorstellen.</p>
<h2>2 Vorteile von Funktionen</h2>
<ol>
<li>Das Programm wird durch Funktionen strukturierter.<br />
Wenn zur Verwendung einer Befehlsfolge eine Funktion genutzt wird und die Befehlfolge dann anschließend doch noch geändert werden soll, dann muss man diese Änderung nur einmal vornehmen &#8211; eben in dieser Funktion.</li>
<li>Das Programm wird kleiner.<br />
Mikrocontroller-Steuerungen sind häufig mit relativ wenig Speicher ausgestattet. Diesen Speicher muss man effektiv nutzen. Auch unser Emulator hat eine Beschränkung des Speichers, und zwar auf 2K Programmspeicher. Mit unseren derzeitigen Programmen stoßen wir schon knapp an diese Grenze.</li>
</ol>
<h2>Was sind Funktionen</h2>
<p>Eine Funktionen, die wir schon kennen, ist die Funktion main(), die direkt zu Beginn vom Mikrocontroller aufgerufen wird.</p>
<p>Weiter Funktionen können definiert und dann innerhalb von main() aufgerufen werden.</p>
<p>In dem Video zeige ich, wie man Funktionen definiert, sie dann aufruft und wie man Parameter übergibt und Rückgabewerte zurückgibt und auswertet.</p>
<h2>Das Video</h2>
<p>Schau Dir zunächst einmal das Video an. Hier geht es zunächst einmal um eine grobe Einordnung des Themas Funktionen.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;">
<a href="https://et-tutorials.de/2155/funktionen-in-c/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FYOpW3SQk83A%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<h2>Jetzt bist Du wieder an der Reihe.</h2>
<p>Die „Hausaufgabe“ ist dieses Mal etwas lose definiert.<br />
<br />
Versuche einmal mit diesen Funktionen etwas herum zu experimentieren. Bau also zunächst einmal das Beispiel nach.<br />
<br />
Vielleicht fallen Dir ähnliche Aufgabenstellungen ein, die Du mit Funktionen realisieren kannst. An der einen oder anderen Stelle wirst Du wahrscheinlich auf Probleme stoßen, die wir hier noch nicht behandelt haben.<br />
<br />
Das stört jedoch nicht – im Gegenteil. Das könnte Dir helfen beim Verständnis helfen, wenn es in den nächsten Folgen um die Feinheiten beim Gebrauch von Funktionen geht.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://ET-Tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht  es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img loading="lazy" decoding="async" src="https://ssl-vg07.met.vgwort.de/na/5a74b171c1444ff082c068fe57a7d814" width="1" height="1" alt=""></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2155/funktionen-in-c/">Funktionen in C</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programmierung der Münzeingabe</title>
		<link>https://et-tutorials.de/2050/programmierung-der-munzeingabe/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 19 Apr 2010 15:39:50 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=2050</guid>

					<description><![CDATA[<p>In der vergangenen Folge wurde exemplarisch das Setzen und Löschen der ersten drei Bits des Kaffeeautomaten gezeigt. Deine Aufgabe zu heute war es nun, das Programm so zu erweitern, dass nun alle Münzen erkannt werden. Die Aufgabe mag für Dich vielleicht trivial erscheinen, wenn Du das Beispiel in der letzen Folge verstanden hast. Das bitweise [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/2050/programmierung-der-munzeingabe/">Programmierung der Münzeingabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->In der vergangenen Folge wurde exemplarisch das Setzen und Löschen der ersten drei Bits des Kaffeeautomaten gezeigt.</p>
<p>Deine Aufgabe zu heute war es nun, das Programm so zu erweitern, dass nun alle Münzen erkannt werden.<span id="more-2050"></span></p>
<p>Die Aufgabe mag für Dich vielleicht trivial erscheinen, wenn Du das Beispiel in der letzen Folge verstanden hast.</p>
<p>Das bitweise Setzen und Löschen eines Bits ist später für das Konfigurieren des Mikrocontrollers, beim Setzen und Löschen der sogenannten Special Function Register (SFR), so wichtig, dass das Prinzip wirklich sitzen sollte.</p>
<p>Hier zunächst einmal das Video.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;">
<a href="https://et-tutorials.de/2050/programmierung-der-munzeingabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FkmW9LxfKYWw%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>In der nächsten Woche geht es darum, das Programm besser zu strukturieren, und zwar mit Funktionen. Dazu werde ich in der nächsten Folge in einer Einführung zeigen, was Funktionen eigentlich sind und wozu wir sie benötigen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/2050/programmierung-der-munzeingabe/">Programmierung der Münzeingabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bitweises Auslesen eines PORTs</title>
		<link>https://et-tutorials.de/1991/bitweises-auslesen-eines-ports/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 12 Apr 2010 07:30:21 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1991</guid>

					<description><![CDATA[<p>Im heutigen Video zeige ich eine mögliche Lösung, wie man mit Hilfe eins bitweisen UND bzw. eines bitweisen ODER die eingeworfenen Geldstücke einzeln auswerten kann. Durch dieses einzelne Auswertung ist es möglich, auch quasi gleichzeitig eingeworfene Geldstücke zu erkennen. Wichtig bei der einzelnen Auswertung der Geldstücke ist es, nach dem Auslesen eines Bits nur dieses [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1991/bitweises-auslesen-eines-ports/">Bitweises Auslesen eines PORTs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Im heutigen Video zeige ich eine mögliche Lösung, wie man mit Hilfe eins bitweisen UND bzw. eines bitweisen ODER die eingeworfenen Geldstücke einzeln auswerten kann.</p>
<p>Durch dieses einzelne Auswertung ist es möglich, auch quasi gleichzeitig eingeworfene Geldstücke zu erkennen.</p>
<p>Wichtig bei der einzelnen Auswertung der Geldstücke ist es, nach dem Auslesen eines Bits nur dieses eine Bit wieder zurückzusetzen, da sonst die Informationen über die anderen eingeworfenen Geldstücke verloren gehen.</p>
<p>Hier zunächst das Video:</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;">
<a href="https://et-tutorials.de/1991/bitweises-auslesen-eines-ports/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2Fhy01-MJz5cM%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>In diesem Video habe ich eine mögliche Lösung zum Auslesen der ersten Bits gezeigt.</p>
<p>Deine Hausaufgabe zur nächsten Folge ist es, falls Du es nicht sowieso schon geschafft hast, das Programm für die restlichen Bits so zu erweitern, dass auch die anderen möglichen Geldstücke biweise ausgelesen werden können.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1991/bitweises-auslesen-eines-ports/">Bitweises Auslesen eines PORTs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bitweise Manipulation</title>
		<link>https://et-tutorials.de/1908/bitweise-manipulation/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 06 Apr 2010 08:12:33 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1908</guid>

					<description><![CDATA[<p>Der Kaffeeautomat funktioniert ja schon im Prinzip. Aber zumindest beim Geldeinwurf gibt es noch eine kleine Schwierigkeit. Daher möchte ich heute auf eine Problemstellung eingehen, die Tim in seinem Kommentar angesprochen hat: Was passiert eigentlich, wenn jemand 2 oder mehr Münzen gleichzeitig einwirft? Wie können wir unsere Software dahingehend verbessern, damit die Software auch damit [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1908/bitweise-manipulation/">Bitweise Manipulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/7a9fb4ce016b474e8cf92877a6e3e200" width="1" height="1" alt="">Der Kaffeeautomat funktioniert ja schon im Prinzip. Aber zumindest beim Geldeinwurf gibt es noch eine kleine Schwierigkeit.</p>
<p><!--wpads#Artikel-obenlinks-->Daher möchte ich heute auf eine Problemstellung eingehen, die <a href="https://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/#comment-339" target="_blank" rel="noopener noreferrer">Tim in seinem Kommentar</a> angesprochen hat:</p>
<ul>
<li>Was passiert eigentlich, wenn jemand 2 oder mehr Münzen gleichzeitig einwirft?</li>
</ul>
<ul>
<li>Wie können wir unsere Software dahingehend verbessern, damit die Software auch damit umgehen kann?</li>
</ul>
<p>Tim hat recht: Wenn jemand zwei Geldmünzen gleichzeitig einwirft, oder so schnell hintereinander, dass der Mikrocontroller aus welchem Grund auch immer, noch beschäftigt ist und die Eingabe einzelnen Münzen nicht schnell genug abarbeiten kann, gibt es ein Problem. Nur die erste Münze wird gewertet, der Werte der anderen eingeworfenen Münzen geht verloren.</p>
<p>Eine Lösung dieses Problems besteht darin, die Bits des Ports einzeln abzufragen.</p>
<p>So kann bestimmt werden, ob eine Münze eingeworfen wurde, unabhängig davon, ob zusätzlich auch noch weitere Münzen eingeworfen wurden.</p>
<p>In dem Video wird mit hexadezimalen Zahlen gerechnet. Wenn Du Dir den Umgang mit Hex-Zahlen und die teilweise kryptische Art der Variablenzuweisung noch einmal vergegenwärtigen möchtest, dann empfehle ich Dir vorab noch diese 4 Artikel</p>
<p><a href="https://et-tutorials.de/973/binare-dezimale-und-hexadezimale-zahlen/" target="_blank" rel="noopener noreferrer">Binäre, dezimale und hexadezimale Zahlen</a></p>
<p><a href="https://et-tutorials.de/1098/bits-bytes-und-nibbles/" target="_blank" rel="noopener noreferrer">Bits, Bytes und Nibbles</a></p>
<p><a href="https://et-tutorials.de/1218/variablenzuweisung-und-modulo-funktion/" target="_blank" rel="noopener noreferrer">Variablenzuweisung und modulo-Funktion</a></p>
<p><a href="https://et-tutorials.de/1226/variablenzuweisung-teil-2/" target="_blank" rel="noopener noreferrer">Variablenzuweisung (Teil2)</a></p>
<p>Nun aber zum Video über die bitweise Manipulation.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;">
<a href="https://et-tutorials.de/1908/bitweise-manipulation/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FypGRYaP1GsM%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<h2>Nun bist Du wieder an der Reihe.</h2>
<p>Deine Aufgabe ist es nun, ein Programm zu schreiben, das auch erkennt, wenn mehrere Münzen eingeworfen wurden.</p>
<p>Es ist hier wahrscheinlich einfacher, if-Abfragen statt switch-case-Abfragen zu nutzen.</p>
<p>Wichtig ist auch, dass Du, wenn Du ein Bit ausgewertet hast, nicht den gesamten Port zurückzusetzen, sondern nur das in Deinem Programm ausgewertete Bit.</p>
<p>Viel Spaß beim Programmieren!</p>
<p>In der nächsten Woche werde ich dann wieder eine mögliche Lösung zeigen.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1908/bitweise-manipulation/">Bitweise Manipulation</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programmierung der Getränkeausgabe</title>
		<link>https://et-tutorials.de/1706/programmierung-der-getrankeausgabe/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 30 Mar 2010 07:33:03 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1706</guid>

					<description><![CDATA[<p>In der vergangenen Woche haben wir eine mögliche Lösung für eine Zähleinrichtung der Geldeingabe für den Kaffeeautoamten betrachtet. Heute soll es nun um die Getränkeausgabe gehen. Je nach Getränk muss ein anderer Preis berechnet. Dieser Preis wird dann vom Guthaben abgezogen. Unser Kaffeeautomat bietet 3 Getränke Kaffee 30 Ct Espresso 40 Ct Cappuchino 50 Ct [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1706/programmierung-der-getrankeausgabe/">Programmierung der Getränkeausgabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->In der vergangenen Woche haben wir eine mögliche Lösung für eine Zähleinrichtung der Geldeingabe für den Kaffeeautoamten betrachtet.</p>
<p>Heute soll es nun um die Getränkeausgabe gehen.</p>
<p>Je nach Getränk muss ein anderer Preis berechnet. Dieser Preis wird dann vom Guthaben abgezogen.</p>
<p>Unser Kaffeeautomat bietet 3 Getränke</p>
<ul>
<li> Kaffee 30 Ct</li>
</ul>
<ul>
<li> Espresso 40 Ct</li>
</ul>
<ul>
<li> Cappuchino 50 Ct</li>
</ul>
<p><span id="more-1706"></span></p>
<p>Die Wahl des Getränks soll über die Buchstaben &#8222;<strong>k</strong>&#8220; für Kaffee, &#8222;<strong>e</strong>&#8220; für Espresso und &#8222;<strong>c</strong>&#8220; für Cappuchino über die Tastatur erfolgen.</p>
<p>Nach der Wahl des Getränks wird das Getränk in der Maschine produziert und der Preis vom Guthaben, das vorher eingezahlt wurde, abgezogen.</p>
<p>Eine möglich Lösung, die ich im heutigen Video zeige, realisiert die Anforderung wieder über eine switch-case Anweisung.</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;"><a href="https://et-tutorials.de/1706/programmierung-der-getrankeausgabe/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FqgU9F5CAeuo%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br />
</div>
<p><!--wpads#Unter_Video--><br />
Die Lösung ist noch ziemlich rudimentär und nicht sehr benutzerfreundlich. Prinzipiell funktioniert unser kleines Programm aber schon ganz gut. Wenn Du Lust hast, kannst Du das Programm vielleicht noch an einigen Stellen verbessern.</p>
<p>In der nächsten Folge werden wir eine <a href="https://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/#comment-339" target="_blank">Frage von Tim</a> aufgreifen. Und zwar benötigen wir eine Möglichkeit, einzelne Bits zu setzen und zu löschen, wenn beispielsweise gleichzeitig eine 10 Ct &#8211; und eine 50 Ct- Münze eingeworfen wurde.<br />
<!-- google_ad_section_start --><br />
<strong>Ein wichtiger Hinweis:</strong><br />
Durch die printf()-Ausgabe wird der Programmcode schnell sehr groß. Mein Beispielprogramm kratzt schon knapp an das 2K-Limit.<br />
Hier jusst Du also aufpassen. Wenn Dein Programm größer als 2 kByte werden sollte, wird es nicht auf den kostenfreien Simulator ausgeführt.<br />
Dann solltest Du versuchen, an der einen oder anderen Stelle die printf()-Anweisungen zu kürzen.</p>
<p>Hier noch einmal der C-Code aus dem Video.</p>
<pre>c=getchar();
 switch (c)
 {
 case 'k':
 if (Betrag&lt;30)
 {
 printf("Kaffee kostet 30 Cent\n");
 printf("Restbetrag: %d Cent\n", Betrag);
 printf("Bitte werfen Sie (mindestens) %d Cent ein\n",30-Betrag);

 break;
 }
 printf("\nSie haben Kaffee gewählt\n");
 printf("Restbetrag: %d Cent\n", Betrag-=30);
 c=0;
 break;
 case 'e':
 if (Betrag&lt;40)
 {
 printf("Espresso kostet 40 Cent\n");
 printf("Restbetrag: %d Cent\n", Betrag);
 printf("Bitte werfen Sie (mindestens) %d Cent ein\n",40-Betrag);
 break;
 }
 printf("\nSie haben Espresso gewählt\n");
 printf("Restbetrag: %d Cent\n", Betrag-=40);
 c=0;
 break;
 case 'c':
 if (Betrag&lt;50)
 {
 printf("Cappuchino kostet 50 Cent\n");
 printf("Restbetrag: %d Cent\n", Betrag);
 printf("Bitte werfen Sie (mindestens) %d Cent ein\n",50-Betrag);

 break;
 }
 printf("\nSie haben Cappuchino gewählt\n");
 printf("Restbetrag: %d Cent\n", Betrag-=50);
 c=0;
 break;
 }</pre>
<p><!-- google_ad_section_end --><br />
Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<br />
<img loading="lazy" decoding="async" src="https://ssl-vg07.met.vgwort.de/na/e2c9f0eb2f9541d1a2aadac801c26558" width="1" height="1" alt=""></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1706/programmierung-der-getrankeausgabe/">Programmierung der Getränkeausgabe</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programmierung eines Kaffeeautomaten – Teil 2</title>
		<link>https://et-tutorials.de/1537/programmierung-eines-kaffeeautomaten-%e2%80%93-teil-2/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 23 Mar 2010 07:21:02 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1537</guid>

					<description><![CDATA[<p>Wie versprochen möchte ich diese Folge mit einer möglichen Lösung der Programmieraufgabe für die Zähleinrichtung beginnen. Wie so häufig, gibt es viele Wege, die nach Rom führen. Meine Lösung ist also nicht die einzige und sehr wahrscheinlich auch nicht die beste und schönste Lösung, die man sich vorstellen kann. Meine Lösung sieht prinzipiell folgendermaßen aus. [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1537/programmierung-eines-kaffeeautomaten-%e2%80%93-teil-2/">Programmierung eines Kaffeeautomaten – Teil 2</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">
Wie versprochen möchte ich diese Folge mit einer möglichen Lösung der Programmieraufgabe für die Zähleinrichtung beginnen.</p>
<p style="text-align: left;">Wie so häufig, gibt es viele Wege, die nach Rom führen.</p>
<p style="text-align: left;">Meine Lösung ist also nicht die einzige und sehr wahrscheinlich auch nicht die beste und schönste Lösung, die man sich vorstellen kann.</p>
<p>
Meine Lösung sieht prinzipiell folgendermaßen aus.</p>
<p>In einer Integer-Variablen <strong>&#8222;Betrag&#8220;</strong> wird der bereits in den Kaffeeautomaten eingeworfene Geldbetrag gespeichert.</p>
<p>Mit jeder neuen Münze wird also die Variable Betrag entsprechend hochgezählt.</p>
<p>Um zu entscheiden, welchen Geldbetrag zur Variablen Betrag addiert werden soll, muss der Münzschacht über P1 ausgelesen werden.</p>
<p>Abhängig davon, welchen Bit in P1 gesetzt ist, also welche Münze eingeworfen wurde, wird der zugehörige Geldbetrag addiert.</p>
<p>Am Ende der switch-case Abfrage wird das Programm mit getchar() angehalten, damit eine neue Münze eingeworfen bzw. ein neues Bit in P1 gesetzt werden kann.</p>
<p>Und nun viel Spaß mit dem Video.</p>
<p style="text-align: left;">Here we are &#8230;</p>
<div style="padding:10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height:360px; width:640px; margin:35px auto 35px auto;">
<a href="https://et-tutorials.de/1537/programmierung-eines-kaffeeautomaten-%e2%80%93-teil-2/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FGtF51oo3ltg%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p style="text-align: left;">Für den Fall dass Du den Code einmal ausprobieren möchtest, aber nicht alles abtippen willst, kopiere ich das C-Programm einmal hierher:</p>
<blockquote>
<p style="text-align: left;">P1=0;<br />
printf(&#8222;Los gehts..&#8220;);</p>
<p>while(1){</p>
<p>switch (P1)<br />
{<br />
case 1:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=1);<br />
P1=0;<br />
break;</p>
<p>case 2:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=2);<br />
P1=0;<br />
break;</p>
<p>case 4:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=5);<br />
P1=0;<br />
break;</p>
<p>case 8:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=10);<br />
P1=0;<br />
break;</p>
<p>case 16:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=20);<br />
P1=0;<br />
break;</p>
<p>case 32:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=50);<br />
P1=0;<br />
break;</p>
<p>case 64:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=100);<br />
P1=0;<br />
break;</p>
<p>case 128:<br />
printf(&#8222;Betrag: %d Cent&#8220;, Betrag+=200);<br />
P1=0;<br />
break;</p>
<p>}<br />
printf(&#8222;\n&#8220;);<br />
getchar();  // damit das Programm hier wartet</p></blockquote>
<p>Dies soll nur eine mögliche Lösung sein. Es gibt sicher noch elegantere Lösungen, die beispielsweise ohne das getchar() auskommen, damit dieses lästige Wechseln des Eingabefensters wegfällt.</p>
<p>So könnte man z.B. eine Warteschleife</p>
<p>while(P1==0);</p>
<p>einbauen und somit darauf warten, ob überhaupt eine Münze eingeworfen wurde.</p>
<h2 style="text-align: left;">Kaffeeausgabe</h2>
<p style="text-align: left;">Im zweiten Teil der Aufgabe soll natürlich auch die Kaffeeausgabe überwacht werden.</p>
<p style="text-align: left;">Unser Kaffeeautomat bietet 3 Getränke</p>
<ul>
<li>Kaffee 	30 Ct</li>
</ul>
<ul>
<li> Espresso	40 Ct</li>
</ul>
<ul>
<li> Cappuchino	50 Ct</li>
</ul>
<p style="text-align: left;">Die Wahl des Getränks soll über die Buchstaben “<strong>k</strong>” für Kaffee, “<strong>e</strong>” für Espresso und “<strong>c</strong>” für Cappuchino über die Tastatur erfolgen.</p>
<p style="text-align: left;">Bei Wahl des entsprechenden Getränks muss der Betrag natürlich wieder vom Guthaben abgezogen werden.</p>
<p style="text-align: left;">Ergänze also Dein Programm um diese Funktionalität.</p>
<p style="text-align: left;">Bis zum nächsten Mal!</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1537/programmierung-eines-kaffeeautomaten-%e2%80%93-teil-2/">Programmierung eines Kaffeeautomaten – Teil 2</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programmierung eines Kaffeeautomaten</title>
		<link>https://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 15 Mar 2010 18:52:32 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<category><![CDATA[TOP Artikel]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1519</guid>

					<description><![CDATA[<p>In den vergangenen Folgen haben wir uns um die absoluten Grundlagen der Programmiersprache „C“ gekümmert und uns an das Arbeiten mit Compiler, Linker und Emulator gewöhnt. Programmieren lernt man aber nur durch Programmieren. Es ist also höchste Zeit für ein kleines Projekt, um das bisher Erlernte zu üben, die Themen zu vertiefen und auch neue [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/">Programmierung eines Kaffeeautomaten</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/0b1ef76bba4b4867b27d396342397e0c" alt="" width="1" height="1" /></p>
<p style="text-align: left;"><!-- google_ad_section_start --><br />
In den vergangenen Folgen haben wir uns um die absoluten Grundlagen der Programmiersprache „C“ gekümmert und uns an das Arbeiten mit Compiler, Linker und Emulator gewöhnt.</p>
<p style="text-align: left;">Programmieren lernt man aber nur durch Programmieren.</p>
<p style="text-align: left;">Es ist also höchste Zeit für ein kleines Projekt, um das bisher Erlernte zu üben, die Themen zu vertiefen und auch neue Dinge an einem konkreten Beispiel kennenzulernen.</p>
<p style="text-align: left;">Die Anwendung der Programmierung an einem konkreten Projekt macht zudem mehr Spaß.<span id="more-1519"></span></p>
<p><!-- google_ad_section_end --></p>
<p style="text-align: left;">Ich habe mir das so vorgestellt:</p>
<p style="text-align: left;">Als Beispielprojekt würde ich gern die Zähleinrichtung eines Kaffeeautomaten programmieren.</p>
<h2 style="text-align: left;">Der Kaffeeautomat</h2>
<p style="text-align: left;">Der Kaffeeautomat besteht aus einem Münzeinwurf, in dem Euro- und Cent-Münzen eingeworfen werden können. Das eingeworfene Geld wird von einer Hardware erkannt und je nach dem welcher Münzwert erkannt wird, ein Port-Bit gesetzt.</p>
<p style="text-align: left;">Wir verwenden den Port 1 und nutzen folgende Zuordnung.</p>
<p style="text-align: left;"><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1628" style="margin-left: 50px; margin-right: 50px;" title="Portbelegung" src="https://et-tutorials.de/wp-content/uploads/2010/03/Portbelegung.jpg" alt="Portbelegung" width="505" height="47" srcset="https://et-tutorials.de/wp-content/uploads/2010/03/Portbelegung.jpg 505w, https://et-tutorials.de/wp-content/uploads/2010/03/Portbelegung-300x27.jpg 300w" sizes="(max-width: 505px) 100vw, 505px" /></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">Wird also ein 2 Ct-Stück eingeworfen, wird das Bit Nr. 1 (von rechts mit 0 beginnend) auf „1“ gesetzt. Der Einwurf eines 2 Euro-Stücks setzt das höchstwertige Bit, also Bit Nr. 7.</p>
<h2 style="text-align: left;">Das Geld muss gezählt werden</h2>
<p style="text-align: left;">Unser Programm für die Zähleinrichtung soll das eingeworfene Geld zählen.<br />
Dies kann man machen, indem man den aktuellen Betrag in einer Variablen speichert und bei Einwurf eines weiteren Geldstücks den Betrag entsprechend erhöht.<br />
<!--wpads#Unter_Video--><br />
Das Geld wird also eingeworfen. Nachdem die ENTER-Taste betätigt worden ist, soll das Geld dem Guthaben gutgeschrieben werden. Hinweis: Bitte vor dem Druck auf die ENTER-Taste in das Fenster für die serielle Schnittstelle wechseln, damit der Simulator die Eingabe interpretieren kann.</p>
<p style="text-align: left;">Das aktuelle Guthaben soll ausgegeben werden.</p>
<h2 style="text-align: left;">Jetzt bist Du an der Reihe</h2>
<p style="text-align: left;">Jetzt geht es für Dich darum, die Zähleinrichtung zu programmieren. Eine mögliche Lösung werde ich in der nächsten Folge vorstellen, bevor es dann weiter um die Getränkeausgabe geht.</p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1519/programmierung-eines-kaffeeautomaten/">Programmierung eines Kaffeeautomaten</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Anzeigensteuerung für einen Kessel</title>
		<link>https://et-tutorials.de/1264/anzeigensteuerung-fur-einen-kessel/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 02 Mar 2010 06:45:28 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1264</guid>

					<description><![CDATA[<p>Am Ende der letzten Folge hatte ich die Aufgabe gestellt, eine Anzeigensteuerung für einen chemischen Prozess zu realisieren. Diese Aufgabe sollte mit if/else-Statements gelöst werden. Hierzu wurden zunächst Informationen über die Kesseltemperatur und den Kesseldruck über den Port P1 eingelesen. Abhängig von diesen Zustandsmeldungen sollten dann Meldungen ausgegeben werden. Über die serielle Schnittstelle sollte ausgegeben [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1264/anzeigensteuerung-fur-einen-kessel/">Anzeigensteuerung für einen Kessel</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--> Am Ende der letzten Folge hatte ich die Aufgabe gestellt, eine Anzeigensteuerung für einen chemischen Prozess zu realisieren.</p>
<p>Diese Aufgabe sollte mit if/else-Statements gelöst werden.</p>
<p>Hierzu wurden zunächst Informationen über die Kesseltemperatur und den Kesseldruck über den Port P1 eingelesen.</p>
<p>Abhängig von diesen Zustandsmeldungen sollten dann Meldungen ausgegeben werden.</p>
<p>Über die serielle Schnittstelle sollte ausgegeben werden, ob</p>
<ul>
<li>die Temperatur zu hoch ist,</li>
</ul>
<ul>
<li>der Druck zu hoch ist,</li>
</ul>
<ul>
<li>Temperatur und Druck zu hoch ist, oder</li>
</ul>
<ul>
<li>alles OK ist</li>
</ul>
<p>Über den Port P1 wird die Information über den Zustand des Kessels zur Verfügung gestellt.</p>
<p>Im folgenden Video zeige ich eine Möglichkeit der Realisierung.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1264/anzeigensteuerung-fur-einen-kessel/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FCJhzMXk_s5U%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1264/anzeigensteuerung-fur-einen-kessel/">Anzeigensteuerung für einen Kessel</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bedingte Anweisungen mit if</title>
		<link>https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 22 Feb 2010 20:00:29 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1244</guid>

					<description><![CDATA[<p>In der vergangenen Folge haben wir uns Bedingungen und Vergleiche angeschaut. Dies können wir nun für die bedingten Anweisungen gut gebrauchen. Eine bedingte Anweisung nötigt den Mikrocontroller dazu, wie der Name schon sagt, abhängig von bestimmten Bedingungen gewünschte Anweisungen durchzuführen. Dies kann man beispielsweise bei Steuerungsaufgaben dazu nutzen, um auf Anforderung ein Transportband zu starten [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/">Bedingte Anweisungen mit if</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;"><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">In der vergangenen Folge haben wir uns Bedingungen und Vergleiche angeschaut.</p>
<p style="text-align: left;">Dies können wir nun für die bedingten Anweisungen gut gebrauchen.</p>
<p style="text-align: left;">Eine bedingte Anweisung nötigt den Mikrocontroller dazu, wie der Name schon sagt, abhängig von bestimmten Bedingungen gewünschte Anweisungen durchzuführen.</p>
<p style="text-align: left;">Dies kann man beispielsweise bei Steuerungsaufgaben dazu nutzen, um auf Anforderung ein Transportband zu starten und bei Erreichen einer Endbedingung, wie z.B. einer Lichtschranke wieder zu stoppen.</p>
<p style="text-align: left;">Solchen Aufgaben, die man mit bedingten Anweisungen lösen kann, begegnet man regelmäßig in der Steuerungstechnik.</p>
<h2>Die Struktur der bedingten Anweisung</h2>
<p>Die Struktur sieht dabei folgendermaßen aus:</p>
<p><strong>if</strong> ( Bedingung )</p>
<p>{ Anweisungen 1 }</p>
<p><strong>else</strong></p>
<p>{ Anweisungen 2 }</p>
<h2>Erweiterung der bedingten Anweisung mit else</h2>
<p>Mit else if kann die Bedingte Anweisung noch weiter geschachtelt werden:</p>
<p><strong>if</strong> ( Bedingung1 )</p>
<p>{ Anweisungen 1}</p>
<p><strong>else</strong> <strong>if</strong> ( Bedingung2 )</p>
<p>{ Anweisungen 2 }</p>
<p><strong>else</strong></p>
<p>{ Anweisungen 3 }</p>
<p>Im Video zeige ich wie man das Beispiel aus der vorletzten Folge umsetzt und erweitert.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FMW8IoVDSFDQ%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<h2>Nun bist Du wieder an der Reihe</h2>
<p>Es soll eine Anzeigensteuerung für einen chemischen Prozess realisiert werden.</p>
<p>Zentrale Komponente des Prozesses ist ein Kessel, in dem eine Flüssigkeit erhitzt wird. Kritisch bei dem vorliegenden Prozess ist</p>
<ol>
<li>die Temperatur T der Flüssigkeit und</li>
<li>der Druck P</li>
</ol>
<p>Über die serielle Schnittstelle soll ausgegeben werden, ob</p>
<ol>
<li>die Temperatur zu hoch ist,</li>
<li>der Druck zu hoch ist,</li>
<li>Temperatur und Druck zu hoch ist, oder</li>
<li>alles OK ist</li>
</ol>
<p>Über den Port P1 wird die Information über den Zustand des Kessels zur Verfügung gestellt.</p>
<p>Das niederwertigste Bit wird gesetzt, falls die Temperatur zu hoch ist,<br />
das nächste Bit wird gesetzt, falls der Druck zu hoch ist.</p>
<p>Es gibt also folgende Möglichkeiten</p>
<pre><strong>00000001</strong> T zu hoch</pre>
<pre><strong>00000010</strong> P zu hoch</pre>
<pre><strong>00000011 </strong>P und T zu hoch</pre>
<pre><strong>00000000</strong> Alles OK.</pre>
<p>Die Ausgabe soll also wie im folgenden Video gezeigt aussehen.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2F0roZw4W3yxE%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<p><img loading="lazy" decoding="async" src="https://ssl-vg07.met.vgwort.de/na/e4fcd79623824330aef36ff506efbe8d" width="1" height="1" alt=""></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1244/bedingte-anweisungen-mit-if/">Bedingte Anweisungen mit if</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mikrocontroller.net – das Portal rund um den AVR-Mikrocontroller</title>
		<link>https://et-tutorials.de/1438/mikrocontroller-net-%e2%80%93-das-portal-rund-um-den-avr-mikrocontroller/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 18 Feb 2010 19:25:02 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Tipps für E-Techniker]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1438</guid>

					<description><![CDATA[<p>Neben dem Mikrocontroller-Kurs hier bei ET-Tutorials.de, den ich Dir hiermit ans Herz legen möchte, gibt es selbstverständlich noch weitere sehr interessante Quellen zum Thema Mikrocontrollertechnik. Heute möchte ich Euch eine Webseite vorstellen, die für Elektrotechniker, vor allem für diejenigen, die sich auch mit dem Thema Mikrocontroller und Elektronik beschäftigen, eine hilfreiche Anlaufstelle sein kann. Auf [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1438/mikrocontroller-net-%e2%80%93-das-portal-rund-um-den-avr-mikrocontroller/">Mikrocontroller.net – das Portal rund um den AVR-Mikrocontroller</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">Neben dem <a href="https://et-tutorials.de/mikrocontroller/" target="_self">Mikrocontroller-Kurs hier bei ET-Tutorials.de</a>, den ich Dir hiermit ans Herz legen möchte, gibt es selbstverständlich noch weitere sehr interessante Quellen zum Thema Mikrocontrollertechnik.</p>
<p style="text-align: left;">Heute möchte ich Euch eine Webseite vorstellen, die für Elektrotechniker, vor allem für diejenigen, die sich auch mit dem Thema Mikrocontroller und Elektronik beschäftigen, eine  hilfreiche Anlaufstelle sein kann.</p>
<p style="text-align: left;">Auf www.mikrocontroller.net findet man eine Seite mit einer sehr umfassenden Einführung in die Welt der AVR-Mikrocontroller der Firma Atmel.</p>
<p style="text-align: left;">In der folgenden Kurzbeschreibung möchte ich auf die wesentlichen Stärken dieser Seite eingehen.</p>
<h2 style="text-align: left;">Umfangreiches AVR-Tutorial</h2>
<p style="text-align: left;">Neben einer Übersicht zum Thema AVR-Mikrocontroller gibt es ein Tutorial, in dem die Programmierung von AVR-Mikrocontrollern sehr detailliert erläutert wird.<br />
Informationen zu weiteren Mikrocontrollerfamilien der Firmen ARM und Texas Instruments und Bereiche zu den Themen FPGA und Digitaler Signalverarbeitung ergänzen das Angebot.</p>
<h2 style="text-align: left;">Das Forum</h2>
<p style="text-align: left;">Herz von www.mikrocontroller.net und für viele Besucher die wichtigste Anlaufstelle ist das sehr aktive Forum.</p>
<p style="text-align: left;">Vor allem die Bereiche „µC und Elektronik“ und „Analogtechnik“ sind sehr beliebt.</p>
<p style="text-align: left;">Anfänger finden hier Hilfestellung zu vielen Fragen. Erfahrene finden in den Foren die Ansprechpartner, um auch kniffeligere Probleme gemeinsam diskutieren und lösen zu können.</p>
<h2 style="text-align: left;">Fazit</h2>
<p style="text-align: left;">www.mikrocontroller.net ist eine sehr gelungene Seite, die man vor allem wegen der starken Community regelmäßig besuchen sollte.<br />
<!--wpads#Unter_Video--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1438/mikrocontroller-net-%e2%80%93-das-portal-rund-um-den-avr-mikrocontroller/">Mikrocontroller.net – das Portal rund um den AVR-Mikrocontroller</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bedingungen und Vergleiche</title>
		<link>https://et-tutorials.de/1236/bedingungen-und-vergleiche/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 15 Feb 2010 19:55:16 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1236</guid>

					<description><![CDATA[<p>In der heutigen Folge stelle ich das Vergleichen von Ausdrücken in Bedingungen vor. Bedingungen werden benutzt um in Abhängigkeit bestimmter Ereignisse, z.B. dem Zustand von Variablen oder wie im Video gezeigt den Eingangsgrößen von Ports, gewünschte Aktionen auszuführen. Im Video wird beispielsweise gezeigt, wie ich die Ausgabe über die serielle Schnittstelle davon abhängig machen kann, [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1236/bedingungen-und-vergleiche/">Bedingungen und Vergleiche</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--> In der heutigen Folge stelle ich das Vergleichen von Ausdrücken in Bedingungen vor. Bedingungen werden benutzt um in Abhängigkeit bestimmter Ereignisse, z.B. dem Zustand von Variablen oder wie im Video gezeigt den Eingangsgrößen von Ports, gewünschte Aktionen auszuführen.</p>
<p>Im Video wird beispielsweise gezeigt, wie ich die Ausgabe über die serielle Schnittstelle davon abhängig machen kann, ob der Wert von Port 1 größer, gleich oder kleiner als der Wert in Port 2 ist.</p>
<p>Für den Vergleich stehen mehrere Vergleichsoperatoren zur Verfügung</p>
<pre><strong>Operator	Funktion</strong>
 ==	        Gleich
 !=	        Ungleich
 &gt;	        Größer
 &gt;=	        Größer oder gleich
 &lt;	        Kleiner
 &lt;=	        Kleiner oder gleich
 &&	        Logisches UND
 ||	        Logisches ODER
 !	        Negation</pre>
<p>Häufig muss man mehrere Vergleiche schachteln. Damit der Compiler geschachtelte Vergleiche richtig interpretieren kann, ist die Reihenfolge der Vergleiche festgelegt.</p>
<p>Es gilt</p>
<p><strong>&lt;, &lt;=,&gt;,&gt;=</strong> hat Vorrang vor <strong>==, !=</strong> hat Vorrang vor<strong> &&, ||</strong></p>
<p>Ich empfehle jedoch, mit Klammern zu definieren, was man genau vergleichen möchte.</p>
<p>So ist man auf der sicheren Seite.</p>
<p>Also statt<strong> if ( <strong>a &lt; b  &&  b &lt; c</strong> )</strong> würde ich <strong>if ( <strong>(a&lt;b)  &&  (b&lt; c</strong>) ) </strong>schreiben, obwohl die Klammern hier eigentlich überflüssig sind.</p>
<p>Diese Vergleiche werden häufig in Schleifen (dazu mehr in späteren Folgen) oder in if-Abfragen verwendet.</p>
<p>Ein kleines Beispiel zeige ich im folgenden Video:</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1236/bedingungen-und-vergleiche/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FY8sMdAofWyM%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--><br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1236/bedingungen-und-vergleiche/">Bedingungen und Vergleiche</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Variablenzuweisung &#8211; Teil 2</title>
		<link>https://et-tutorials.de/1226/variablenzuweisung-teil-2/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 08 Feb 2010 19:15:36 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1226</guid>

					<description><![CDATA[<p>In der Programmiersprache C hat man viele Möglichkeiten die Befehle abzukürzen. C hat daher leider und vor allem zu unrecht den Ruf etwas kryptisch zu sein. Denn eins ist wichtig: Man kann die Befehle sehr kurz und damit sicher auch kryptisch darstellen – man muss es aber nicht tun. Gerade für den Einsteiger macht es [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1226/variablenzuweisung-teil-2/">Variablenzuweisung &#8211; Teil 2</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">In der Programmiersprache C hat man viele Möglichkeiten die Befehle abzukürzen. C hat daher leider und vor allem zu unrecht den Ruf etwas kryptisch zu sein.</p>
<p style="text-align: left;">Denn eins ist wichtig: Man kann die Befehle sehr kurz und damit sicher auch kryptisch darstellen – man muss es aber nicht tun.</p>
<p style="text-align: left;">Gerade für den Einsteiger macht es häufig mehr Sinn die Befehle etwas ausführlicher zu formulieren und somit die Lesbarkeit für den Anfänger zu erhöhen.</p>
<p style="text-align: left;">Hat man später etwas Erfahrung und Routine, ist man für die Möglichkeit, Befehle kürzer darzustellen oder mehrere Befehle zu schachteln, dankbar. Für den erfahrenen Programmierer, der weiß was er macht, ist nämlich kürzerer Code oft besser zu lesen.</p>
<p style="text-align: left;">Einige Schreibweisen machen aber auch schon für den Einsteiger Sinn und darum soll es im folgenden Video gehen.</p>
<h2 style="text-align: left;">Das Video</h2>
<p style="text-align: left;">Zu Beginn des Videos zeige ich noch eine mögliche Lösung der Aufgabe aus der letzten Woche.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1226/variablenzuweisung-teil-2/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2F9BWDO74ThY8%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<h2 style="text-align: left;">Kurz zusammengefasst</h2>
<p style="text-align: left;">Die wesentlichen Abkürzungen sind also</p>
<ul>
<li><strong>i+=2;</strong><br />
um i in diesem Beispiel um den Wert 2 zu erhöhen und das Ergebnis wieder in der Variablen i abzulegen. (analog dazu i*=2, i/=2; i-=2)</li>
</ul>
<ul>
<li><strong>i++; bzw. ++1;</strong><br />
um i zu inkrementieren. Analog geht natürlich auch i&#8211;; und &#8211;i; (doppeltes Minus-Zeichen) um i zu dekrementieren, also um den Wert 1 zu vermindern.<br />
Ob man nun i++; oder ++i; verwendet, hängt davon ab, ob man die Variable bei zusammengesetztem Befehl vor oder nach der Ausführung inkrementieren möchte.</li>
</ul>
<h2 style="text-align: left;">Hier nun Deine Aufgabe</h2>
<p style="text-align: left;">In der letzten Folge haben wir mit Hilfe des modulo-Operators zyklisch von 0 bis 4 gezählt. Wir haben also eine Variable inkrementiert und dann mit dem modulo-Operator dafür gesorgt, dass nur zyklisch von 0 bis 4 gezählt wird und anschließend die Variable mit printf() ausgegeben.</p>
<p style="text-align: left;">C wäre nicht C, wenn man das nicht in einer Zeile erledigen könnte.</p>
<p style="text-align: left;">Deine Aufgabe ist es also diese Zeile in die while()-Schleife zu schreiben.</p>
<p style="text-align: left;">Also</p>
<p style="text-align: left;">while(1)</p>
<p style="text-align: left;">{</p>
<p style="text-align: left;">printf( &#8230;); //alles in einem Befehl</p>
<p style="text-align: left;">}</p>
<p>[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<!--wpads#kernighan--><br />
<img loading="lazy" decoding="async" src="https://ssl-vg07.met.vgwort.de/na/f898ccc45f264075a09fdaa69a3102bd" width="1" height="1" alt=""></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1226/variablenzuweisung-teil-2/">Variablenzuweisung &#8211; Teil 2</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Variablenzuweisung und modulo-Funktion</title>
		<link>https://et-tutorials.de/1218/variablenzuweisung-und-modulo-funktion/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 01 Feb 2010 16:00:30 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1218</guid>

					<description><![CDATA[<p>Bei dem Einsatz von Mikrocontrollern für Steuerungs- und Regelungsaufgaben geht es letztendlich um das Einlesen von Werten, das Berechnen von Werten und um die anschließende Ausgabe der neu berechneten Werte. Wichtig ist hierbei, dass man die Werte, die entstehen, speichern kann. Heute geht es darum, wie man den Variablen, die wir in der letzten Folge [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1218/variablenzuweisung-und-modulo-funktion/">Variablenzuweisung und modulo-Funktion</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--><br />
Bei dem Einsatz von Mikrocontrollern für Steuerungs- und Regelungsaufgaben geht es letztendlich um das Einlesen von Werten, das Berechnen von Werten und um die anschließende Ausgabe der neu berechneten Werte.</p>
<p>Wichtig ist hierbei, dass man die Werte, die entstehen, speichern kann. Heute geht es darum, wie man den Variablen, die wir in der letzten Folge behandelt haben, Werte zuweist.</p>
<h2>Variablenzuweisung</h2>
<p>Neben der direkten Zuweisung, wie</p>
<ul>
<li>i=5;</li>
</ul>
<ul>
<li>i=j;</li>
</ul>
<ul>
<li>i=P1;</li>
</ul>
<p>bei denen i, j Variablen sind und P1 für einen PORT steht, von dem man Werte von außen einlesen kann, sind auch Berechnungen, wie</p>
<ul>
<li>i=3+2;</li>
</ul>
<ul>
<li>i=i+2;</li>
</ul>
<ul>
<li>i=i*j;</li>
</ul>
<p>möglich.</p>
<p>Das Rechnen mit Variablen wird in dem heutigen Video gezeigt.</p>
<h2>Die modulo-Funktion</h2>
<p>Im zweiten Teil geht es um die modulo-Funktion.</p>
<p>Mit Hilfe des modulo-Operators %, kann der Rest einer Division ausgegeben werden. Dieser Operator wird sehr häufig für zyklisches Zählen verwendet. Dies ist oft nötig, wenn eine bestimmte Tätigkeit n-mal durchgeführt werden soll.</p>
<p>Beispiel:</p>
<p>5 % 2 ergibt 1 (denn 5/2=2, Rest 1).</p>
<p>Ein Beispiel findet Ihr im Video.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1218/variablenzuweisung-und-modulo-funktion/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FQZVyPip0XRQ%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<h2>Jetzt bist Du wieder an der Reihe.</h2>
<p>Nutze die modulo-Funktion, um in der Endlosschleife while(1) Zahlen von 0 bis 4 auszugeben.</p>
<p>Die Ausgabe soll also folgendermaßen aussehen:</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>&#8230;<br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1218/variablenzuweisung-und-modulo-funktion/">Variablenzuweisung und modulo-Funktion</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Datentypen und die formatierte Ausgabe mit printf</title>
		<link>https://et-tutorials.de/1179/datentypen-und-die-formatierte-ausgabe-mit-printf/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 25 Jan 2010 17:07:29 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1179</guid>

					<description><![CDATA[<p>Nachdem wir uns im letzten Video schon mit der Ausgabe eines Zeichens beschäftigt haben, soll es in dieser Folge nun um die wichtigsten Datentypen für die Programmierung eines Mikrocontrollers gehen. Da es bei der Programmierung eines Mikrocontrollers weniger um das Bearbeiten großer Zeichenketten geht, wie beispielsweise beim Programmieren einer Textverarbeitung für einen PC, sind hier [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1179/datentypen-und-die-formatierte-ausgabe-mit-printf/">Datentypen und die formatierte Ausgabe mit printf</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Nachdem wir uns im letzten Video schon mit der Ausgabe eines Zeichens beschäftigt haben, soll es in dieser Folge nun um die wichtigsten Datentypen für die Programmierung eines Mikrocontrollers gehen.<br />
Da es bei der Programmierung eines Mikrocontrollers weniger um das Bearbeiten großer Zeichenketten geht, wie beispielsweise beim Programmieren einer Textverarbeitung für einen PC, sind hier insbesondere Datentypen gefragt, die für das Rechnen für Steuerungs- und Regelungsaufgaben benötigt werden.</p>
<h2>Die wichtigsten Datentypen</h2>
<p style="text-align: left;">Dies sind vor allem folgende Datentypen:</p>
<ul>
<li>char</li>
</ul>
<ul>
<li>short int</li>
</ul>
<ul>
<li>long int</li>
</ul>
<ul>
<li>(float)</li>
</ul>
<p style="text-align: left;">Vor allem char, short int und long int werden häufig verwendet, während auf den Datentyp float für Gleitkommazahlen wegen der aufwändigen und daher langsamen Berechnung gern verzichtet wird.</p>
<p style="text-align: left;">Was das besondere an den Datentypen ist und wie man sie verwendet, wird im folgenden Video gezeigt.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1179/datentypen-und-die-formatierte-ausgabe-mit-printf/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2Fbk6U5yaxDKU%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p style="text-align: left;">Da das erste Video nun doch etwas lang geworden ist, habe ich die Anwendung von Variablen und die Ausgabe an die serielle Schnittstelle über printf in ein zweites Video ausgelagert.</p>
<p style="text-align: left;">Here we are …</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1179/datentypen-und-die-formatierte-ausgabe-mit-printf/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FJ-ug7TfbzWE%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<h2 style="text-align: left;">Was passiert eigentlich bei einem Überlauf bei anderen Datentypen?</h2>
<p style="text-align: left;">Jetzt bis Du an der Reihe. Versuche die Grenzen der einzelnen Datentypen zu testen.</p>
<p style="text-align: left;">Das kannst Du am besten am Datentyp signed char erkennen. Schreibe hierzu eine negative Zahl in eine Variable diesen Typs und kopiere dann den Wert in einen Port.</p>
<p style="text-align: left;">Und was passiert eigentlich bei einem Überlauf eines Integers mit Vorzeichen &#8222;signed int&#8220;?</p>
<p style="text-align: left;"><!--wpads#Unter_Video--></p>
<p>[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1179/datentypen-und-die-formatierte-ausgabe-mit-printf/">Datentypen und die formatierte Ausgabe mit printf</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>C-Syntax, getchar() und printf()</title>
		<link>https://et-tutorials.de/1156/c-syntax-getchar-und-printf/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 19 Jan 2010 18:55:09 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1156</guid>

					<description><![CDATA[<p>Nun geht es darum, die ersten Zeilen selbst zu programmieren. Ich stelle im Video zunächst einmal die groben Regeln der C-Syntax vor. Wie lautet die Syntax für eine Anweisung in C, wie füge ich Kommentare ein, was ist die Funktion main()? Anhand unseres Hello.c-Programms sind die groben Strukturen gut zu erkennen. Diese ersten Strukturen sollen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1156/c-syntax-getchar-und-printf/">C-Syntax, getchar() und printf()</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;"><!--wpads#Artikel-obenlinks--><br />
Nun geht es darum, die ersten Zeilen selbst zu programmieren. Ich stelle im Video zunächst einmal die groben Regeln der C-Syntax vor.</p>
<p style="text-align: left;">Wie lautet die Syntax für eine Anweisung in C, wie füge ich Kommentare ein, was ist die Funktion main()? Anhand unseres Hello.c-Programms sind die groben Strukturen gut zu erkennen.</p>
<p style="text-align: left;">Diese ersten Strukturen sollen dann auch erst mal reichen, um loslegen zu können.</p>
<p style="text-align: left;">In den nächsten Folgen kommt dann nach und nach mehr dazu, so dass Du am Ende des C-Kurses die meisten Syntax-Elemente kennengelernt haben solltest.</p>
<p style="text-align: left;">Eine Übersicht zur C-Programmierung, auch wenn nicht alles für den Mikrocontroller verwendet werden kann, bietet ein kostenloses Online-Buch von <a href="http://openbook.galileocomputing.de/c_von_a_bis_z/index.htm" target="_blank" rel="noopener">Galilieo-Computing</a>.</p>
<p style="text-align: left;">Im 2. Teil des Videos programmieren wir eine Eingabe eines Zeichens über die Tastatur und die anschließende Ausgabe auf dem Bildschirm.</p>
<p style="text-align: left;">Das Video heute ist etwas länger geworden, ca. 15 Minuten. Deshalb kann es beim Laden des Videos etwas länger dauern. Je nach Internet-Zugang bitte bis zu einer Minute einplanen.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1156/c-syntax-getchar-und-printf/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FwfzBuY8GkeI%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p style="text-align: left;">Wie im Video gezeigt, werden Zeichen in einem Byte gespeichert und entsprechend einer Vereinbarung codiert.<br />
Die Zuordnung findet man in der sogenanneten <a href="http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle" target="_blank" rel="noopener">ASCII-Tabelle</a>:</p>
<p style="text-align: left;">Im Video wird ein &#8218;A&#8216; eingelesen und über den Port P1 als 0x41 dargestellt. Diese Zuordnung findet man auch in der Tabelle.</p>
<p style="text-align: left;">[Dieser Artikel ist Teil einer Reihe zum Thema  Mikrocontroller. Hier geht es zur Übersichtsseite zu den anderen Artikeln des <a href="https://ET-Tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a> ]</p>
<p><!--wpads#kernighan--></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1156/c-syntax-getchar-und-printf/">C-Syntax, getchar() und printf()</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bits, Bytes und Nibbles</title>
		<link>https://et-tutorials.de/1098/bits-bytes-und-nibbles/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 11 Jan 2010 19:04:49 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=1098</guid>

					<description><![CDATA[<p>Der  Mikrocontroller rechnet digital, also mit binären Werten. Um in diesen Wust von Nullen und Einsen eine Struktur zu bringen, werden die binären Zahlen zusammengefasst. Aus Bits werden Bytes und Nibbles. Die Zahlendarstellung ist binär und hexadezimal. Ein Byte besteht aus 8 Bits. Dieses Byte kann durch zwei hexadezimale Ziffern dargestellt werden. (4 Bits ermöglichen [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/1098/bits-bytes-und-nibbles/">Bits, Bytes und Nibbles</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks-->Der  Mikrocontroller rechnet digital, also mit binären Werten.</p>
<p>Um in diesen Wust von Nullen und Einsen eine Struktur zu bringen, werden die binären Zahlen zusammengefasst.</p>
<p>Aus Bits werden Bytes und Nibbles. Die Zahlendarstellung ist binär und hexadezimal.</p>
<p>Ein Byte besteht aus 8 Bits.</p>
<p>Dieses Byte kann durch zwei hexadezimale Ziffern dargestellt werden. (4 Bits ermöglichen 2^4=16 Kombinationen, also eine hexadezimale Ziffer).</p>
<p>Ein halbes Byte, also vier Bits (entspricht einer hexadezimalesn Ziffer) nennt man Nibble.</p>
<p>Wie das ganze funktioniert und warum die Einführung von Nibbles Sinn macht, versuche ich in der heutigen Folge zu zeigen.</p>
<p>Dieser Artikel ist Teil des <a href="https://et-tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a> hier auf ET-Tutorials.de.</p>
<p>Im Video werden wir uns mit Hilfe des Debuggers die einzelnen Schritte beim Rechnen mit binären und hexadezimalen Zahlen angucken und (hoffentlich) sehen, dass eine Umrechnung in Nibbles die Umrechnung von binären in hexadezimale Zahlen und umgekehrt sehr erleichert.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/1098/bits-bytes-und-nibbles/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FVTKi10GKaNo%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>Hier noch einmal der abgespeckte C-Code aus dem Video.</p>
<pre>/*——————————————————————————
 HELLO.C

 Copyright 1995-2005 Keil Software, Inc.
 ——————————————————————————*/

 #include &lt;REG52.H&gt;                /* special function register declarations   */
 /* for the intended 8051 derivative         */

 #include &lt;stdio.h&gt;                /* prototype declarations for I/O functions */

 /*————————————————
 The main C function.  Program execution starts
 here after stack initialization.
 ————————————————*/
 void main (void) {

 /*————————————————
 Setup the serial port for 1200 baud at 16MHz.
 ————————————————*/
 #ifndef MONITOR51
 SCON  = 0x50;                /* SCON: mode 1, 8-bit UART, enable rcvr      */
 TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
 TH1   = 221;                /* TH1:  reload value for 1200 baud @ 16MHz   */
 TR1   = 1;                  /* TR1:  timer 1 run                          */
 TI    = 1;                  /* TI:   set TI to send first char of UART    */
 #endif

 /*————————————————
 Note that an embedded program never exits (because
 there is no operating system to return to).  It
 must loop and execute forever.
 ————————————————*/

 while (1) {

 }
 }</pre>
<p>[ <a href="https://et-tutorials.de/mikrocontroller/"> &gt;&gt; Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]<!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/1098/bits-bytes-und-nibbles/">Bits, Bytes und Nibbles</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Binäre, dezimale und hexadezimale Zahlen</title>
		<link>https://et-tutorials.de/973/binare-dezimale-und-hexadezimale-zahlen/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 05 Jan 2010 06:10:12 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=973</guid>

					<description><![CDATA[<p>Wie ich bereits in Aussicht gestellt habe, sollen in dieser Folge das binäre und hexadezimale Zahlensystem dargestellt werden. Wie im uns bekannten Dezimalsystem (10 er) erfolgt auch im binären (2 er) und im hexadezimalen (16 er) Zahlensystem beim Hochzählen nach dem Erreichen der höchsten Ziffer der Übergang zu einer neuen Stelle. Kurz gesagt: In dem [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/973/binare-dezimale-und-hexadezimale-zahlen/">Binäre, dezimale und hexadezimale Zahlen</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;"><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">Wie ich bereits in Aussicht gestellt habe, sollen in dieser Folge das binäre und hexadezimale Zahlensystem dargestellt werden.</p>
<p style="text-align: left;">Wie im uns bekannten Dezimalsystem (10 er) erfolgt auch im binären (2 er) und im hexadezimalen (16 er) Zahlensystem beim Hochzählen nach dem Erreichen der höchsten Ziffer der Übergang zu einer neuen Stelle.</p>
<p style="text-align: left;">Kurz gesagt:</p>
<p>In dem uns bekannten, dezimalen Zahlensystem, kommt nach der Zahl 9 die Zahl kommt 10.</p>
<p>Es wird also die nächste Stelle genutzt.</p>
<p>Nach 99 folgt die 100, indem die dritte Stelle genutzt wird.</p>
<p style="text-align: left;">Entsprechend wird, wie im Video gezeigt, im Binär- und Hexadezimalsystem verfahren.</p>
<p>Im binären Zahlensystem kommt nach der Zahl 1 die Zahl 10. Die Ziffer 2 gibt es nämlich nicht im binären Zahlensystem.</p>
<p>Das hexadezimale Zahlensystem besteht aus 16 verschiedenen Ziffern.</p>
<p>Neben den zehn Ziffern 0,1,&#8230;,9 werden also weitere Zeichen benötigt. Hier verwendet man für die noch fehlenden sechs Zeichen die Buchstaben A,B,C,D,E und F.</p>
<p>Details dazu, wie gewohnt im Video.</p>
<p>Viel Spaß.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/973/binare-dezimale-und-hexadezimale-zahlen/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2Fk4cboWR8qtM%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p style="text-align: left;">Das Umrechnen der Zahlen in die drei Zahlensysteme ist keine Spielerei. Beim Programmieren des Mikrocontrollers im zweiten Teil des Kurs wird dieses Umrechnen immer wieder benötigt. Nutzt also die Gelegenheit, um fit im Umrechnen zu werden.</p>
<h2 style="text-align: left;">Jetzt seid Ihr an der Reihe.</h2>
<p style="text-align: left;">Wandelt folgende Zahlen vom hexadezimalen Zahlensystem in das dezimale Zahlensystem um:</p>
<ul style="text-align: left;">
<li>2F</li>
<li>3C</li>
<li>AB</li>
</ul>
<p style="text-align: left;">und folgende Zahlen vom binären Zahlensystem in das dezimale Zahlensystem:</p>
<ul style="text-align: left;">
<li>10011101</li>
<li>10101010</li>
</ul>
<p style="text-align: left;"><!-- [if !mso]> <mce:style><! v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!--[endif]--><!-- [if !ppt]--><!-- .sld {left:0px !important; width:6.0in !important; height:4.5in !important; font-size:103% !important;} --><!--[endif]--></p>
<div style="text-align: left;">
<div></div>
</div>
<p style="text-align: left;">In der Entwicklungsumgebung uVision könnt Ihr Eure Ergenisse überprüfen.</p>
<p style="text-align: left;">Entsprechend könnt Ihr Euch überlegen, wie man dezimale Zahlen in hexadezimaler Schreibweise oder binärer Schreibweise ausdrückt.</p>
<p style="text-align: left;">Wie schreibt man beispielsweise die Zahlen 9, 14, 35, 135 und 209 in binärer und hexadezimaler Schreibweise?</p>
<p style="text-align: left;">Auch hier könnt Ihr mit Hilfe der Entwicklungsumgebung sehen, ob ihr richtig gerechnet habt.</p>
<p style="text-align: left;">[Hier geht es zur Übersichtsseite zu den anderen Artikeln des <a href="https://ET-Tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a> hier auf ET-Tutorials.de.]</p>
<p><!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/973/binare-dezimale-und-hexadezimale-zahlen/">Binäre, dezimale und hexadezimale Zahlen</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Einrichten eines Projektes in uVision</title>
		<link>https://et-tutorials.de/964/einrichten-eines-projektes-in-uvision/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 22 Dec 2009 06:30:25 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=964</guid>

					<description><![CDATA[<p>Heute soll es zunächst einmal darum gehen, uns eine Arbeitsumgebung für die nächsten Folgen einzurichten. Dazu werden wir eine Kopie des bereits bekannten Hello-Projekts erstellen. Mit diesem neuen Projekt werden wir dann den C-Kurs durchführen. Im zweiten Teil des Videos werden wir dann mit diesem Projekt arbeiten. Wir bauen zunächst einmal die Funktion getchar() in [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/964/einrichten-eines-projektes-in-uvision/">Einrichten eines Projektes in uVision</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">Heute soll es zunächst einmal darum gehen, uns eine Arbeitsumgebung für die nächsten Folgen einzurichten.</p>
<p style="text-align: left;">Dazu werden wir eine Kopie des bereits bekannten Hello-Projekts erstellen. Mit diesem neuen Projekt werden wir dann den C-Kurs durchführen.</p>
<p style="text-align: left;">Im zweiten Teil des Videos werden wir dann mit diesem Projekt arbeiten. Wir bauen zunächst einmal die Funktion getchar() in unser Programm, so dass wir das Programm jederzeit anhalten können.</p>
<p style="text-align: left;">Die Funktion getchar() stoppt die Ausführung des Programms und wartet auf die Eingabe eines Zeichens über die serielle Schnittstelle. Durch die Eingabe eines Zeichens auf der Tastatur können wir das Programm weiterlaufen lassen.</p>
<p style="text-align: left;">So können wir das Programm an jeder gewünschten Stelle anhalten. Dies wird später hilfreich sein, um beispielsweise gemachte Berechnungen zu überprüfen und gegebenenfalls Fehler im Programm zu finden.</p>
<p style="text-align: left;">Im letzten Teil ändern wir die Ausgabe über die Ports.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/964/einrichten-eines-projektes-in-uvision/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FMvuRsmtuPok%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p style="text-align: left;">Am Ende des Videos wurden Daten in den Port 1 geschrieben. Da der Mikrocontroller nur „1“ und „0“ kennt, werden die Zahlen binär angegeben.</p>
<p style="text-align: left;">In der nächsten Folge wird es ein Video geben, in dem ich auf die einzelnen Zahlendarstellungen „binär“, „dezimal“ und &#8222;hexadezimal&#8220; eingehe. Dann wird es auch die ersten Übungen geben.</p>
<p style="text-align: left;">[Hier geht es zur Übersichtsseite zu den anderen Artikeln des <a href="https://et-tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a> hier auf ET-Tutorials.de.]</p>
<p><!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/964/einrichten-eines-projektes-in-uvision/">Einrichten eines Projektes in uVision</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Was machen Compiler und Linker ?</title>
		<link>https://et-tutorials.de/938/was-machen-compiler-und-linker/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 17 Dec 2009 06:00:49 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=938</guid>

					<description><![CDATA[<p>Im heutigen Artikel geht es um das Übersetzen eines C-Programms. Ein C-Programm wird zunächst einmal in dem in der Entwicklungsumgebung integrierten  Texteditor geschrieben. In dieser C-Datei stehen die Anweisungen, die der Mikrocontroller später ausführen soll. Zudem werden in dieser Datei Anweisungen für die Übersetzungsprogramme – Compiler und Linker – untergebracht. Themen des heutigen Artikels sind [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/938/was-machen-compiler-und-linker/">Was machen Compiler und Linker ?</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!--wpads#Artikel-obenlinks--></p>
<p style="text-align: left;">Im heutigen Artikel geht es um das Übersetzen eines C-Programms.</p>
<p style="text-align: left;">Ein C-Programm wird zunächst einmal in dem in der Entwicklungsumgebung integrierten  Texteditor geschrieben.</p>
<p style="text-align: left;">In dieser C-Datei stehen die Anweisungen, die der Mikrocontroller später ausführen soll.</p>
<p style="text-align: left;">Zudem werden in dieser Datei Anweisungen für die Übersetzungsprogramme – Compiler und Linker – untergebracht.</p>
<p style="text-align: left;">Themen des heutigen Artikels sind also</p>
<ul>
<li>Was ist eine .c-Datei</li>
<li>Was ist eine .h-Datei</li>
<li>Was macht der Compiler?</li>
<li>Was ist eine .obj-Datei?</li>
<li>Was macht der Linker?</li>
</ul>
<p style="text-align: left;">Der Aufbau der Dateien und die Aufgaben der Übersetzungsprogramme werden im heutigen Video beschrieben.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/938/was-machen-compiler-und-linker/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FGYvNNwYVi4k%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p style="text-align: left;">In der nächsten Folge werden wir uns eine Arbeitsumgebung für den kommenden Kurs einrichten und unser Programm hello.c um weitere Funktionen erweitern.</p>
<p style="text-align: left;">[Hier geht es zur Übersichtsseite zu den anderen Artikeln des <a href="https://et-tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a> hier auf ET-Tutorials.de.]</p>
<p><!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/938/was-machen-compiler-und-linker/">Was machen Compiler und Linker ?</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Start der Entwicklungsumgebung uVision</title>
		<link>https://et-tutorials.de/898/start-der-entwicklungsumgebung-%c2%b5vision/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Tue, 15 Dec 2009 06:00:57 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=898</guid>

					<description><![CDATA[<p>Nachdem wir in der letzten Folge die Software uVision von Keil installiert haben, wird heute das erste Programm übersetzt. Das Standard C-Programm „Hello world“, das in keinem C-Einführungskurs fehlen darf, wird auch hier genutzt. Hierzu wird der Mikrocontroller sozusagen virtuell über die serielle Schnittstelle mit einem Ausgabeterminal verbunden und dann wird über diese Verbindung die [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/898/start-der-entwicklungsumgebung-%c2%b5vision/">Start der Entwicklungsumgebung uVision</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;"><!--wpads#Artikel-obenlinks--><br />
Nachdem wir in der <a href="https://et-tutorials.de/872/download-und-installation-von-%C2%B5vision4keil/">letzten Folge die Software uVision von Keil</a> installiert haben, wird heute das erste Programm übersetzt.</p>
<p style="text-align: left;">Das Standard C-Programm „Hello world“, das in keinem C-Einführungskurs fehlen darf, wird auch hier genutzt.</p>
<p style="text-align: left;">Hierzu wird der Mikrocontroller sozusagen virtuell über die serielle Schnittstelle mit einem Ausgabeterminal verbunden und dann wird über diese Verbindung die Zeichenkette „Hello world“ ausgegeben.</p>
<p style="text-align: left;">Zudem wird ein Bit eines Ausgabeports verändert.</p>
<h2 style="text-align: left;">Der Start der Entwicklungsumgebung</h2>
<p style="text-align: left;">Um die Einzelheiten des Programms soll es aber jetzt noch nicht gehen. Erst einmal wird überprüft, ob die Installation funktioniert hat und Du eine funktionstüchtige Entwicklungsumgebung vor Dir liegen hast, mit der Du künftig die Programme entwickeln kannst.</p>
<p style="text-align: left;">Im folgenden Video wird gezeigt, wie Du das erste Programm lädst, kompilierst, linkst und dann auf dem Simulator laufen lässt.</p>
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/898/start-der-entwicklungsumgebung-%c2%b5vision/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FOXWq2YNF3Yw%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>Rufe jetzt uVision auf und vollziehe zunächst einmal die im Video angegebenen Schritte nach. In der nächsten Folge erkläre ich, was der <a href="https://et-tutorials.de/938/was-machen-compiler-und-linker/">Compiler und der Linker</a> eigentlich genau machen.</p>
<p>[Hier geht es zur Übersichtsseite zu den anderen Artikeln des <a href="https://ET-Tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a> hier auf ET-Tutorials.de.]<!--wpads#kernighan--></p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/898/start-der-entwicklungsumgebung-%c2%b5vision/">Start der Entwicklungsumgebung uVision</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Download und Installation von uVision4/Keil</title>
		<link>https://et-tutorials.de/872/download-und-installation-von-%c2%b5vision4keil/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Thu, 10 Dec 2009 06:30:31 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=872</guid>

					<description><![CDATA[<p>Heute geht es also los mit dem Download und der Installation der Entwicklungsumgebung µVision 4 (häufig auch uVision geschrieben) von Keil Software. Doch vorher noch ein paar einleitende Anmerkungen zum Thema Mikrocontroller. Häufig werden die Begriffe Mikrocontroller und Mikroprozessor durcheinander geworfen. Es gibt zwar durchaus eine Verwandtschaft der Systeme, im Detail unterscheiden sie sich sich [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/872/download-und-installation-von-%c2%b5vision4keil/">Download und Installation von uVision4/Keil</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/764c57bea7824aa9995615e708f95f10" alt="" width="1" height="1" /></p>
<p style="text-align: left;">Heute geht es also los mit dem Download und der Installation der Entwicklungsumgebung µVision 4 (häufig auch uVision geschrieben) von Keil Software.</p>
<p style="text-align: left;">Doch vorher noch ein paar einleitende Anmerkungen zum Thema Mikrocontroller.</p>
<p style="text-align: left;">Häufig werden die Begriffe Mikrocontroller und Mikroprozessor durcheinander geworfen. Es gibt zwar durchaus eine Verwandtschaft der Systeme, im Detail unterscheiden sie sich sich aber in wesentlichen Punkten.</p>
<p style="text-align: left;">Daher soll zunächst einmal geklärt werden, was ein Mikrocontroller eigentlich ist.</p>
<h2 style="text-align: left;">Was ist ein Mikrocontroller?</h2>
<p style="text-align: left;">Seit etwas 1975 gibt es integrierte Schaltungen, bei denen ein komplexes Steuer- und Rechenwerk auf einem Chip integriert ist – den Mikroprozessor. In dem PC, Mac o.ä., mit dem Ihr gerade arbeitet, arbeitet ein solcher Mikroprozessor. Dieser Mikroprozessor hat eine Aufgabe, nämlich schnell, sehr schnell zu rechnen. Für andere Aufgaben gibt es, grob gesagt, in einem PC andere Komponenten.</p>
<p style="text-align: left;">Einen etwas anderen Ansatz hat man bei der Entwicklung von Mikrocontrollern verfolgt. Mikrocontroller rechnen langsamer als die heutigen Mikroprozessoren, haben dafür aber viele Funktionen und Schnittstellen, die man für moderne Steuerungs- und Regelungsaufgaben benötigt, auf einen Chip integriert.</p>
<p style="text-align: left;">So findet man beispielsweise Ein-/Ausgabeports, Analog-/Digitalwandler, serielle Schnittstellen, &#8230; auf dem Mikrocontroller.</p>
<p style="text-align: left;">Mikrocontroller werden heute vielfältig eingesetzt. Sie steuern und regeln fast alle elektronische Geräte. Man findet sie in Autos, Waschmaschinen, Videorecordern, Fernsehgeräten, &#8230;</p>
<p style="text-align: left;">Oft ist es einfacher und schneller und damit auch preisgünstiger, einen Mikrocontroller für eine Steuerungsaufgabe einzusetzen, als die Steuerung diskret aufzubauen.</p>
<p style="text-align: left;">Ist die Steuerung fehlerhaft oder soll sie geändert werden, reicht häufig ein einfaches Software-Update. Bei der Realisierung einer Steuerung durch eine Schaltung müsste man im schlechtesten Fall, die gesamte Schaltung neu entwickeln.</p>
<p style="text-align: left;">Ein typischer Vertreter der heute verwendeten Mikrocontroller ist der 8051 von INTEL. Dieser Mikrocontroller wurde von diversen Herstellern weiterentwickelt und ist von allen großen Halbleiterherstellern in diversen Derivaten erhältlich.</p>
<p style="text-align: left;">In diesem Kurs werden wir uns mit der Programmierung von Derivaten des 8051 beschäftigen.</p>
<p style="text-align: left;">Eine geeignete Software für die Programmierung eines 8051-Derivats ist das Programm uVision 4 von Keil.</p>
<p style="text-align: left;">Der Download und die Installation der Software wird im folgenden Video gezeigt.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<div style="padding: 10px; -moz-box-shadow: 0 0 25px #a1a1a1; -webkit-box-shadow: 0 0 25px #a1a1a1; box-shadow: 0 0 25px #a1a1a1; height: 360px; width: 640px; margin: 35px auto 35px auto;"><a href="https://et-tutorials.de/872/download-und-installation-von-%c2%b5vision4keil/"><img decoding="async" src="https://et-tutorials.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FwbVH_cBkphM%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></div>
<p><!--wpads#Unter_Video--></p>
<p>Lade nun die Software von der <a href="http://www.keil.com" target="_blank" rel="noopener">Keil-Homepage</a> und installiere sie auf Deinem PC.</p>
<p>In der nächsten Folge rufen wir dann die Software auf, <a href="https://et-tutorials.de/898/start-der-entwicklungsumgebung-%C2%B5vision/">kompilieren , linken und starten das erste Demoprogramm</a>.</p>
<p>[Hier geht es zur Übersichtsseite zu den anderen Artikeln des <a href="../mikrocontroller/">Mikrocontroller-Kurses</a> hier auf ET-Tutorials.de.]</p>
<p style="text-align: left;">
<p><!--wpads#kernighan--></p>
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/872/download-und-installation-von-%c2%b5vision4keil/">Download und Installation von uVision4/Keil</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Start des Mikrocontroller-Kurses</title>
		<link>https://et-tutorials.de/791/start-des-mikrocontroller-kurses/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 07 Dec 2009 15:55:56 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=791</guid>

					<description><![CDATA[<p>Zunächst einmal ein Herzliches Willkommen zum Mikrocontroller-Kurs auf ET-Tutorials.de. Nach den Vorbereitungen in der vergangen Zeit soll es nun diese Woche endlich losgehen. Wie bereits in der Ankündigung zum Kurs gesagt, fangen wir gaaanz am Anfang an. Man benötigt also keine Voraussetzung, um an diesem Kurs teilzunehmen. Ein PC und ein eine ausreichende Internet-Verbindung, um [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/791/start-des-mikrocontroller-kurses/">Start des Mikrocontroller-Kurses</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/bd9a5602f1c345e68dbb56bb0d2a0212" alt="" width="1" height="1" /><br />
Zunächst einmal ein Herzliches Willkommen zum <a href="https://et-tutorials.de/mikrocontroller/">Mikrocontroller-Kurs auf ET-Tutorials.de</a>. Nach den Vorbereitungen in der vergangen Zeit soll es nun diese Woche endlich losgehen.</p>
<p style="text-align: left;">Wie bereits in der Ankündigung zum Kurs gesagt, fangen wir gaaanz am Anfang an. Man benötigt also keine Voraussetzung, um an diesem Kurs teilzunehmen. Ein PC und ein eine ausreichende Internet-Verbindung, um die Videos in angemessener Zeit laden zu können, reicht.</p>
<h2 style="text-align: left;">Aufbau des Kurses</h2>
<p style="text-align: left;">Wir beginnen mit einer Einführung in die Programmiersprache „C“ und nutzen dabei auch schon bei der Einführung die Entwicklungsumgebung µVision von Keil, um uns von Anfang an die Programmierumgebung zu gewöhnen.</p>
<p style="text-align: left;">Nach dieser Einführung geht es dann um die speziellen Anforderungen zum Programmieren eines Mikrocontrollers. Was muss ich bei der Programmierung eines µC beachten, aber auch: Welche Möglichkeiten habe ich der µC-Programmierung, die ich auf anderen Systemen nicht oder nur sehr kompliziert oder teuer erreiche? Themen wie Interrupts, Timer, Analog-Digitalwandlung, Kommunikation über die serielle Schnittstelle seien hier genannt.</p>
<h2 style="text-align: left;">Kleinere Projekte</h2>
<p style="text-align: left;">Anschließen soll sich ein dritter Teil, in dem ich mit Euch verschiedene Projekte kleinere Projekte angehen möchte. Hier soll dann das Erlernte aus den ersten beiden Teilen vertieft angewendet werden.</p>
<p style="text-align: left;">Themen aus der Steuerungstechnik und der Regelungstechnik sollen hier mit Hilfe des Mikrocontrollers umgesetzt werden. Aber auch hier möchte ich mich darauf beschränken, lediglich mit dem Simulator zu arbeiten. Das schränkt zwar die Auswahl geeigneter Projekte stark ein, ermöglicht uns aber ohne Investitionen in Hardware diesen Kurs durchzuführen.</p>
<h2 style="text-align: left;">Geplante Artikelfrequenz</h2>
<p style="text-align: left;">Ihr macht diesen Kurs neben Eurer Schule, Eurer Ausbildung bzw. neben Eurer täglichen Arbeit. Ich werde daher versuchen, die einzelnen Artikel nicht zu schnell hintereinander zu schreiben, so dass jeder genügend Zeit hat, dem Kurs zu folgen.</p>
<p style="text-align: left;">Nicht jeder hat die Möglichkeit, gleich am Tag der Veröffentlichung eines neuen Artikels sich dem Kurs zu widmen. Ich werde also mindestens einen Tag zwischen zwei Artikeln Zeit lassen. Vor allem die Übungsphasen, das eigene Programmieren, erfordern erfahrungsgemäß viel Zeit.</p>
<p style="text-align: left;">Zudem bleiben  selbstverständlich die einzelnen Videos auch nach der Veröffentlichung online, so dass einzelne Phasen immer wieder nachgearbeitet werden können.</p>
<p style="text-align: left;">Daher habe ich zunächst folgendes Vorgehen geplant. Zu Beginn möchte ich zwei Artikel pro Woche veröffentlichen. Bei der Installation der Software, dem Kennenlernen des Simulators, dem Starten des ersten Programms geht es in den ersten Artikeln darum, die einzelnen Schritte nachzuvollziehen und sich an die Programmierumgebung zu gewöhnen, so dass bei zwei Artikeln pro Woche sicher genug  Zeit bleibt, um sich nachmittags oder abends mal eine Stunde an den Rechner zu setzen, um die ersten Aufgaben zu erledigen.</p>
<p style="text-align: left;">Später, wenn selbständige Übungen dazu kommen, plane ich, auch mal nur einen Artikel pro Woche zu veröffentlichen, um Euch genügend Zeit für das eigene Programmieren zu geben.</p>
<p style="text-align: left;">Programmieren lernt man durch Programmieren und Programmieren braucht Zeit.</p>
<h2 style="text-align: left;">Teilnehmer</h2>
<figure id="attachment_820" aria-describedby="caption-attachment-820" style="width: 300px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="size-full wp-image-820" title="Meeting" src="https://et-tutorials.de/wp-content/uploads/2009/12/Meeting.jpg" alt="Foto von www.lumaxart.com" width="300" height="300" srcset="https://et-tutorials.de/wp-content/uploads/2009/12/Meeting.jpg 300w, https://et-tutorials.de/wp-content/uploads/2009/12/Meeting-150x150.jpg 150w" sizes="(max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-820" class="wp-caption-text">Foto von www.lumaxart.com</figcaption></figure>
<p style="text-align: left;">Seitdem ich das Projekt angekündigt habe, haben sich bis heute ca. 800 Leser in den  Benachrichtungsdienst per E-Mail eingetragen. Dafür, dass ET-Tutorials.de noch recht jung und unbekannt ist, bin ich mit der Zahl der Interessenten sehr zufrieden, zumal sicher auch viele hier lesen werden, die sich nicht für den Benachrichtigungsdienst eingetragen haben.</p>
<p style="text-align: left;">Für den Benachrichtigungsdienst habe ich einen Emaildienst eingerichtet.<br />
Als neuer Teilnehmer wirst Du Schritt für Schritt durch den Kurs geführt.<br />
In jeder Email hat man selbstverständlich die Möglichkeit den Benachrichtigungsdienst auch wieder abzubestellen.</p>
<p>Um Dich für diesen kostenlosen Kurs einzuschreiben, trage bitte unten Deine Email-Adresse ein. Dann bekommst Du eine Aktivierungs-Mail, in der Du noch einmal auf einen Link klicken musst.</p>
<p>Trage hier nun Deine Email-Adresse ein, um Dich für den Kurs anzumelden.</p>
<div style="float: left; margin-left: 0px; margin-right: 0px; padding: 10px;">
<div class="klicktipp-form">
<table style="width: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0 0;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0px -40px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') -20px 0;"></td>
</tr>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0px -80px;"></td>
<td class="c" style="background: #ffffff; text-align: center;">
<form id="ktfs" accept-charset="UTF-8" action="https://www.klick-tipp.com/de/subscribe.php" method="post"><input id="FormValue_EmailAddress" style="margin-bottom: 10px; background: #fff; border: 1px solid #aaa; color: #000; width: 205px; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;" name="FormValue_Fields[EmailAddress]" type="text" value="E-Mail-Adresse" /></p>
<div style="vertical-align: top; text-align: center;"><button id="FormButton_Subscribe" style="background: none; padding: 0; margin: 0; border: none; display: inline; vertical-align: top;"><img decoding="async" src="https://klick-tipp.s3.amazonaws.com/buttons/jetzt-anmelden_orange_blau.png" alt="Jetzt anmelden!" /></button></div>
<p><input id="FormValue_ListID" name="FormValue_ListID" type="hidden" value="2293" /> <input id="FormValue_Command" name="FormValue_Command" type="hidden" value="Subscriber.Add" /></p>
</form>
<div style="font-size: 10px; text-align: center; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;">Wir halten uns an den <a style="color: #888; text-decoration: none; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;" title="Klick-Tipp Datenschutzrichtlinie" href="https://www.klick-tipp.com/datenschutz/5323" target="_blank" rel="noopener">Datenschutz</a>.</div>
</td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') -20px -80px;"></td>
</tr>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0 -20px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0px -60px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') -20px -20px;"></td>
</tr>
</tbody>
</table>
<p><script type="text/javascript">// <![CDATA[
function ktfsFocus(a){a=a||window.event;var b=(a.srcElement)?a.srcElement:a.target;var c=b.value;var d=b.getAttribute('oldtext');if(d==undefined){b.setAttribute('oldtext',c);b.value='';b.style.backgroundColor='#f8ffba';}}function ktfsBlur(a){a=a||window.event;var b=(a.srcElement)?a.srcElement:a.target;var c=b.value;if(c==''){c=b.getAttribute('oldtext');b.removeAttribute('oldtext');b.value=c;b.style.backgroundColor='#fff';}}function ktfsRecursion(el){var i;for(i=0;i<el.children.length;i++){var el1=el.children[i];if(el1.nodeName=='INPUT') if('text'==el1.getAttribute('type')){el1.onfocus=ktfsFocus;el1.onblur=ktfsBlur};ktfsRecursion(el1)}}var form=document.getElementById('ktfs');ktfsRecursion(form); // ]]&gt;</script></p>
</div>
</div>
<p>&nbsp;</p>
<h2 style="text-align: left;">Kommentare</h2>
<p style="text-align: left;">Wie ich oben schon geschrieben habe, sind wir eine große Gruppe von ca. 600 Teilnehmern. In einem Präsenz-Seminar würde es dann ziemlich eng werden.</p>
<p style="text-align: left;">Durch das asynchrone Zusammenarbeiten (jeder Teilnehmer kann dann lernen , wann er/sie Lust und Zeit dazu hat und kann sich die Inhalte so oft angucken, wie er/sie es möchte) haben wir hier über eine Internetplattform die Möglichkeit, zusammen zu lernen, ohne uns gegenseitig auf die Füße zu treten.</p>
<p style="text-align: left;">Es wäre aber schade, wenn hier nur jeder für sich lernt. Man lernt am besten im Austausch mit anderen. Aber auch für mich ist es wichtig, ob die einzelnen Artikel in Form und Inhalt für Euch interessant sind, welche Verbesserungsvorschläge Ihr habt, ob das eine oder andere Thema vielleicht noch zusätzlich mit aufgenommen werden sollte, &#8230;</p>
<p style="text-align: left;"><img loading="lazy" decoding="async" class="size-full wp-image-823 alignright" style="margin: 10px;" title="Kommentar" src="https://et-tutorials.de/wp-content/uploads/2009/12/Kommentar.jpg" alt="Kommentar" width="192" height="192" srcset="https://et-tutorials.de/wp-content/uploads/2009/12/Kommentar.jpg 192w, https://et-tutorials.de/wp-content/uploads/2009/12/Kommentar-150x150.jpg 150w" sizes="(max-width: 192px) 100vw, 192px" />Kurz und knapp: Nutzt bitte die Möglichkeit unter jedem Artikel Kommentare zu hinterlassen, Anmerkungen und Vorschläge zu machen, damit der Kurs zu einem lebendigen Kurs wird.</p>
<p style="text-align: left;">Vielleicht kostet es zunächst  einige Überwindung zu kommentieren. Wer anonym bleiben möchte, kann das durch die Verwendung seines/ihres Vornamens oder eines Nick-Namens auch bleiben. Das Pflichtfeld  &#8222;Email-Adresse&#8220; wird nicht ausgewertet, wer also auch mir gegenüber anonym bleiben möchte, kann hier auch irgendeine Adresse angeben. Beim Benachrichtigungsdienst geht das aber nicht, weil sonst die Email nicht zugestellt werden könnte. Ich versichere aber auch sicherheitshalber hier noch einmal, dass mir Datenschutz wichtig ist und ich die Email-Adressen selbstverständlich nicht weitergeben werde.</p>
<p style="text-align: left;">An dieser Stelle auch eine Bitte an die Erfahrenen unter Euch. Bei der Durchsicht der Email-Adressen aus der Benachrichtigungsliste sind mir auch einige Teilnehmer aufgefallen, die in der „Szene“ schon bekannt sind, selbst µC-Kurse halten und teilweise auch eigene Schulungsboards entwickelt und gebaut haben – und sich bestimmt nicht angemeldet haben, um die Grundlagen zu wiederholen ;-).</p>
<p style="text-align: left;">Ihr seid natürlich auch mehr als herzlich eingeladen, Eure Erfahrungen mit einzubringen und eventuelle Fragen mit zu beantworten. Das wäre eine große Hilfe und Unterstützung für mich. Vielleicht hat ja auch der eine oder andere von Euch, mal Interesse einen Gastartikel zu veröffentlichen. Vielleicht im dritten Teil des Kurses, wenn es um die Realisierung von kleineren Projekten geht.</p>
<h2 style="text-align: left;">Jeder kann mithelfen</h2>
<p style="text-align: left;">Beim Aufbau der Seite ET-Tutorials.de kann ich Unterstützung gebrauchen. Wenn Du einen Fehler auf der Seite bemerkt, Dir irgendetwas nicht gefällt, würde ich mich über eine kurze Email sehr freuen.  Durch Feedback, positives oder negatives, kann ich die Seite verbessern.</p>
<p style="text-align: left;">Also, wenn Dir etwas nicht gefällt gib mir bitte Bescheid.</p>
<p style="text-align: left;">Wenn Dir meine Seite jedoch gefällt <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> kannst Du ET-Tutorials.de und den Mikrocontroller-Kurs auch unterstützen. Und zwar, indem Du Dich aktiv beteiligt. Wie oben beschrieben, kannst Du das einerseits durch Kommentare tun. Auch wenn das auf den ersten Blick nicht so scheint, Kommentare sind wichtig für einen lebendigen Blog, der dieser Blog werden soll.</p>
<h2 style="text-align: left;">ET-Tutorials.de weiterempfehlen</h2>
<p style="text-align: left;">Durch eine Weiterempfehlung an Freunde, Bekannte, Mitschüler, Kollegen, Lehrer, &#8230; kannst Du mithelfen, ET-Tutorials bekannter zu machen. Am einfachsten geht das über einen Link, der unter jedem Artikel steht.</p>
<h2 style="text-align: left;">Wie geht’s weiter</h2>
<p style="text-align: left;">In der nächsten Folge geht es nun los. <a href="https://et-tutorials.de/872/download-und-installation-von-%C2%B5vision4keil/">Wir werden die Software µVision herunterladen und installieren</a>.</p>
<p style="text-align: left;">Unter folgendem Link findest Du eine Liste aller bereits erschienenen  Folgen des <a href="https://et-tutorials.de/mikrocontroller/">Mikrocontroller-Kurses</a>.</p>
<p style="text-align: left;">
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/791/start-des-mikrocontroller-kurses/">Start des Mikrocontroller-Kurses</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kostenloser Mikrocontroller-Kurs</title>
		<link>https://et-tutorials.de/632/kostenloser-mikrocontroller-kurs/</link>
		
		<dc:creator><![CDATA[Wolfgang Bengfort]]></dc:creator>
		<pubDate>Mon, 02 Nov 2009 19:14:13 +0000</pubDate>
				<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Mikrocontroller VG]]></category>
		<category><![CDATA[TOP Artikel]]></category>
		<guid isPermaLink="false">https://et-tutorials.de/?p=632</guid>

					<description><![CDATA[<p>Der Mikrocontroller hat nicht nur Einzug in unseren Alltag genommen, beim Zentral-Abitur an den beruflichen Gymnasien in Nordrhein-Westfalen steht er mittlerweile auch oben auf der Liste. Ab Anfang Dezember werde ich daher hier auf ET-Tutorials.de einen Mikrocontrollerkurs für Einsteiger anbieten. Derzeit laufen die Planungen und Vorbereitungen des Kurses. Hier schon einmal einige Informationen zum Kurs. [&#8230;]</p>
<p>Der Beitrag <a href="https://et-tutorials.de/632/kostenloser-mikrocontroller-kurs/">Kostenloser Mikrocontroller-Kurs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://ssl-vg03.met.vgwort.de/na/8e83589d15614bf78e670c4d641c48f2" alt="" width="1" height="1" /></p>
<p style="text-align: left;">Der Mikrocontroller hat nicht nur Einzug in unseren Alltag genommen, beim Zentral-Abitur an den beruflichen Gymnasien in Nordrhein-Westfalen steht er mittlerweile auch oben auf der Liste.</p>
<p style="text-align: left;">Ab Anfang Dezember werde ich daher hier auf ET-Tutorials.de einen Mikrocontrollerkurs für Einsteiger anbieten. Derzeit laufen die Planungen und Vorbereitungen des Kurses.</p>
<p style="text-align: left;">Hier schon einmal einige Informationen zum Kurs. Beim Mikrocontroller-Kurs wird es um eine Einführung in die Programmierung eines Mikrocontrollers der 8051-Familie in „C“ gehen.</p>
<p style="text-align: left;">
<h2 style="text-align: left;">Ein Kurs für Einsteiger</h2>
<p style="text-align: left;">
<p style="text-align: left;">Für den Kurs benötigten man keinerlei Vorerfahrung. Es werden keine Kenntnisse im Bereich Hardware vorausgesetzt. Man muss auch kein Programmier-Profi sein. Im Gegenteil, das Programmieren soll ja gerade in diesem Kurs erlernt werden.</p>
<p style="text-align: left;">Der Kurs ist also eindeutig für Einsteiger gedacht. Wer schon Erfahrungen in der „C“-Programmierung hat, steigt vielleicht am besten im 2. Teil des Kurses (mehr über die Struktur des Kurses weiter unten) ein.</p>
<h2 style="text-align: left;">Keine Kosten</h2>
<p style="text-align: left;">
<p style="text-align: left;">Die Teilnahme am Mikrocontroller-Kurs ist <strong>kostenlos</strong>.</p>
<p style="text-align: left;">Zudem werden <strong>keine Investitionen in Hard- oder Software</strong> für die Teilnehmer nötig sein.</p>
<p style="text-align: left;">
<p style="text-align: left;">Möglich ist das durch die Verwendung der kostenfreien Demo-Version der Programmierumgebung <strong>µVision 4 der Firma Keil</strong>. Keil gehört zu den Marktführern in diesem Marktsegment. Die Vollversion von µVision ist eine Profiversion die von vielen professionellen Entwicklern im 8051-Umfeld eingesetzt wird.</p>
<p style="text-align: left;">Zum Test dieser Software kann man eine Demo-Version dieser Software beim Hersteller herunterladen. Diese Software besitzt die volle Funktionalität, hat jedoch die Einschränkung, dass nur kleinere Projekte damit realisiert werden können. Für professionelle Projekte ist man daher auf die Vollversion angewiesen, für uns ist die kostenlose Demo-Version jedoch ausreichend.</p>
<p style="text-align: left;">
<p style="text-align: left;">Das Schöne an der Software ist, dass ein Simulator integriert ist, der per Software den gewünschten Mikrocontroller nachbildet, so dass man die erstellte Software testen kann, fast als wenn man einen Mikrocontroller zur Hand hätte.</p>
<p style="text-align: left;">Diesen Emulator werden wir nutzen, um die Kosten für Mikrocontroller, Programmiergerät, externe Hardware, &#8230; zu sparen. Somit wird der Kurs für alle Beteiligten <span style="text-decoration: line-through;">umsonst</span> kostenlos.</p>
<p style="text-align: left;">
<p style="text-align: left;">Der Kurs wird aus zwei Teilen bestehen.</p>
<p style="text-align: left;">
<h2 style="text-align: left;">1. Teil Grundlagen der Programmiersprache „C“</h2>
<p style="text-align: left;">
<p style="text-align: left;"><img loading="lazy" decoding="async" class="alignright size-full wp-image-642" title="1256925589_text-x-csrc" src="https://et-tutorials.de/wp-content/uploads/2009/11/1256925589_text-x-csrc.png" alt="1256925589_text-x-csrc" width="200" height="200" />Mikrocontroller programmiert man meistens entweder in Assembler, einer Programmier-Sprache, die speziell auf den jeweiligen Mikrocontroller ausgerichtet ist, oder in einer der höheren Programmiersprache „C“. Ja, ja ich weiß: Man kann Mikrocontroller auch in Basic-Dialekten programmieren. Der Vorteil einer höheren Programmiersprache, wie „C“ liegt darin, dass der Code zum einen leichter lesbar (und programmierbar) ist, zum anderen, dass Programme leichter portierbar sind. </p>
<p>Die Geschwindigkeitsvorteile, die durch das hardwarenähere Programmieren in Assembler erreichbar sind, werden dank der immer besser werdenden C-Compiler immer geringer. Kurz und knapp: Wir programmieren in „C“.</p>
<p style="text-align: left;">
<p style="text-align: left;">Inhalte des C-Teils sollen beispielsweise sein:</p>
<p style="text-align: left;">
<ul style="text-align: left;">
<li>Aufbau eines C-Programms</li>
<li>Das erste C-Programm „Hello World“</li>
<li>Aufgaben des Compilers, des Linkers</li>
<li>Variablen</li>
<li>Ein-/Ausgabe</li>
<li>Funktionen</li>
<li>Bedingte Verzweigungen</li>
<li>Schleifen</li>
<li>Zeiger</li>
<li>&#8230;.</li>
</ul>
<p style="text-align: left;">
<h2 style="text-align: left;">2. Teil: Programmieren des Mikrocontrollers</h2>
<p style="text-align: left;">
<p style="text-align: left;">Im zweiten Teil soll es dann um die Besonderheiten bei der Programmierung eines <a href="https://et-tutorials.de/4313/ubersicht-zum-8051-mikrocontroller-kurs/" target="_blank" rel="noopener">8051-Mikrocontrollers</a> gehen.</p>
<p style="text-align: left;">
<p style="text-align: left;">Themen sind hier unter anderem:</p>
<p style="text-align: left;">
<ul style="text-align: left;">
<li>Ports</li>
<li>Externe Interrupts</li>
<li>Timer/Counter</li>
<li>Analog/Digital-Wandlung</li>
<li>Serielle Schnittstelle</li>
<li>&#8230;</li>
</ul>
<p style="text-align: left;">
<p style="text-align: left;">Die einzelnen Folgen werde ich mit Übungsaufgaben ausstatten, so dass Ihr während des Kurses zu Hause reichlich programmieren könnt. Programmieren lernt man nämlich <span style="text-decoration: line-through;">am besten</span> nur durch Programmieren.</p>
<p style="text-align: left;">
<p style="text-align: left;">Ich denke, dass dieser Kurs nicht für diejenigen interessant sein kann, die demnächst in NRW an einem beruflichen Gymnasium ihr Abitur machen und daher den Kurs für die Abiturvorbereitung nutzen können, sondern auch für alle anderen, die das Programmieren eines Mikrocontrollers erlernen möchten.</p>
<p style="text-align: left;">
<p style="text-align: left;">Pro Woche wird es 1-2 Folgen geben, so dass Ihr zwischen den einzelnen Lektionen genug Zeit habt, das Erlernte zu üben.</p>
<p style="text-align: left;">
<h2 style="text-align: left;">Einfach anmelden</h2>
<p style="text-align: left;">
<p>Um den Start des Kurses und die einzelnen Folgen nicht zu verpassen, trag&#8216; bitte hier Deine Email-Adresse ein. Dann bekommst Du eine Aktivierungs-Mail, in der Du nochmal auf einen Link klicken musst.</p>
<p>Um Dich für diesen kostenlosen Kurs einzuschreiben, trage bitte unten Deine Email-Adresse ein. Dann bekommst Du eine Aktivierungs-Mail, in der Du noch einmal auf einen Link klicken musst.</p>
<p>Trage hier nun Deine Email-Adresse ein, um Dich für den Kurs anzumelden.</p>
<div style="float: left; margin-left: 0px; margin-right: 0px; padding: 10px;">
<div class="klicktipp-form">
<table style="width: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0 0;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0px -40px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') -20px 0;"></td>
</tr>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0px -80px;"></td>
<td class="c" style="background: #ffffff; text-align: center;">
<form id="ktfs" action="https://www.klick-tipp.com/de/subscribe.php" method="post" accept-charset="UTF-8"><input id="FormValue_EmailAddress" style="margin-bottom: 10px; background: #fff; border: 1px solid #aaa; color: #000; width: 205px; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;" type="text" name="FormValue_Fields[EmailAddress]" value="E-Mail-Adresse" /></p>
<div style="vertical-align: top; text-align: center;"><button id="FormButton_Subscribe" style="background: none; padding: 0; margin: 0; border: none; display: inline; vertical-align: top;"><img decoding="async" src="https://klick-tipp.s3.amazonaws.com/buttons/jetzt-anmelden_orange_blau.png" alt="Jetzt anmelden!" /></button></div>
<p><input id="FormValue_ListID" type="hidden" name="FormValue_ListID" value="2293" /> <input id="FormValue_Command" type="hidden" name="FormValue_Command" value="Subscriber.Add" /></p>
</form>
<div style="font-size: 10px; text-align: center; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;">Wir halten uns an den <a style="color: #888; text-decoration: none; font-family: Tahoma, Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif;" title="Klick-Tipp Datenschutzrichtlinie" href="https://www.klick-tipp.com/datenschutz/5323" target="_blank" rel="noopener">Datenschutz</a>.</div>
</td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') -20px -80px;"></td>
</tr>
<tr>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0 -20px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') 0px -60px;"></td>
<td style="height: 20px; width: 20px; padding: 0; margin: 0; background: url('https://klick-tipp.s3.amazonaws.com/shadow.png') -20px -20px;"></td>
</tr>
</tbody>
</table>
<p><script type="text/javascript">// <![CDATA[
function ktfsFocus(a){a=a||window.event;var b=(a.srcElement)?a.srcElement:a.target;var c=b.value;var d=b.getAttribute('oldtext');if(d==undefined){b.setAttribute('oldtext',c);b.value='';b.style.backgroundColor='#f8ffba';}}function ktfsBlur(a){a=a||window.event;var b=(a.srcElement)?a.srcElement:a.target;var c=b.value;if(c==''){c=b.getAttribute('oldtext');b.removeAttribute('oldtext');b.value=c;b.style.backgroundColor='#fff';}}function ktfsRecursion(el){var i;for(i=0;i<el.children.length;i++){var el1=el.children[i];if(el1.nodeName=='INPUT') if('text'==el1.getAttribute('type')){el1.onfocus=ktfsFocus;el1.onblur=ktfsBlur};ktfsRecursion(el1)}}var form=document.getElementById('ktfs');ktfsRecursion(form);
// ]]&gt;</script></p>
</div>
</div>
<p><strong>Wichtig:</strong><br />
<strong> Deine EMail-Adresse behandle ich natürlich vertraulich und gebe diese an niemanden weiter. Zudem kannst Du Dich jederzeit durch einen Klick auf den Abmeldelink in einer der Emails einfach wieder abmelden.</strong></p>
<p>&nbsp;</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p><!--wpads#Unter_Video--><br />
[ <a href="https://et-tutorials.de/mikrocontroller/"> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses</a> .]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><span class="tve-leads-two-step-trigger tl-2step-trigger-0"></span><p>Der Beitrag <a href="https://et-tutorials.de/632/kostenloser-mikrocontroller-kurs/">Kostenloser Mikrocontroller-Kurs</a> erschien zuerst auf <a href="https://et-tutorials.de">ET-Tutorials.de</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
