<?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[Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul]]></title><description><![CDATA[<p>hallo<br />
ich benutze einen atmel µC (atmel) der über ein USB-Modul (DLP-USB245 mit FTDI FT245 chip) mit dem PC verbunden ist. das senden und empfangen von daten (zahlen) funzt in beiden richtungen. (ich verwende c++ builder)</p>
<p>ich möchte folgende synchronisation mit dem µController, der auf dem USB-Modul hängt, vornehmen:<br />
µC -&gt; PC &quot;Request&quot;..... PC-&gt;µC &quot;Reply&quot; (Request und Reply sind natürlich vordefinierte fixe werte)<br />
wenn der µC 5mal eine Antwort vom PC bekommt sendet er einmalig noch eine Bestätigung.</p>
<p>Das Problem: die Fuktion ReadFTDI() liefert mir nichts zurück. wie kann ich aber meine Synchronisation machen. muss ich einen rückgabetyp wählen, wenn ja, welcher?<br />
mit der folgendne funktion, hätte ich mir die synchronisation überlegt, allerdings ist es dann an obiger frage gescheitert:</p>
<p>meine funktion zu ReadFTDI() ist void:</p>
<pre><code>void TFormMain::ReadFTDI (void)
{
 FT_STATUS ftStatus;
 DWORD EventDWord;
 DWORD RxBytes;
 DWORD TxBytes;
 DWORD BytesReceived;

 unsigned char RxBuffer[256];
 int iIndex;
 int iX;

 RxBytes=0;
 TxBytes=0;
 BytesReceived=0;
 EventDWord=0;

 for(iIndex=0; iIndex&lt;=256; iIndex++)
 {
  RxBuffer[iIndex]=0;
 }

 FT_GetStatus(ftHandle,&amp;RxBytes,&amp;TxBytes,&amp;EventDWord);
 //FT_SetTimeouts(ftHandle,5000,0);
 if(RxBytes &gt; 0)
 {
  ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&amp;BytesReceived);
  if(ftStatus == FT_OK)
  {
   if(BytesReceived == RxBytes)
    {
     for(iX = 0 ; iX &lt; int(BytesReceived) ; iX++)
      {
       Memo-&gt;Lines-&gt;Add(&quot;RxBuffer[iX] = RxBuffer[&quot; + IntToStr(iX) + &quot;]:&quot;);
       Memo-&gt;Lines-&gt;Add(RxBuffer[iX]);
      }
    }
    else
    {
     //no value was written on the bus
    }
  }
  else
  {
   //can not read FTDI chip
  }
 }
</code></pre>
<pre><code>bool TFormMain::SyncUSB (void)
{
 int iReceive;          // erhaltene Zahl von uC
 int iSuccess=0;        // wie oft wurde REQUEST empfangen
 bool bSync;            // ganze Sync OK (wenn iSuccess=5);

 iReceive = ReadFTDI();   // &lt;--- ***** FEHLERMELDUNG ********

 while (iReceive == 5)
 {
  if (iReceive == 245)
   {
    iSuccess++;
    Memo-&gt;Lines-&gt;Add(&quot;uC Request: &quot; + IntToStr(iSuccess) + &quot;x mal erhalten&quot;);
    WriteFTDI(246);  // Reply
    Memo-&gt;Lines-&gt;Add(&quot;Reply an uC gesendet&quot;);
   }
   else
   {
    Memo-&gt;Lines-&gt;Add(&quot;uC Request nicht erhalten&quot;);
   }
 }

 return bSync; // Rückgabe des Status ob Sync erfolgreich oder nicht

}
//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonSyncStartClick(TObject *Sender) //Button zur synchronisation
{
 MemoDebug-&gt;Lines-&gt;Add(&quot;--- SyncUSB gestartet ---&quot;);
 if(SyncUSB() == 1)     Memo-&gt;Lines-&gt;Add(&quot;Sync OK !!!&quot;);
  else                          Memo-&gt;Lines-&gt;Add(&quot;Sync fehlgeschlagen!&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
<p>hoffe das hier ist halbwegs übesichtlich. wenn möglich bitte die änderung und vorschläge am source code anwenden!<br />
danke<br />
uj</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143631/probleme-mit-synchronisation-µc-lt-gt-pc-über-usb-modul</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 23:44:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143631.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Apr 2006 12:52:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Mon, 10 Apr 2006 12:52:59 GMT]]></title><description><![CDATA[<p>hallo<br />
ich benutze einen atmel µC (atmel) der über ein USB-Modul (DLP-USB245 mit FTDI FT245 chip) mit dem PC verbunden ist. das senden und empfangen von daten (zahlen) funzt in beiden richtungen. (ich verwende c++ builder)</p>
<p>ich möchte folgende synchronisation mit dem µController, der auf dem USB-Modul hängt, vornehmen:<br />
µC -&gt; PC &quot;Request&quot;..... PC-&gt;µC &quot;Reply&quot; (Request und Reply sind natürlich vordefinierte fixe werte)<br />
wenn der µC 5mal eine Antwort vom PC bekommt sendet er einmalig noch eine Bestätigung.</p>
<p>Das Problem: die Fuktion ReadFTDI() liefert mir nichts zurück. wie kann ich aber meine Synchronisation machen. muss ich einen rückgabetyp wählen, wenn ja, welcher?<br />
mit der folgendne funktion, hätte ich mir die synchronisation überlegt, allerdings ist es dann an obiger frage gescheitert:</p>
<p>meine funktion zu ReadFTDI() ist void:</p>
<pre><code>void TFormMain::ReadFTDI (void)
{
 FT_STATUS ftStatus;
 DWORD EventDWord;
 DWORD RxBytes;
 DWORD TxBytes;
 DWORD BytesReceived;

 unsigned char RxBuffer[256];
 int iIndex;
 int iX;

 RxBytes=0;
 TxBytes=0;
 BytesReceived=0;
 EventDWord=0;

 for(iIndex=0; iIndex&lt;=256; iIndex++)
 {
  RxBuffer[iIndex]=0;
 }

 FT_GetStatus(ftHandle,&amp;RxBytes,&amp;TxBytes,&amp;EventDWord);
 //FT_SetTimeouts(ftHandle,5000,0);
 if(RxBytes &gt; 0)
 {
  ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&amp;BytesReceived);
  if(ftStatus == FT_OK)
  {
   if(BytesReceived == RxBytes)
    {
     for(iX = 0 ; iX &lt; int(BytesReceived) ; iX++)
      {
       Memo-&gt;Lines-&gt;Add(&quot;RxBuffer[iX] = RxBuffer[&quot; + IntToStr(iX) + &quot;]:&quot;);
       Memo-&gt;Lines-&gt;Add(RxBuffer[iX]);
      }
    }
    else
    {
     //no value was written on the bus
    }
  }
  else
  {
   //can not read FTDI chip
  }
 }
</code></pre>
<pre><code>bool TFormMain::SyncUSB (void)
{
 int iReceive;          // erhaltene Zahl von uC
 int iSuccess=0;        // wie oft wurde REQUEST empfangen
 bool bSync;            // ganze Sync OK (wenn iSuccess=5);

 iReceive = ReadFTDI();   // &lt;--- ***** FEHLERMELDUNG ********

 while (iReceive == 5)
 {
  if (iReceive == 245)
   {
    iSuccess++;
    Memo-&gt;Lines-&gt;Add(&quot;uC Request: &quot; + IntToStr(iSuccess) + &quot;x mal erhalten&quot;);
    WriteFTDI(246);  // Reply
    Memo-&gt;Lines-&gt;Add(&quot;Reply an uC gesendet&quot;);
   }
   else
   {
    Memo-&gt;Lines-&gt;Add(&quot;uC Request nicht erhalten&quot;);
   }
 }

 return bSync; // Rückgabe des Status ob Sync erfolgreich oder nicht

}
//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonSyncStartClick(TObject *Sender) //Button zur synchronisation
{
 MemoDebug-&gt;Lines-&gt;Add(&quot;--- SyncUSB gestartet ---&quot;);
 if(SyncUSB() == 1)     Memo-&gt;Lines-&gt;Add(&quot;Sync OK !!!&quot;);
  else                          Memo-&gt;Lines-&gt;Add(&quot;Sync fehlgeschlagen!&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
<p>hoffe das hier ist halbwegs übesichtlich. wenn möglich bitte die änderung und vorschläge am source code anwenden!<br />
danke<br />
uj</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034484</guid><dc:creator><![CDATA[usb-freak]]></dc:creator><pubDate>Mon, 10 Apr 2006 12:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Mon, 10 Apr 2006 13:47:56 GMT]]></title><description><![CDATA[<p>usb-freak schrieb:</p>
<blockquote>
<p>Das Problem: die Fuktion ReadFTDI() liefert mir nichts zurück. wie kann ich aber meine Synchronisation machen. muss ich einen rückgabetyp wählen, wenn ja, welcher?</p>
</blockquote>
<p>nimm einfach 'int' als rückgabewert. ist er positiv dann ist es die anzahl empfangener bytes. 0 heisst nix empfangen und für negative werte definierst du ein paar statusmeldungen und/oder fehlercodes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034539</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Mon, 10 Apr 2006 13:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Tue, 11 Apr 2006 18:52:36 GMT]]></title><description><![CDATA[<p>ich könnte aber auch die funktion void machen (also nichts zurückgeben), und die daten über eine globale variable (oder sogar array) zuweisen, die ich in der funktion erhalte?</p>
<p>thx<br />
usb-freak</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1035475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1035475</guid><dc:creator><![CDATA[usb-freak]]></dc:creator><pubDate>Tue, 11 Apr 2006 18:52:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Wed, 12 Apr 2006 08:05:57 GMT]]></title><description><![CDATA[<p>usb-freak schrieb:</p>
<blockquote>
<p>ich könnte aber auch die funktion void machen (also nichts zurückgeben), und die daten über eine globale variable (oder sogar array) zuweisen, die ich in der funktion erhalte?</p>
</blockquote>
<p>klar, es gibt immer mehrere möglichkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1035689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1035689</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 12 Apr 2006 08:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Wed, 12 Apr 2006 09:30:01 GMT]]></title><description><![CDATA[<p>usb-freak schrieb:</p>
<blockquote>
<p>ich könnte aber auch die funktion void machen (also nichts zurückgeben), und die daten über eine globale variable (oder sogar array) zuweisen, die ich in der funktion erhalte?</p>
</blockquote>
<p>vorallem wenn ich mehrere rückgabewerte habe, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1035759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1035759</guid><dc:creator><![CDATA[usb-freak]]></dc:creator><pubDate>Wed, 12 Apr 2006 09:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Wed, 12 Apr 2006 09:48:10 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=10455" rel="nofollow">evilissimo</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=2" rel="nofollow">VCL/CLX (Borland C++ Builder)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1035772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1035772</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 12 Apr 2006 09:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Wed, 12 Apr 2006 10:59:11 GMT]]></title><description><![CDATA[<p>usb-freak schrieb:</p>
<blockquote>
<p>vorallem wenn ich mehrere rückgabewerte habe, oder?</p>
</blockquote>
<p>bei mehreren rückgabewerten könnteste z.b. eine struct von der funktion füllen lassen, so etwa:</p>
<pre><code>struct __result
{
   int r1;
   long r2;
   ....
};

// deine funktion
void f (struct result *r)
{
   ...
   r-&gt;r1 = ...
   r-&gt;r2 = ...
   r-&gt;... = ...
}

// aufrufer
...
struct result r;
f(&amp;r);
...
</code></pre>
<p>aber es gibt natürlich noch andere möglichkeiten.<br />
btw: globale variablen würde ich nicht nehmen, nur wenn's gar nicht anders geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1035819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1035819</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 12 Apr 2006 10:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Mon, 17 Apr 2006 10:00:10 GMT]]></title><description><![CDATA[<p>wenn ich zum beispiel eine abfrage der synchronisation habe, dann mach ich das mit einer funktion die mir 1 werte vom usb-teil holt.... was aber wenn genau dieser eine wert nicht zur synchronisation passt? - dann gibts keine synchroniasation. (der wert der zur synchronisation passt wäre zum beispiel genau der nächste gewesen der vom usb-teil stammt).</p>
<p>wie löst man dieses problem am besten, mit schleifen und arrays (buffer)?<br />
danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1038913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038913</guid><dc:creator><![CDATA[usb-freak]]></dc:creator><pubDate>Mon, 17 Apr 2006 10:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Mon, 17 Apr 2006 19:36:50 GMT]]></title><description><![CDATA[<p>usb-freak schrieb:</p>
<blockquote>
<p>wie löst man dieses problem am besten, mit schleifen und arrays (buffer)</p>
</blockquote>
<p>kommt drauf an. wenn das teil viele daten erzeugt aber regelmässig pausen macht, dann wäre ein (fifo)buffer nicht schlecht. wenn du den gross genug dimensionierst und regelmässig ausliest sollte das gehen. ohne buffer musst du wohl, wenn die synchronisation ausser tritt kommt, alles wegschmeissen bis du wieder 'in sync' bist. aber da sind nur vermutungen denn ich kenne ja deine umgebungsbedingungen nicht. möglicherweise buffert schon das betriebssystem o.ä....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039282</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Mon, 17 Apr 2006 19:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Synchronisation µC&amp;lt;-&amp;gt;PC über USB-Modul on Tue, 18 Apr 2006 13:29:26 GMT]]></title><description><![CDATA[<p>derzeit gibts nur eine sync wenn die programme auf µC und pc &quot;zufällig&quot; gleichzeitig starten, und die sync-routinen zur gleichen zeit ablaufen.</p>
<p>beim programm start des µc geht dieser sofort in das sync-unterprogramm, d.h. diser schickt immer die anfrage für die sync an den pc.<br />
der pc liest das fifo teil nach der funktion sync() wie im ersten post.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039835</guid><dc:creator><![CDATA[usb-freak]]></dc:creator><pubDate>Tue, 18 Apr 2006 13:29:26 GMT</pubDate></item></channel></rss>