<?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>Raspberry Pi Archives - Nerd Corner</title>
	<atom:link href="https://nerd-corner.com/de/tag/raspberry-pi/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerd-corner.com/de/tag/raspberry-pi/</link>
	<description>Craft your dreams!</description>
	<lastBuildDate>Fri, 24 Feb 2023 21:00:22 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://nerd-corner.com/wp-content/uploads/2019/10/cropped-LogoNerdCorner-2-32x32.png</url>
	<title>Raspberry Pi Archives - Nerd Corner</title>
	<link>https://nerd-corner.com/de/tag/raspberry-pi/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Review Battery Shield V3 &#8211; Die DIY Powerbank mit LiPo Akku 18650</title>
		<link>https://nerd-corner.com/de/review-battery-shield-v3-die-diy-powerbank-mit-lipo-akku-18650/</link>
					<comments>https://nerd-corner.com/de/review-battery-shield-v3-die-diy-powerbank-mit-lipo-akku-18650/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Mon, 26 Jul 2021 18:16:06 +0000</pubDate>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[18650]]></category>
		<category><![CDATA[Akku]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Battery management system]]></category>
		<category><![CDATA[Battery shield V3]]></category>
		<category><![CDATA[Bedienungsanleitung]]></category>
		<category><![CDATA[DIY Powerbank]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Ladegerät]]></category>
		<category><![CDATA[Power Managment]]></category>
		<category><![CDATA[Powerbank]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Steuerung]]></category>
		<category><![CDATA[USB]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=1018</guid>

					<description><![CDATA[<p>Ich war schon länger auf der Suche nach einem Akku mit einem Battery Management System für meine Outdoor Projekte (Wetterstation, Bewässerungsanlage, etc.).  Beim Stöbern in &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/review-battery-shield-v3-die-diy-powerbank-mit-lipo-akku-18650/">Review Battery Shield V3 &#8211; Die DIY Powerbank mit LiPo Akku 18650</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ich war schon länger auf der Suche nach einem Akku mit einem Battery Management System für meine Outdoor Projekte (Wetterstation, Bewässerungsanlage, etc.).  Beim Stöbern in Online Shops stieß ich dabei zufälligerweise auf ein günstiges Modul zur Energieversorgung meiner Outdoor Projekte. Normalerweise sind mehrere Komponenten notwendig für eine unabhängige Energieversorgung (LiPo Lader, Akkuhalter, Step Down, Step Up, Solarpanel). Das &#8222;Battery Shield V3&#8220; übernimmt allerdings einen Großteil dieser Aufgaben. Für meine Anwendungsfälle (Ardunio + Sensoren) sind die bereitgestellten 5V und 3V Ausgänge ideal! Hier mein Review zum Battery Shield V3.</p>
<p><em><strong>Das könnte Sie auch interessieren:</strong> <a href="https://nerd-corner.com/de/step-down-modul-dc-dc-lm2596s-abwaertswandler/" target="_blank" rel="noopener">Entwicklung eines Step-Down Moduls</a></em></p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-1019" src="https://nerd-corner.com/wp-content/uploads/2021/07/both.jpg" alt="Battery shield v3" width="940" height="534" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/both.jpg 952w, https://nerd-corner.com/wp-content/uploads/2021/07/both-300x170.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/both-768x436.jpg 768w" sizes="(max-width: 940px) 100vw, 940px" /></p>
<h2>Liste der Bauteile:</h2>
<ul>
<li><a href="https://amzn.to/3z8vvwS" target="_blank" rel="noopener">1x Battery Shield V3</a></li>
<li>6x Linsenkopfschrauben M2x8</li>
<li>1x Hohlstecker 5,5&#215;2,1</li>
<li>6x Flachkopfschraube M2x6</li>
<li><a href="https://amzn.to/3EE2VIP" target="_blank" rel="noopener">1x LiPo Akku 18650</a></li>
</ul>
<p><img decoding="async" class="aligncenter wp-image-1023" src="https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPur.gif" alt="DIY Powerbank LiPo mit BMS" width="345" height="176" /></p>
<h2>Untersuchung des Battery Shield V3</h2>
<p>Nachdem das Battery Shield V3 bei mir angekommen war musste ich als erstes die Eigenschaften genau untersuchen.  Die Tests habe ich mir vorher überlegt und orientieren sich in erster Linie an meine Anwendungsfälle. Da ich natürlich kein Prüfinstitut bin habe ich die Tests so einfach wie möglich gehalten.</p>
<p><img decoding="async" class="aligncenter wp-image-1025" src="https://nerd-corner.com/wp-content/uploads/2021/07/Test1-scaled.jpg" alt="Battery shield v3 test lipo akku bms" width="2550" height="1436" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Test1-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2021/07/Test1-300x169.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Test1-1024x577.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Test1-768x432.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/Test1-1536x865.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2021/07/Test1-2048x1153.jpg 2048w" sizes="(max-width: 2550px) 100vw, 2550px" /></p>
<p>Zunächst habe ich die Hauptfunktion, das Aufladen eines LiPo Akkus, getestet. <span style="font-size: 1.125rem;">Der Ladevorgang am Modul wird mit Hilfe einer LED signalisiert. Rot bedeutet, dass der Akku aufgeladen wird und Grün bedeutet, dass der Ladevorgang beendet ist. Leider befinden sich die LEDs auf der Unterseite des Moduls und sind nicht gut sichtbar. </span></p>
<p><span style="font-size: 1.125rem;">Laut den Angaben des Herstellers bzw. des online Händlers beträgt die Ladespannung 4,2 V und der Ladestrom 500 mA. Um diese Werte zu überprüfen, habe ich den Ladezustand des eingesetzten Akkus gemessen und notiert. Der Ladezustand war ungefähr bei 1100 mAh. Die gesamte Kapazität des Akkus beträgt 3000 mAh. Daraus folgt, dass die Differenz zwischen vollständig geladen und teilgeladen 1900 mAh beträgt. Um die vorraussichtliche Ladedauer zu erhalten, wird dieser Wert durch die vom Hersteller angegebenen 500 mA geteilt. Die berechnete Ladedauer ergab somit 4 h. </span><span style="font-size: 1.125rem;">Als Netzteil wird ein Standard Netzteil mit 5V und 1A Ladestrom verwendet.</span><span style="font-size: 1.125rem;"> In der Realität betrug die Dauer des Ladens 4 h und 15 min. Das ist nahe an der Theorie und somit in Ordnung. </span></p>
<p><span style="font-size: 1.125rem;"><strong>Bitte beachten:</strong> Für diesen Test nie einen ganz neuen LiPo Akku verwenden, sondern einen der schon einige Ladezyklen hinter sich hat. Ansonsten ist das Ergebnis nicht sehr aussagekräftig. </span></p>
<h3>Untersuchung der Modul Spannungen</h3>
<p>Im zweiten Test wurden die unterschiedlichen Spannungen untersucht, welche das Modul zur Verfügung stellt. Diesen Test habe ich in zwei Phasen unterteilt. In der ersten Phase (Bild Test 2_1) wird das Modul ohne LiPo Akku verwendet. Anschließend wird in der zweiten Phase ein LiPo Akku eingesetzt.</p>
<p>Wichtig ist hierbei natürlich die richtige Auswahl der Verbraucher, um den Test so realitätsnah wie möglich durchzuführen. Für den USB-A Anschluss habe ich sowohl einen Lastwiderstand mit 1 A als auch mit 2 A ausgewählt. Dieser keramische Lastwiderstand ist ideal, da eine USB Schnittstelle vorhanden ist und die LED grün leuchtet wenn 5 Watt verbraucht werden. Bei 10 Watt leuchtet die LED rot.</p>
<p>Für die 3 x 5 V Ausgänge habe ich an zwei Ausgängen 5V LED Streifen gelötet und am dritten 5V Ausgang hängt ein von mir konstruiertes Step-Down Modul LM2596S, das auf 2V eingestellt ist, um eine 10 mm RGB Led zu versorgen. An die 3 x 3 V Ausgängen wurden jeweils 3 V LEDs gelötet. Für diesen Test wurde ein 5 V (18 Watt) Netzteil verwendet.</p>
<h4>Das Modul im Netzbetrieb ohne LiPo Akku</h4>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1028 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/TEST2_1.jpg" alt="Review: Battery Shield V3" width="1675" height="1017" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/TEST2_1.jpg 1682w, https://nerd-corner.com/wp-content/uploads/2021/07/TEST2_1-300x182.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/TEST2_1-1024x622.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/TEST2_1-768x466.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/TEST2_1-1536x932.jpg 1536w" sizes="auto, (max-width: 1675px) 100vw, 1675px" /></p>
<p>Es passierte eigentlich nach dem Anschließen der Verbraucher und den Netzteil nicht sonderlich viel. Es leuchtete nur die modulinterne LED rot. Erst als ich den Keramik-Lastwiderstand deaktiviert habe leuchtete einer der 5 V LED Streifen und die mit dem Step-Down verbundene RGB Diode (Gelb markiert in Bild Test2_1).</p>
<p>Bei der anschließenden Messung der Ausgänge wurden folgende Werte festgestellt: Bei den 5 V Ausgängen wurde eine Spannung von 3,24 V gemessen und bei den 3 V Ausgängen 2,28 V. Die gesamte Strombereitstellung des Moduls ohne eingesetzten LiPo Akku liegt bei ca. 11 mA. Das sollte für eine kleine LED ausreichen.</p>
<h4>Das Modul mit LiPo Akku</h4>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1029 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/Test2_2.jpg" alt="Review: Battery Shield V3" width="1640" height="996" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Test2_2.jpg 1654w, https://nerd-corner.com/wp-content/uploads/2021/07/Test2_2-300x182.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Test2_2-1024x622.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Test2_2-768x467.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/Test2_2-1536x933.jpg 1536w" sizes="auto, (max-width: 1640px) 100vw, 1640px" /></p>
<p>Für die Phase 2 wurden alle Verbraucher entfernt und ein LiPo Akku (<span style="font-size: 1.125rem;">SAMSUNG INR18650-35E SDI KL59</span>) in das Modul eingesetzt. Wie auf den Bildern zu erkennen ist wurden Steckverbindungen angebracht. Das liegt daran, dass dieses Modul keinen Schalter für den LiPo Akku besitzt und somit die Last sofort auf den LiPo Akku angelegt wird. Es ist einfach unangenehm einen Akku oder jegliche Batterie unter Last einzulegen bzw. einzustecken.</p>
<p>Alle Verbraucher sind in Phase 2 im Vollmodus und funktionieren einwandfrei. Zusätzlich wird sogar noch der LiPo Akku aufgeladen. Zweifel sind an den 5 V Ausgängen bezüglich der Ampereangaben (4 A) angebracht. Angesichts der Ampere Zahlen des LiPo Akkus ist das zwar möglich, aber es erscheint mir sehr hoch für eine USB Micro Versorgung. Meine Empfehlung ist das Modul mit weniger als 4 Ampere zu beanspruchen.</p>
<h4>Tiefenentladeschutz</h4>
<p>Der dritte und letzte Test ist eher trivial. Um den Tiefenentladeschutz zu prüfen wurde nur der Keramik Lastwiderstand mit 5 Watt aktiviert und keine Netzversorgung angeschlossen. Dadurch wird der LiPo Akku entladen und wenn der Tiefenentladeschutz des Moduls den Entladeprozess eigenständig beendet ist der Test erfolgreich. Das war der Fall. Es war genügend Restkapazität vorhanden. Allerdings sollten solche Stresssituationen <span style="font-size: 1.125rem;">für den LiPo Akku </span><span style="font-size: 1.125rem;">trotzdem vermieden werden. </span></p>
<h2>Gehäuse für das Battery Shield V3</h2>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1031 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/Wlc.jpg" alt="Review Battery Shield V3" width="1250" height="426" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Wlc.jpg 1253w, https://nerd-corner.com/wp-content/uploads/2021/07/Wlc-300x102.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Wlc-1024x349.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Wlc-768x262.jpg 768w" sizes="auto, (max-width: 1250px) 100vw, 1250px" /></p>
<p>Natürlich konnte ich es nicht lassen noch ein Gehäuse für das Battery Shield V3 Modul zu konstruieren. Neben dem normalen 5 V USB Ausgang, der über einen extra Schalter ein- und ausgeschalten werden kann, habe ich zusätzlich noch einen konstanten 3V Ausgang mit einer 5,5 x 2,1 Buchse  in das Gehäuse konstruiert.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1032 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/Top-1.jpg" alt="Review Battery Shiled V3" width="1160" height="370" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Top-1.jpg 1173w, https://nerd-corner.com/wp-content/uploads/2021/07/Top-1-300x96.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Top-1-1024x326.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Top-1-768x245.jpg 768w" sizes="auto, (max-width: 1160px) 100vw, 1160px" /></p>
<p>Das Gehäuse kann am Ende des Blogbeitrags im STL-Format heruntergeladen werden.</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1033" src="https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl.jpg" alt="Review DIY Powerbank" width="1500" height="681" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl.jpg 2166w, https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl-300x136.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl-1024x465.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl-768x349.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl-1536x698.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2021/07/PowerbankPurKpl-2048x930.jpg 2048w" sizes="auto, (max-width: 1500px) 100vw, 1500px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1054 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/Abm-1.jpg" alt="Abmessungen battery shield v3" width="1500" height="925" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Abm-1.jpg 1678w, https://nerd-corner.com/wp-content/uploads/2021/07/Abm-1-300x185.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Abm-1-1024x632.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Abm-1-768x474.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/Abm-1-1536x947.jpg 1536w" sizes="auto, (max-width: 1500px) 100vw, 1500px" /></p>
<h2>Kleiner Nachteil</h2>
<p>Der On/OFF Schalter schaltet nur den USB Port. Die 3 x 3 V und 3 x 5 V Lötstellen können nicht über diesen Schalter ein und ausgeschaltet werden.</p>
<p>Für meine Elektronik Projekte ist dieser Nachteil nicht wirklich dramatisch, da ich in erster Linie den USB Port nutze. Außerdem können an die Lötstellen auch zusätzliche Schalter eingelötet werden.</p>
<h2>Dateien zum Herunterladen:</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/1039/?tmstv=1756294958" rel="nofollow" id="download-link-1039" data-redirect="false" >
	Datenblatt Battery Shield V3 (von AZ Delivery)</a>
</li>
<li><a href="https://www.thingiverse.com/thing:4917764" target="_blank" rel="noopener">3D Druck Gehäuse</a></li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/review-battery-shield-v3-die-diy-powerbank-mit-lipo-akku-18650/">Review Battery Shield V3 &#8211; Die DIY Powerbank mit LiPo Akku 18650</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/review-battery-shield-v3-die-diy-powerbank-mit-lipo-akku-18650/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Upgrade: Datentransfer mittels VLC und LiFi – Pi zu Pi Übertragung</title>
		<link>https://nerd-corner.com/de/upgrade-datentransfer-mittels-vlc-und-lifi-pi-zu-pi-uebertragung/</link>
					<comments>https://nerd-corner.com/de/upgrade-datentransfer-mittels-vlc-und-lifi-pi-zu-pi-uebertragung/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Thu, 08 Jul 2021 13:53:33 +0000</pubDate>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Linux-DE]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[CAD]]></category>
		<category><![CDATA[Datenübertragung]]></category>
		<category><![CDATA[Datenübertragung per Licht]]></category>
		<category><![CDATA[Genauigkeit]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kommunikationstechnik]]></category>
		<category><![CDATA[LiFi]]></category>
		<category><![CDATA[LiFI Router]]></category>
		<category><![CDATA[Light Fidelity]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lüfter]]></category>
		<category><![CDATA[Präzision]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[visible Light communication]]></category>
		<category><![CDATA[visuelle Lichtkommunikation]]></category>
		<category><![CDATA[VLC]]></category>
		<category><![CDATA[zyklische Redundanzprüfung]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=964</guid>

					<description><![CDATA[<p>Nachdem ich bereits einfache Textnachrichten mittels Lichtsignale von einem Raspberry Pi zu einem Arduino Uno übertragen habe ( Link: https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/ ) wollte ich dieses System &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/upgrade-datentransfer-mittels-vlc-und-lifi-pi-zu-pi-uebertragung/">Upgrade: Datentransfer mittels VLC und LiFi – Pi zu Pi Übertragung</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Nachdem ich bereits einfache Textnachrichten mittels Lichtsignale von einem Raspberry Pi zu einem Arduino Uno übertragen habe ( Link: <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/">https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/</a> ) wollte ich dieses System verbessern, um jegliche Dateiformate in beide Richtungen übertragen zu können. Da ein Raspberry Pi mit Linux betrieben wird, kann dieses System zur Datenübertragung mittels VLC (visueller Lichtkommunikation) auf alle Linux Geräte übertragen werden. Der Software Code und die STL Dateien können am Ende des Blogeintrags heruntergeladen werden.</p>
<p><em><strong>Das könnte dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/" target="_blank" rel="noopener">Textnachrichten mittels Lichtsignale senden</a></em></p>
<p><em><strong>Eng mit diesem Artikel verbunden:</strong> <a href="https://nerd-corner.com/de/zyklische-redundanzpruefung-in-c/" target="_blank" rel="noopener">Fehlererkennung bei der Datenübertragung</a></em></p>
<p><em><strong>Ebenfalls relevant:</strong> <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/" target="_blank" rel="noopener">Taktgeschwindigkeit für eine Datenübertragung festlegen in C</a></em></p>
<h2>Liste der Bauteile</h2>
<ul>
<li><a href="https://amzn.to/3zlaLSJ" target="_blank" rel="noopener">2x Raspberry Pi 4</a></li>
<li><a href="https://amzn.to/3zhH6to" target="_blank" rel="noopener">2x 5V Solarzelle</a></li>
<li><a href="https://amzn.to/3rkpOZU" target="_blank" rel="noopener">2x 5V Laserdiode</a></li>
<li><a href="https://amzn.to/2Uu9AkT" target="_blank" rel="noopener">Jumper Kabel</a></li>
<li><a href="https://amzn.to/3exAv6g" target="_blank" rel="noopener">3D Drucker</a></li>
<li><a href="https://amzn.to/3hST9I2" target="_blank" rel="noopener">Filament</a></li>
<li><a href="https://amzn.to/3kwoX7c" target="_blank" rel="noopener">2x 5V Lüfter</a></li>
<li><a href="https://amzn.to/2UvY34L" target="_blank" rel="noopener">NPN Transistor</a></li>
<li>2x ADC Board mit einem LM393</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-966 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-scaled.jpg" alt="Datenübertragung mit Licht Einzelteile" width="2500" height="1681" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-300x202.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-1024x689.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-768x516.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-1536x1033.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-parts-2048x1377.jpg 2048w" sizes="auto, (max-width: 2500px) 100vw, 2500px" /></p>
<h2>Verkabelung</h2>
<p>Anders als bei der Verkabelung im letzten Artikel, in dem Textnachrichten mittels Lichtsignale von einem Pi zu einem Arduino gesendet wurden ( Link: <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/">https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/</a> ), gibt es jetzt keinen definierten Empfänger und keinen definierten Sender. Es werden stattdessen zwei baugleiche Stationen aufgebaut, die sowohl Daten senden und empfangen können.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-965 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine.png" alt="Fritzing Pi VLC LiFI" width="2250" height="1459" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine.png 2270w, https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine-300x195.png 300w, https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine-1024x664.png 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine-768x498.png 768w, https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine-1536x996.png 1536w, https://nerd-corner.com/wp-content/uploads/2021/07/FritzingPiTransceiver_Steckplatine-2048x1328.png 2048w" sizes="auto, (max-width: 2250px) 100vw, 2250px" /></p>
<p>Aus diesem Grund werden die Raspberry Pi’s sowohl mit einem 5V Laser als auch mit einer 5V Solarzelle verbunden. Für den Laser wurde der GPIO18 Pin gewählt, welcher in der „wiringPi“ Library Pin 1 entspricht. Die „wiringPi“ Library wird im Programmcode verwendet. Direkt unter GPIO18 befindet sich ein Ground, welcher mit dem Minus Pol des Lasers verbunden wird.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-967 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/GPIO.png" alt="Datenübertragung mittels Licht Pi" width="1500" height="1125" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/GPIO.png 1600w, https://nerd-corner.com/wp-content/uploads/2021/07/GPIO-300x225.png 300w, https://nerd-corner.com/wp-content/uploads/2021/07/GPIO-1024x768.png 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/GPIO-768x576.png 768w, https://nerd-corner.com/wp-content/uploads/2021/07/GPIO-1536x1152.png 1536w" sizes="auto, (max-width: 1500px) 100vw, 1500px" /></p>
<p>Die Solarzelle liefert je nach Lichtintensität einen entsprechenden Spannungswert. Da die digitalen Pins des Raspberry Pi aber nur 1 und 0 erkennen können, muss mit Hilfe eines Komparators der analoge Wert der Solarzelle in einen digitalen Wert gewandelt werden. Der Vorgang wird genauer im Abschnitt „ADC Board mit einem LM393 Komparator“ erläutert. Für die Verkabelung wird der Plus und Minus Pol der Solarzelle mit den Plus und Minus Kontakten des ADC Boards verbunden. Anschließend wird der Ground des ADC Boards an einen Raspberry Pi Ground verbunden und für die Spannungsversorgung der Plus Pol des ADC Boards mit 5V des Pi verbunden. Der D0 Pin des ADC Boards liefert den digitalen Wert 0 oder 1, abhängig von der Lichtintensität der Solarzelle. Diesen Pin habe ich mit GPIO17, welcher in der „wiringPi“ Library Pin 0 entspricht, verbunden.</p>
<p>Da mir aufgefallen ist, dass der Pi im Betrieb sehr heiß wird, habe ich noch einen Lüfter angeschlossen. Damit der Lüfter sich nicht dauerhaft im Betrieb befindet, was sich negativ auf die Leistung des Lasers auswirken würde, kann der Lüfter durch einen NPN Transistor geschalten werden. Hierfür verbindet man den Plus Pol des Lüfters direkt mit einem 5V Pin des Raspberry Pi und den Minus Pol des Lüfters mit dem Emitter des NPN Transistors. Der Collector des Transistors wird mit einem Ground des Pi verbunden. Um nun den Lüfter über den Transistor ein- und ausschalten zu können wird die Transistor Basis mit einem GPIO Pin verbunden. Ich habe beispielsweise GPIO27 (entspricht in der „wiringPi“ Library Pin 2) gewählt. In der Nachfolgenden Tabelle werden die Pins des Pi der Nummerierung der „wiringPi“ Library gegenüber gestellt.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-940 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/06/pinbelegung-Pi.png" alt="VLC Textnachrichten visuelle Lichtkommunikation wiringPi Datenübertragung mit Licht" width="599" height="295" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/pinbelegung-Pi.png 600w, https://nerd-corner.com/wp-content/uploads/2021/06/pinbelegung-Pi-300x148.png 300w" sizes="auto, (max-width: 599px) 100vw, 599px" /></p>
<h2>ADC Board mit einem LM393 Komparator</h2>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-968 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/ADC-LM393.jpg" alt="ADC Board mit LM393 Komparator" width="450" height="319" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/ADC-LM393.jpg 771w, https://nerd-corner.com/wp-content/uploads/2021/07/ADC-LM393-300x213.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/ADC-LM393-768x545.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/ADC-LM393-120x85.jpg 120w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Die Solarzelle gibt abhängig von der Lichtintensität einen Spannungswert zurück. Leider hat der Raspberry Pi aber keine analogen Pins um diesen Spannungswert auszulesen. Daher muss das analoge Signal in ein digitales Signal umgewandelt werden. Mit Hilfe des <a href="https://www.ti.com/product/LM393" target="_blank" rel="noopener">LM393</a> Komparators ist das möglich. Dieser ist häufig auf ADC Boards verbaut. Hier habe ich einfach den ursprünglichen Sensor (es war ein Fotowiderstand) durch die Solarzelle ersetzt. Mit Hilfe eines Potentiometers kann der Komparator eingestellt werden. Das bedeutet, sobald der Spannungswert der Solarzelle, welcher von der Lichtintensität abhängt, den eingestellten Wert des Potentiometers übersteigt, wird eine digitale 1 gemessen, anderenfalls eine digitale 0.</p>
<h2>Aufbau des Datenframes</h2>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-969" src="https://nerd-corner.com/wp-content/uploads/2021/07/MultipleFrames-1.jpg" alt="Aufbau Datenframe Lichtübertragung Daten Datentransfer mittels VLC" width="1300" height="469" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/MultipleFrames-1.jpg 1409w, https://nerd-corner.com/wp-content/uploads/2021/07/MultipleFrames-1-300x108.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/MultipleFrames-1-1024x369.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/MultipleFrames-1-768x277.jpg 768w" sizes="auto, (max-width: 1300px) 100vw, 1300px" /></p>
<p>Der Datenframe für das Versenden der Textnachrichten mittels visueller Lichtkommunikation (Link: <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/">https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/</a> ) bestand aus einer Preamble, der Länge der Textnachricht, dem Textinhalt und der zyklischen Redundanzprüfung. Um aber statt Textnachrichten alle möglichen Arten von Daten verschicken zu können muss anstelle der Länge der Textnachricht der Dateiname, die Dateiendung, die Gesamtzahl der Pakete und die Nummer des aktuellen Pakets angegeben werden. Anschließend kann der Dateninhalt und der Code der zyklischen Redundanzprüfung angefügt werden.</p>
<h2>Softwarecode für Datentransfer mittels VLC</h2>
<p>Im Grunde wurden die Empfänger- und Senderskripte aus dem vorherigen Projekt zum Senden von Textnachrichten mittels visueller Lichtkommunikation (Link: <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/" target="_blank" rel="noopener">https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/</a> ) weiterentwickelt und zu einem gemeinsamen Skript zusammengefasst. Welches auf beiden Raspberry Pi’s Anwendung findet. Es wurde beispielsweise eine „ReadFile“ und „WriteFile“ Funktion ergänzt, welche Dateien einlesen und empfangene Datenpakete zu einer Datei zusammenfassen und abspeichern können. Das Programm wurde wieder in C geschrieben, da eine hohe Geschwindigkeit bei der Datenübertragung erreicht werden soll. Details zur präzisen Programmierung in C für eine schnelle Datenübertragung in diesem Beitrag: <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/" target="_blank" rel="noopener">https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/</a></p>
<p>Der gesamte Softwarecode zum Datentransfer mittels VLC kann am Ende des Artikels heruntergeladen werden. Der Kern des Programms ist wieder eine State Maschine mit Hilfe derer ausgewählt werden kann, ob Daten gesendet oder empfangen werden sollen. Außerdem schaltet das Programm automatisch den Lüfter an, wenn keine Datenübertragung stattfindet. Wichtig: Beim Kompilieren bitte nicht die „<a href="http://wiringpi.com/" target="_blank" rel="noopener">wiringPi</a>“ Bibliothek und die &#8222;math.h&#8220; Bibliothek vergessen! Der Befehl lautet: „gcc -o transceiver transceiver.c -lwiringPi -lm“</p>
<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-group="transceiver" data-enlighter-title="transceiver.c">while(1)
    {
        digitalWrite (2, HIGH);
        printf("Press the R button for Receiver Mode or any other key for Sender Mode\n");
        scanf(" %c",&amp;mode);
        
        if (mode=='R'||mode=='r')
        {
            digitalWrite(2,LOW);
            modeReceiver=true;
        }
        
        if (mode!='R'&amp;&amp;mode!='r')
        {
            digitalWrite(2,LOW);
            modeReceiver=false;
            
            char dataName[NAME_MAX];
            char dataExtension[NAME_MAX];
            
               
            printf("\n Name of file WITHOUT extension: ");
            scanf("%s",dataName);

            printf("\n Extension: ");
            scanf("%s",dataExtension);

            if (read_file(dataName, dataExtension, file_content) != OK)
            {
                printf("File read error, size exceeds array size\n");
                return -1;
            }
            BuildDataFrame(dataName, dataExtension, file_content);
        }
        
        
        
        while(modeReceiver)
        {
            gettimeofday(&amp;tval_after, NULL);
            timersub(&amp;tval_after, &amp;tval_before, &amp;tval_result);
            double time_elapsed = (double)tval_result.tv_sec + ((double)tval_result.tv_usec/1000000.0f);
            
            while(time_elapsed &lt; 0.001)
            {
                gettimeofday(&amp;tval_after, NULL);
                timersub(&amp;tval_after, &amp;tval_before, &amp;tval_result);
                time_elapsed = (double)tval_result.tv_sec + ((double)tval_result.tv_usec/1000000.0f);
            }
            gettimeofday(&amp;tval_before, NULL);
            
            int data = digitalRead(0);
            
            
            switch (state)
            {
                case 0:
                    //looking for preamble pattern
                    synchro_Done=false;
                    LookForSynchro(data);
                    
                    if (synchro_Done==true)
                    {
                        state=1;
                    }
                    break;
                    
                case 1:
                    //receive the actual data
                    receiveData_Done=false;
                    senderState=false;
                    ReceiveData(data);
                    
                    if(receiveData_Done&amp;&amp;senderState==false)
                    {
                        state=0;
                    }
                    if(senderState==true){
                        senderState=false;
                        state=0;
                        modeReceiver=false;
                        }
                    break;
                  
            }
            
        }
    }</pre>
<p>&nbsp;</p>
<h2>Gehäuse</h2>
<p>Um die Komponenten an Ort und Stelle fixieren zu können, wurde im CAD ein Gehäuse konstruiert. Dies hat auch den Vorteil, dass keine komplizierte Ausrichtung der Laser und der Solarzellen für die Datenübertragung notwendig ist. Für Anfänger eignet sich TinkerCAD zum Gehäuse design. TinkerCAD ist kostenlos und kann direkt im Browser benutzt werden. Alternativ können die STL Files für den 3D Drucker auch hier heruntergeladen werden.</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-970" src="https://nerd-corner.com/wp-content/uploads/2021/07/gehaeuse-CAD.jpg" alt="Datenübertragung per Licht Gehäuse Datentransfer mittels VLC" width="600" height="530" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/gehaeuse-CAD.jpg 682w, https://nerd-corner.com/wp-content/uploads/2021/07/gehaeuse-CAD-300x265.jpg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>Das Gehäuse zum Datentransfer mittels VLC besitzt eine Öffnung für die Solarzelle und den Laser. Außerdem wurde ein Abluftschacht für den Lüfter konstruiert und zusätzlich Platz für ein Raspberry Pi Gehäuse frei gelassen. Im nachfolgenden Bild wird der Einbau der Komponenten dargestellt.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-971 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-scaled.jpg" alt="Datenübertragung per Licht Lifi VLC" width="2500" height="1875" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-300x225.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-1024x768.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-768x576.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-1536x1152.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2021/07/assembly-end-2048x1536.jpg 2048w" sizes="auto, (max-width: 2500px) 100vw, 2500px" /></p>
<h2>Fazit zum Datentransfer mittels VLC</h2>
<p>Es wurde das bereits bestehende System zum Senden von Textnachrichten mittels visueller Lichtsignale weiterentwickelt, sodass jetzt alle Arten von Daten gesendet und empfangen werden können. Das System funktioniert erstaunlich erfolgreich. Es ist sehr robust und erreicht eine Datenrate von 1 kBit/s bis 10 kBit/s. Alle ankommenden Datenpakete können durch den intelligenten Aufbau des Datenframes direkt zugeordnet werden. Lediglich ein Acknowledgement Signal wäre noch eine sinnvolle Ergänzung. Ein solches Signal wäre eine Rückmeldung vom Empfänger an den Sender um dem Sender mitzuteilen, dass alle Pakete angekommen sind, oder eventuell ein bestimmtes Paket fehlerhaft war und erneut gesendet werden muss.</p>
<p>Ebenfalls interessant für die Zukunft wäre andere Modulationsarten auszuprobieren. Besonders das speziell für visuelle Lichtkommunikation erdachte Colour Shift Keying würde ich gerne näher untersuchen und die daraus resultierenden Datenraten vergleichen.</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-972" src="https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-scaled.jpg" alt="Datenübertragung per Licht Gehäuse Lifi VLC Datentransfer mittels VLC" width="2500" height="1125" srcset="https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-300x135.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-1024x461.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-768x346.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-1536x691.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2021/07/Assembly-finish-2048x922.jpg 2048w" sizes="auto, (max-width: 2500px) 100vw, 2500px" /></p>
<h2>Dateien herunterladen:</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/977/?tmstv=1756294958" rel="nofollow" id="download-link-977" data-redirect="false" >
	Softwarecode Transceiver</a>
</li>
<li><a href="https://cults3d.com/en/3d-model/various/visible-light-communication-pi-housing" target="_blank" rel="noopener">STL files housing</a></li>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/991/?tmstv=1756294958" rel="nofollow" id="download-link-991" data-redirect="false" >
	Pi Case with free pins (Creative Common License from Thingiverse)</a>
</li>
</ul>
<p>&nbsp;</p>
<p>The post <a href="https://nerd-corner.com/de/upgrade-datentransfer-mittels-vlc-und-lifi-pi-zu-pi-uebertragung/">Upgrade: Datentransfer mittels VLC und LiFi – Pi zu Pi Übertragung</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/upgrade-datentransfer-mittels-vlc-und-lifi-pi-zu-pi-uebertragung/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Wie programmiert man einen präzisen Timer in C für Linux</title>
		<link>https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/</link>
					<comments>https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sun, 28 Feb 2021 13:03:04 +0000</pubDate>
				<category><![CDATA[Linux-DE]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[Genauigkeit]]></category>
		<category><![CDATA[Kommunikationstechnik]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Präzision]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Timer]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=833</guid>

					<description><![CDATA[<p>Ich wollte einen Timer in C für meinen Raspberry Pi programmieren, der sowohl für 1 ms als auch für 0,1 ms präzise Arbeitsanweisungen ausführt. Da &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/">Wie programmiert man einen präzisen Timer in C für Linux</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ich wollte einen Timer in C für meinen Raspberry Pi programmieren, der sowohl für 1 ms als auch für 0,1 ms präzise Arbeitsanweisungen ausführt. Da Python zur Laufzeit kompiliert wird, war Python für diesen Zweck leider viel zu langsam. Aus diesem Grund wurde das Programm in C geschrieben. Die 1 ms und 0,1 ms wurden nach der Programmierung mit Hilfe eines Oszilloskops bestätigt.</p>
<p>Nachfolgend eine Erklärung wieso die Library „sys/time.h“ genutzt wurde, sowie ein Codebeispiel mit anschließender Erläuterung. Dieses Codebeispiel eignet sich sehr gut für bitweise Datenübertragung in der Kommunikationstechnik.</p>
<p><em><strong>Das könnte Sie ebenfalls interessieren:</strong> <a href="https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/" target="_blank" rel="noopener">Präzise Timer Interrupts für den Arduino programmieren!</a></em></p>
<h2>Liste der Komponenten</h2>
<ul>
<li><a href="https://amzn.to/3hSZ7bT" target="_blank" rel="noopener">Linux Betriebssystem (zum Beispiel Raspberry Pi)</a></li>
<li>Editor für C &#8211; Programmierung</li>
</ul>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-841" src="https://nerd-corner.com/wp-content/uploads/2021/02/proxy-image-3.jpg" alt="Timer in C for Linux" width="498" height="404" srcset="https://nerd-corner.com/wp-content/uploads/2021/02/proxy-image-3.jpg 1084w, https://nerd-corner.com/wp-content/uploads/2021/02/proxy-image-3-300x243.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/02/proxy-image-3-1024x830.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/02/proxy-image-3-768x623.jpg 768w" sizes="auto, (max-width: 498px) 100vw, 498px" /></p>
<h2>Die Library „sys/time.h“</h2>
<p>Funktionen wie „usleep()“ oder „nanosleep()“ würden das komplette Programm anhalten. Für einfache Anwendungen mag das vielleicht ausreichen, allerdings war das für meine Zwecke zu ungenau. Ich wollte einen Timer, der wirklich exakt im 1 ms Takt bzw. 0,1 ms Takt arbeitet. Deswegen wurde anstelle von „usleep()“ oder „nanosleep()“ eine andere Lösung gewählt. Die Library „sys/time.h“. Diese kann die aktuelle „System Clock Time“ (System Uhrzeit) auslesen und vergleichen.</p>
<h2>Codebeispiel für präzisen Timer in C</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="c">#include &lt;sys/time.h&gt;

int main()
{
    struct timeval tval_before, tval_after, tval_result;
    int counter=0;
    bool stop=false;
   
    gettimeofday(&amp;tval_before, NULL);
    while(stop!=true)
    {
        gettimeofday(&amp;tval_after, NULL);
        timersub(&amp;tval_after, &amp;tval_before, &amp;tval_result);
        double time_elapsed = (double)tval_result.tv_sec + ((double)tval_result.tv_usec/1000000.0f);
        
        while(time_elapsed &lt; 0.001)  //1ms; you can change your desired time interval here
        {
            gettimeofday(&amp;tval_after, NULL);
            timersub(&amp;tval_after, &amp;tval_before, &amp;tval_result);
            time_elapsed = (double)tval_result.tv_sec + ((double)tval_result.tv_usec/1000000.0f);
        }
        gettimeofday(&amp;tval_before, NULL);
        
        if (counter==10000)
        {
            stop=true;
        }
            
        else 
        {
            counter++;
        }
    }
    return 0;
}
</pre>
<h2>Erklärung zum Codebeispiel:</h2>
<p>Eine Funktion &#8222;gettimeofday&#8220; schreibt die aktuelle System Uhrzeit in die Variable &#8222;tval_before&#8220;. Eine While Schleife wird anschließend solange ausgeführt bis die eigentliche Aufgabe erledigt ist.</p>
<p>Innerhalb der While Schleife wird als Erstes erneut die System Uhrzeit in eine Variable &#8222;tval_after&#8220; abgespeichert. Anschließend wird die zeitliche Differenz zwischen &#8222;tval_after&#8220; und &#8222;tval_before&#8220; gemessen und in &#8222;tval_result&#8220; abgespeichert.</p>
<p>Der nächste Schritt des Timers in C erschließt sich nicht sofort auf den ersten Blick: &#8222;tv_result&#8220; besteht per Definition aus 2 Teilen. Zum einen ein Sekunden Anteil &#8222;.tv_sec&#8220; und zum anderen ein Mikrosekunden Anteil &#8222;.tv_usec&#8220;. Eben dieser Mikrosekundenanteil muss erst noch durch eine Million geteilt werden, damit man den Wert in Sekunden erhält. Anschließend, kann der Mikrosekundenanteil zum Sekundenanteil addiert werden.</p>
<p>Der addierte Wert wird im Code als &#8222;time_elapsed&#8220; bezeichnet. Falls dieser Wert kleiner als eine Millisekunde ist, wird eine weitere innere While Schleife geöffnet, die solange den Wert für &#8222;time_elapsed&#8220; neu berechnet, bis exakt 1 ms vergangen ist. Anschließend wird mittels der &#8222;gettimeofday&#8220; Funktion der Wert für &#8222;tval_before&#8220; neu festgelegt.</p>
<p>Da zu diesem Zeitpunkt exakt 1 ms vergangen ist, kann der Timer nun seinen eigentlichen Arbeitsschritt ausführen. In diesem einfachen Codebeispiel wird lediglich eine Variable „counter“ um 1 erhöht. Das bedeutet für jeden Intervallschritt (im Codebeispiel 1 ms) erhöht sich der counter um 1. Sobald ein festgelegter Wert für counter erreicht wurde stoppt das Programm. In diesem Fall ist der festgelegte Wert 10000. Anschließend wird die While Schleife beendet. Aber dieser Teil des Codes kann natürlich problemlos für die eigenen Zwecke angepasst werden.</p>
<p>Meine Messungen mit dem Oszilloskop haben eine exakte Frequenz von 1 ms gemessen, sogar 0,1 ms wurde exakt gemessen. Dieses Codebeispiel eignet sich deswegen auch sehr gut für eine exakte <a href="https://de.wikipedia.org/wiki/Daten%C3%BCbertragung">Datenübertragung</a> in der Kommunikationstechnik.</p>
<h2>Dateien herunterladen</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/835/?tmstv=1756294958" rel="nofollow" id="download-link-835" data-redirect="false" >
	Downloadfile Timer in C</a>
</li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/">Wie programmiert man einen präzisen Timer in C für Linux</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
