<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Timerproblem]]></title><description><![CDATA[<p>Ich habe folgendes Problem:</p>
<p>Ich steuere über den USB einen Schrittmotor an und verwende dazu einen Timer mit 10ms schritten. Klappt auch im prinzip wunderbar, aber der Motor verschluckt sich oft (schrittfehler). Erst wenn ich den Timer mit ca. 75-100ms laufen lasse funktioniert der Motor ohne Fehler (ist aber zu langsam). Wenn ich das ganze per Tastendruck (PreTranslateMsg) laufenlasse ist es das gleiche in grün. Wenn ich das aber über eine For-Schleife bediene, dann geht es FAST ohne fehler (unpraktikabel, da ich NIE weiß wie lange und wie oft ich was mache).</p>
<p>Meine Frage(n):</p>
<p>1. Woran könnte das liegen, dass der Timer / der Tastendruck nicht 100% funktionieren? (verdacht-&gt; Windows-Msg zu langsam oder ähnliches?)<br />
2. Gibt es eine andere Möglichkeit oder einen anderen Timer, den ich verwenden könnte (Bsp. oder Hilfen wären nett).</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175097/timerproblem</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 23:42:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175097.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Mar 2007 09:08:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 09:08:44 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Problem:</p>
<p>Ich steuere über den USB einen Schrittmotor an und verwende dazu einen Timer mit 10ms schritten. Klappt auch im prinzip wunderbar, aber der Motor verschluckt sich oft (schrittfehler). Erst wenn ich den Timer mit ca. 75-100ms laufen lasse funktioniert der Motor ohne Fehler (ist aber zu langsam). Wenn ich das ganze per Tastendruck (PreTranslateMsg) laufenlasse ist es das gleiche in grün. Wenn ich das aber über eine For-Schleife bediene, dann geht es FAST ohne fehler (unpraktikabel, da ich NIE weiß wie lange und wie oft ich was mache).</p>
<p>Meine Frage(n):</p>
<p>1. Woran könnte das liegen, dass der Timer / der Tastendruck nicht 100% funktionieren? (verdacht-&gt; Windows-Msg zu langsam oder ähnliches?)<br />
2. Gibt es eine andere Möglichkeit oder einen anderen Timer, den ich verwenden könnte (Bsp. oder Hilfen wären nett).</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240763</guid><dc:creator><![CDATA[Uruk-h4j]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 09:13:35 GMT]]></title><description><![CDATA[<p>Ja, der Windows-Timer ist sehr ungenau.<br />
Stichwort sind hier Multimediatimer.<br />
Such mal nach QueryPerformanceCounter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240767</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 09:17:53 GMT]]></title><description><![CDATA[<p>Was übergibts du denn der Schnittstelle? Ich habe bisher Schrittmotoren nur über externe Karten angesteuert und mit einer digitalen I/O-Karte den Takt generiert. Je nach dem wie die angeschlossene Treiberstufe die Taktwerte verarbeiten kann können auch Schrittfehler auftreten. Das passiert meist wenn die Triggerimpulse zu schmal sind (also die Schaltzeit zu kurz). Bei mir ging das allerdings bis ca. 5 ms problemlos. Dies erklärt aber noch nicht, warum es in der Schleife geht und mit dem Timer nicht. Ich kenn mich mit Timern nicht so gut aus aber ich könnte mir vorstellen das der Scheduler je nach Systemauslastung reinfunkt und der Timer mit einem gewissen Delay die WM_TIMER abgibt, wenn das System stärker belastet ist. Bei meinen Versuchen reichte es schon die Maus zu bewegen. Dann lief der Motor langsamer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240774</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 09:18:00 GMT]]></title><description><![CDATA[<p>evtl. ne unendliche for/ while schleife, mit Abbruchbedingung bei tastendruck.</p>
<p>Druch Aurruf des folgenden Codes, wird so die Messageloop bei jeder Schleifeninereation aufgerufen, und das system ist somit NIHCt gefroren.</p>
<pre><code class="language-cpp">MSG msg;
    while (::PeekMessage(&amp;msg, NULL, 
        NULL, NULL, PM_NOREMOVE)) {
        AfxGetThread()-&gt;PumpMessage();
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1240775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240775</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 09:26:05 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>evtl. ne unendliche for/ while schleife, mit Abbruchbedingung bei tastendruck.</p>
<p>Druch Aurruf des folgenden Codes, wird so die Messageloop bei jeder Schleifeninereation aufgerufen, und das system ist somit NIHCt gefroren.</p>
<pre><code class="language-cpp">MSG msg;
    while (::PeekMessage(&amp;msg, NULL, 
        NULL, NULL, PM_NOREMOVE)) {
        AfxGetThread()-&gt;PumpMessage();
    }
</code></pre>
</blockquote>
<p>Bei Schrittmotorensteuerungen braucht man schon ziemlich genaue Zeitabläufe. Dein Vorschlag wird das Problem nicht lösen bzw. noch vergrößern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240784</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 09:33:27 GMT]]></title><description><![CDATA[<p>dann werden wohl Thread nötig sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240786</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 07 Mar 2007 09:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 10:26:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Was übergibts du denn der Schnittstelle?</p>
</blockquote>
<p>Ich übergebe der schnittstelle 2 einfach Bytes, die ich in 2 Stufen sende.<br />
1. motor anwählen, hab 2 davon (0xFE z.B.)<br />
1.1 schreiben (Senden an USB)<br />
2. Richtung der Drehung (0xF7 z.B.)<br />
2.1 schreiben (s.o.)</p>
<p>Ich hab auch erst gedacht, dass ich vielleicht die Daten zu schnell schicke und habe ein Sleep() eingebaut, aber das hat nichts gebracht. Wie gesagt es tritt erst ab einem Timer mit 75-100ms auf. Davor klappts wunderbar.<br />
Das das System bei Timer zwischenfunkt ab ich mir auch schon gedacht. Hab auch indiret eine bestätigung gerade bekommen, als ichs nochmal getestet habe und mein AntiVir meinte mal einen scan zu wagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Das mit den Multimedia-Timer scheint mir interessant zu sein. Werd mir das mal anschauen und ausprobieren. Ein Freund von mir meinte ich soll mal einen Quicktime-Treiber und -Timer verwenden. Ich hab damit auber nichts anangen können ?!?</p>
<p>Die Sache mit den Threads lass ich erstmal außen vor, da ich da noch nicht mit gearbeitet hab und das mein Problem auch nur umgeht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240814</guid><dc:creator><![CDATA[Uruk-h4j]]></dc:creator><pubDate>Wed, 07 Mar 2007 10:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Timerproblem on Wed, 07 Mar 2007 11:23:42 GMT]]></title><description><![CDATA[<p>ich ha mir jetzt mal QueryPerformanceCounter() angesehen und komm damit nicht so ganz weiter. Mein Problem ist nur, dass ich nicht genau weiß wo und wie ich den anspreche. die windiws.h hab ich eingebunden und diesen ode aus einem Thread hier:</p>
<pre><code class="language-cpp">//MSG mssg;                // message from queue
//LONGLONG cur_time;       // current time
DWORD  time_count=5;    // ms per frame, default if no performance counter
LONGLONG perf_cnt;       // performance timer frequency
BOOL perf_flag=FALSE;    // flag determining which timer to use
LONGLONG next_time=0;    // time to render next frame
BOOL move_flag=TRUE;     // flag noting if we have moved yet

// is there a performance counter available?

	if (QueryPerformanceFrequency((LARGE_INTEGER *) &amp;perf_cnt)) {

	// yes, set time_count and timer choice flag

		perf_flag = TRUE;
		time_count = (DWORD) perf_cnt/25;        // calculate time per frame based on frequency
		QueryPerformanceCounter((LARGE_INTEGER *) &amp;next_time);
	}
</code></pre>
<p>Wohin damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240849</guid><dc:creator><![CDATA[Uruk-h4j]]></dc:creator><pubDate>Wed, 07 Mar 2007 11:23:42 GMT</pubDate></item></channel></rss>