<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Bit-Banging</id>
	<title>Bit-Banging - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Bit-Banging"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bit-Banging&amp;action=history"/>
	<updated>2026-05-24T02:11:20Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Bit-Banging&amp;diff=1139726&amp;oldid=prev</id>
		<title>imported&gt;SBàVélo: fehlendes &quot;delay();&quot; im Code eingefügt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bit-Banging&amp;diff=1139726&amp;oldid=prev"/>
		<updated>2023-07-05T10:07:05Z</updated>

		<summary type="html">&lt;p&gt;fehlendes &amp;quot;delay();&amp;quot; im Code eingefügt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Unter &amp;#039;&amp;#039;&amp;#039;Bit-Banging&amp;#039;&amp;#039;&amp;#039; versteht man eine Technik, die mittels Software und [[Eingabe und Ausgabe|I/O]]-Leitungen eine Hardware-[[Schnittstelle]] [[Emulation|emuliert]], die gewöhnlich mit einem spezifischen Peripherie-Baustein realisiert wird. Auf einem [[Personal Computer|PC]] können sowohl die serielle als auch die parallele Schnittstelle genutzt werden. Bei [[Mikrocontroller]]n nutzt man die I/O-Pins.&lt;br /&gt;
&lt;br /&gt;
Das Bit-Banging-Verfahren kann dann sinnvoll sein, wenn eine bestimmte Schnittstelle nicht in Hardware vorhanden ist, z.&amp;amp;nbsp;B. hat kein Standard-PC ein [[Serial Peripheral Interface|SPI]], oder wenn bei [[Mikrocontroller]]n eine Ressource bereits belegt ist. Besonders häufig dient Bit-Banging der Kosteneinsparung durch Ersetzen relativ teurer Peripheriebausteine.&lt;br /&gt;
&lt;br /&gt;
Eine Vielzahl von Schnittstellen kann durch Bit-Banging emuliert werden. Hier einige Beispiele:&lt;br /&gt;
* [[Serial Peripheral Interface|SPI]], synchrone serielle Schnittstelle&lt;br /&gt;
* [[Universal Asynchronous Receiver Transmitter|UART]], asynchrone serielle Schnittstelle – wird dann auch als „Software-UART“ bezeichnet&lt;br /&gt;
* [[1-Wire]], Eindraht-Schnittstelle&lt;br /&gt;
* [[Flüssigkristallbildschirm|LC]]-Display (z.&amp;amp;nbsp;B. [[HD44780]])&lt;br /&gt;
* [[I²C]], synchrone serielle Schnittstelle&lt;br /&gt;
* Decodierung der [[Leitungscode]]s für TV-Fernbedienungen&lt;br /&gt;
* [[Digital-Analog-Umsetzer]], mittels [[Pulsweitenmodulation|PWM]] und [[RC-Glied|RC-Siebglied]]&lt;br /&gt;
&lt;br /&gt;
Entsprechend der Komplexität des Schnittstellen-Protokolls kommen unterschiedliche Methoden zum Einsatz. Die einfachste Art ist das [[Polling (Informatik)|Polling]]. Der Prozessor fragt, so oft er kann, Änderungen an den I/O-Leitungen ab. Ist ein bestimmtes Zeitverhalten einzuhalten, benutzt man Warteschleifen oder [[Timer]]-Funktionen. Die Nutzung der Interrupt-Leitungen reduziert weiter die Prozessorauslastung. Speziell zur Erzeugung eines PWM-Signals dienen häufig die direkten Timer-Ausgänge. Trickreich ist die Aufwertung einer einfacheren Schnittstelle zu einem komplexen Protokoll.&lt;br /&gt;
&lt;br /&gt;
Nachteile des Bit-Bangings sind die hohe Prozessorauslastung, der erhöhte Softwareaufwand und meist starkes [[Jitter]] beim Zeitverhalten. Einige Schnittstellen, etwa SPI, sind dagegen immun, andere, etwa UART, haben strikte Zeitforderungen.&lt;br /&gt;
&lt;br /&gt;
== Programmbeispiel in C ==&lt;br /&gt;
Im folgenden Fragment in der [[C (Programmiersprache)|Programmiersprache C]] ist der Sendeteil einer synchronen seriellen Schnittstelle (SPI) mittels Bit-Banging dargestellt. Die I/O-Pins sind als &amp;#039;&amp;#039;SD_CS&amp;#039;&amp;#039; (Chip Select), &amp;#039;&amp;#039;SD_DI&amp;#039;&amp;#039; (Data) und als &amp;#039;&amp;#039;SD_CLK&amp;#039;&amp;#039; (Clock) bezeichnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
// transmit byte serially, MSB first&lt;br /&gt;
void send_8bit_serial_data(unsigned char data)&lt;br /&gt;
{&lt;br /&gt;
   int i;&lt;br /&gt;
&lt;br /&gt;
   // select device&lt;br /&gt;
   output_high(SD_CS);&lt;br /&gt;
&lt;br /&gt;
   // send bits 7..0&lt;br /&gt;
   for (i = 0; i &amp;lt; 8; i++)&lt;br /&gt;
   {&lt;br /&gt;
       // consider leftmost bit&lt;br /&gt;
       // set line high if bit is 1, low if bit is 0&lt;br /&gt;
       if (data &amp;amp; 0x80)&lt;br /&gt;
           output_high(SD_DI);&lt;br /&gt;
       else&lt;br /&gt;
           output_low(SD_DI);&lt;br /&gt;
&lt;br /&gt;
       // pulse clock to indicate that bit value should be read&lt;br /&gt;
       output_low(SD_CLK);&lt;br /&gt;
       delay();&lt;br /&gt;
       output_high(SD_CLK);&lt;br /&gt;
&lt;br /&gt;
       // shift byte left so next bit will be leftmost&lt;br /&gt;
       data &amp;lt;&amp;lt;= 1;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // deselect device&lt;br /&gt;
   output_low(SD_CS);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.elektroniknet.de/lexikon/bit-banging-16919.html Definition] im  elektronik.net-Lexikon&lt;br /&gt;
* Herbert Valerio Riedel: {{Webarchiv | url=http://web.student.tuwien.ac.at/~e9725348/Theses/ | wayback=20120722015829 | text=&amp;#039;&amp;#039;UART: A Software Implementation Approach&amp;#039;&amp;#039;.}} Diplomarbeit zum Thema, [[Technische Universität Wien|TU Wien]]. &lt;br /&gt;
* [http://www.mikrocontroller.net/articles/DCF77-Funkwecker_mit_AVR mikrocontroller.net] – DCF77-[[Funkuhr]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bussystem]]&lt;br /&gt;
[[Kategorie:Emulator]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SBàVélo</name></author>
	</entry>
</feed>