<?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>Timer Archives - Nerd Corner</title>
	<atom:link href="https://nerd-corner.com/de/tag/timer-de/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerd-corner.com/de/tag/timer-de/</link>
	<description>Craft your dreams!</description>
	<lastBuildDate>Tue, 20 Jul 2021 08:50:24 +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>Timer Archives - Nerd Corner</title>
	<link>https://nerd-corner.com/de/tag/timer-de/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino Timer Interrupts – Arduino Register programmieren</title>
		<link>https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/</link>
					<comments>https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sat, 06 Mar 2021 23:47:26 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Arduino Uno]]></category>
		<category><![CDATA[Bedienungsanleitung]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[Genauigkeit]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Präzision]]></category>
		<category><![CDATA[Schritt für Schritt Anweisung]]></category>
		<category><![CDATA[Timer]]></category>
		<category><![CDATA[Timer Interrupts]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=851</guid>

					<description><![CDATA[<p>Wenn du eine regelmäßige Frequenz mit dem Arduino erreichen willst, kannst du einfach die delay() Funktion verwenden. Diese pausiert das Programm des Arduinos für die &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/">Arduino Timer Interrupts – Arduino Register programmieren</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Wenn du eine regelmäßige Frequenz mit dem Arduino erreichen willst, kannst du einfach die delay() Funktion verwenden. Diese pausiert das Programm des Arduinos für die entsprechende Zeitspanne. Wenn die Anforderungen höher sind, kannst du auch millis() oder nanos() als Timer verwenden. Die delay() und millis() Funktionen sind wahrscheinlich für die meisten Anwendungen ausreichend, aber wenn du nicht das ganze Programm pausieren oder eine 100% exakte Taktzeit erreichen willst, macht es Sinn, Arduino Timer Interrupts zu verwenden. Wir erklären was Timer Interrupts sind und wie man sie benutzt. Den Arduino Code findest du am Ende des Beitrags.</p>
<p><em><strong>Das könnte dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/" target="_blank" rel="noopener noreferrer">Raspberry Pi Timer programmieren in C</a></em></p>
<h2>Liste der Komponenten</h2>
<ul>
<li><a href="https://amzn.to/3Bhpobz" target="_blank" rel="noopener">Arduino Uno</a></li>
<li><a href="https://amzn.to/3kAMzHH" target="_blank" rel="noopener">LED</a></li>
<li><a href="https://amzn.to/3xSmA2m" target="_blank" rel="noopener">Jumper Kabel</a></li>
<li><a href="https://amzn.to/3y5rp8N" target="_blank" rel="noopener">220 Ohm Widerstand</a></li>
<li><a href="https://amzn.to/3zhDcke" target="_blank" rel="noopener">Steckbrett</a></li>
</ul>
<h2>Was ist eigentlich ein Timer?</h2>
<p>Ein Timer ist im Grunde nichts anderes als ein bestimmtes Register im Mikrocontroller, das hardwaregesteuert kontinuierlich um 1 erhöht (oder verringert) wird. Anstatt Anweisungen im Programm zu kodieren, die regelmäßig ausgeführt werden und ein Register um 1 erhöhen, macht der Mikrocontroller das ganz von alleine!</p>
<p>Dies wird nützlich, wenn eine Aktion bei bestimmten Zählerwerten ausgeführt wird. Einer dieser &#8218;bestimmten Zählerstände&#8216; ist zum Beispiel der Überlauf. Das Zählregister eines Timers kann nicht beliebig lange inkrementiert werden. Z.B. ist der höchste Zählerstand, den ein 8-Bit-Timer erreichen kann, 2^8 &#8211; 1 = 255. Der nächste Schritt ist nicht 256, sondern es kommt zu einem Überlauf, der den Timer wieder auf 0 setzt. Das ist die ganze Magie! Wir können den Controller so konfigurieren, dass ein Interrupt ausgelöst wird, wenn der Timer überläuft. Anschließend können wir einen Code in das Arduino Programm schreiben, der im Falle eines Interrupts ausgeführt wird. Zum Beispiel können wir eine LED zum Leuchten bringen oder einen bestimmten Sensorwert abfragen.</p>
<h2>Arduino Uno Mikrocontroller ATMEGA328P</h2>
<p><img fetchpriority="high" decoding="async" class="alignright wp-image-784 size-medium zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/ATMEGA328P-300x274.jpg" alt="Microcontroller ATMEGA328P Nerd Corner Arduino Uno Timer Interrupts" width="300" height="274" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/ATMEGA328P-300x274.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/11/ATMEGA328P.jpg 466w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Der ATMEGA328P-Mikrocontroller ist das Herzstück des Arduino Uno-Boards. (ACHTUNG: Der Arduino Mega z.B. hat einen anderen Mikrocontroller!) Der ATMEGA328P Mikrocontroller hat 3 Timer (<a href="https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf">Datenblatt</a>), die teilweise in Arduino-Funktionen und/oder teilweise in Bibliotheken verwendet werden. Das Überschreiben der Timer-Register kann daher zu Komplikationen mit bestehenden Timer-Funktionen wie millis(), micros() oder delay() führen und sollte mit Vorsicht verwendet werden. Die 3 Timer sind Timer0 (8Bit), Timer1 (16Bit) und Timer2 (8Bit).</p>
<ul>
<li>8 Bit-Timer0: wird genutzt für die Funktionen millis(), micros(), delay() und für PWM an Pin D5 und D6</li>
<li>16 Bit-Timer1: wird z. B. für die Bibliothek Servo, VirtualWire, TimerOne und für PWM an Pin D9 und D10 genutzt</li>
<li>8 Bit Timer2: wird genutzt für Funktion tone() und für PWM an Pin D3 und D11</li>
</ul>
<h2>Wie variiert man die Taktgeschwindigkeit?</h2>
<p>Der Systemtakt des Arduino Uno beträgt 16 MHz (CPU-Frequenz). Das bedeutet, dass Timer0, Timer1 und Timer2 16 Millionen Mal pro Sekunde hochlaufen. Die 8-Bit-Timer zählen z. B. jeweils von 0 bis 255. Bei 256 tritt ein Überlauf auf und die Timer beginnen wieder bei 0. Das bedeutet 16000000/256 = 62500 Überläufe pro Sekunde (62,5kHz Taktrate). Das ist für die meisten Timer-Anwendungen wahrscheinlich zu schnell!</p>
<p>Deshalb gibt es einen Trick, um die Taktraten zu verlangsamen. Man verwendet einen sogenannten Vorteiler (Prescaler). Ein Vorteiler kann auf die Werte 1, 8, 64, 256 oder 1024 eingestellt werden. Er ermöglicht es, den Systemtakt (16MHz) durch den gewählten Faktor zu teilen und eine niedrigere Taktrate für die Timer einzustellen. Ein Vorteiler von 1024 würde z. B. die Timer-Register nur beim 1024sten Systemtakt um 1 erhöhen. Das wären 16000000/1024=15625 Inkremente pro Sekunde und damit bei einem 8-Bit-Timer 15625/256= 61,035 Überläufe pro Sekunde (~61 Hz Taktrate des Timers).</p>
<h2>Anwendungsbeispiel: LED soll mit 50 Hz blinken</h2>
<p>Im Folgenden wird die Ansteuerung von Arduino Timer Interrupts mit dem 16-Bit Timer1 gezeigt. Damit soll eine LED im 50 Hz-Takt aufleuchten. Schaltplan, Arduino-Code und Bilder sind ebenfalls enthalten. (Die Vorgehensweise für den 8-Bit-Timer0 und Timer2 ist analog.) Für den zeitgesteuerten Impuls benötigen Sie den sogenannten &#8222;CTC-Modus&#8220;.</p>
<p>Im CTC-Modus (&#8222;Clear Timer on Compare Mode&#8220;) wird der Zähler gelöscht, wenn der Wert des Zählers (TNCT1) entweder mit dem Wert des OCR1A-Registers oder dem Wert des ICR1-Registers (in unserem Fall OCR1A) übereinstimmt. Das OCR1A-Register bestimmt also den Maximalwert des Zählers und damit seine Auflösung.</p>
<h3>Der 16 Bit Timer1 braucht die folgenden Register:</h3>
<ul>
<li>Timer Counter Register 1: TCNT1</li>
<li>Output Compare Register A: OCR1A</li>
<li>Timer Counter Control Register A: TCCR1A</li>
<li>Timer Counter Control Register B: TCCR1B</li>
<li>Timer/Counter Interrupt Mask Register: TIMSK1</li>
<li>(Für Timer0 und Timer2 würden die entsprechenden Register TCNT0 bzw. TCNT2 heißen)</li>
</ul>
<h3>Berechnung des OCR1A Registers für Arduino Timer Interrupts</h3>
<p>Der Wert des Registers OCR1A ist abhängig von der gewünschten Interruptfrequenz und dem gewählten Vorteiler. Es gilt die folgende Formel:</p>
<p><img decoding="async" class="aligncenter wp-image-783 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/InterruptFrequency.jpg" alt="Formula for Arduino Timer Interrupt Frequency calculation OCR1A register" width="691" height="156" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/InterruptFrequency.jpg 692w, https://nerd-corner.com/wp-content/uploads/2020/11/InterruptFrequency-300x68.jpg 300w" sizes="(max-width: 691px) 100vw, 691px" /></p>
<p>Wir setzen unsere Spezifikationen in die Formel ein:</p>
<ul>
<li>CPU-Frequenz Arduino Uno: 16.000.000 Hz</li>
<li>Gewünschte Interruptfrequenz: 50 Hz (= 20 ms Periodendauer)</li>
<li>Möglicher Vorteiler: 1, 8, 64, 256 oder 1024</li>
</ul>
<p><strong>Berechnungsbeispiel mit Vorteiler 1024:</strong><br />
OCR1A= (16.000.000 / (1024 * 50)) &#8211; 1 = 311,5</p>
<p><strong>Berechnungsbeispiel mit Vorteiler 8:</strong><br />
OCR1A= (16,000,000 / (8 * 50)) &#8211; 1 = 39,999</p>
<p><strong>ACHTUNG:</strong> Der OCR1A-Wert muss kleiner als 65,536 (2^16 ) sein!</p>
<p><strong>Daher kann ein Vorteiler 8 NICHT die 10 Hz Interruptfrequenz erreichen:</strong><br />
OCR1A= (16.000.000 / (8 * 10)) &#8211; 1 = 199.999</p>
<p>Der Wert 199,999 ist größer als das Register mit 65,536, daher muss ein anderer Vorteiler verwendet werden, um 10 Hz zu erreichen</p>
<p><strong>Stattdessen ein Vorteiler 64 für 10 Hz Interruptfrequenz:</strong><br />
OCR1A= (16.000.000 / (64 * 10)) &#8211; 1 = 24.999</p>
<p><em>Wird nun ein Timer1-Interrupt ausgelöst, springt der Programmablauf in eine zu erstellende Interrupt-Service-Routine &#8222;ISR(TIMER1_COMPA_vect)&#8220;. (Siehe Arduino Code)</em></p>
<h3>Bit Kombination für die gewünschten Vorteiler</h3>
<p><img decoding="async" class="aligncenter wp-image-785 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts.jpg" alt="Arduino Uno timer interrupts Prescaler " width="1121" height="413" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts.jpg 1122w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts-300x110.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts-1024x377.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts-768x283.jpg 768w" sizes="(max-width: 1121px) 100vw, 1121px" /></p>
<h3>Arduino Timer Interrupts Code für die 50 Hz Frequenz</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="c">void setup() {

  pinMode(11,OUTPUT);  //LED pin (to blink in 50Hz frequency)
  
//START TIMER SETUP
//TIMER SETUP for highly preceise timed measurements 

  cli();//stop all interrupts

  // turn on CTC mode
  TCCR1A = 0;// set entire TCCR1A register to 0
  TCCR1B = 0;// same for TCCR1B
  TCCR1B |= (1 &lt;&lt; WGM12);

  // Set CS11 bit for prescaler 8
  TCCR1B |= (1 &lt;&lt; CS11); 
  
  //initialize counter value to 0;
  TCNT1  = 0;
  
  // set timer count for 50Hz increments
  OCR1A = 39999;// = (16*10^6) / (50*8) - 1  
  
  // enable timer compare interrupt
  TIMSK1 |= (1 &lt;&lt; OCIE1A);
  
  sei();//allow interrupts
  //END TIMER SETUP
}



ISR(TIMER1_COMPA_vect) {//Interrupt at frequency of 50 Hz
 //write your timer code here

 digitalWrite(11,HIGH);
 delay(15);
 digitalWrite(11,LOW);
}




void loop() {

//when the timer is over, your program will stop in the loop function and jump to the timer code. 
//After the timer code it will jump back to the point where it left the loop function
}</pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-786 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED.jpg" alt="Arduino Timer Interrupt LED sketch" width="1649" height="839" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED.jpg 1650w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-300x153.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-1024x521.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-768x391.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-1536x782.jpg 1536w" sizes="auto, (max-width: 1649px) 100vw, 1649px" /></p>
<p>The post <a href="https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/">Arduino Timer Interrupts – Arduino Register programmieren</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/feed/</wfw:commentRss>
			<slash:comments>3</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=1756256395" 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>
