- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: C++: Synchronisation µC<->PC über FT245 USB-Modul

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2006
    Beiträge
    11

    C++: Synchronisation µC<->PC über FT245 USB-Modul

    Anzeige

    Praxistest und DIY Projekte
    hallo
    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 möchte folgende synchronisation mit dem µController, der auf dem USB-Modul hängt, vornehmen:
    µC -> PC "Request"..... PC->µC "Reply" (Request und Reply sind natürlich vordefinierte fixe werte)
    wenn der µC 5mal eine Antwort vom PC bekommt sendet er einmalig noch eine Bestätigung.

    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?
    mit der folgendne funktion, hätte ich mir die synchronisation überlegt, allerdings ist es dann an obiger frage gescheitert:

    meine funktion zu ReadFTDI() ist void:
    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<=256; iIndex++)
     {
      RxBuffer[iIndex]=0;
     }
    
     FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
     //FT_SetTimeouts(ftHandle,5000,0);
     if(RxBytes > 0)
     {
      ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived);
      if(ftStatus == FT_OK)
      {
       if(BytesReceived == RxBytes)
        {
         for(iX = 0 ; iX < int(BytesReceived) ; iX++)
          {
           Memo->Lines->Add("RxBuffer[iX] = RxBuffer[" + IntToStr(iX) + "]:");
           Memo->Lines->Add(RxBuffer[iX]);
          }
        }
        else
        {
         //no value was written on the bus
        }
      }
      else
      {
       //can not read FTDI chip
      }
     }

    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();   // <--- ***** FEHLERMELDUNG ********
    
     while (iReceive == 5)
     {
      if (iReceive == 245)
       {
        iSuccess++;
        Memo->Lines->Add("uC Request: " + IntToStr(iSuccess) + "x mal erhalten");
        WriteFTDI(246);  // Reply
        Memo->Lines->Add("Reply an uC gesendet");
       }
       else
       {
        Memo->Lines->Add("uC Request nicht erhalten");
       }
     }
    
     return bSync; // Rückgabe des Status ob Sync erfolgreich oder nicht
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TFormMain::ButtonSyncStartClick(TObject *Sender) //Button zur synchronisation
    {
     MemoDebug->Lines->Add("--- SyncUSB gestartet ---");
     if(SyncUSB() == 1)     Memo->Lines->Add("Sync OK !!!");
      else                          Memo->Lines->Add("Sync fehlgeschlagen!");
    }
    //---------------------------------------------------------------------------
    hoffe das hier ist halbwegs übesichtlich. wenn möglich bitte die änderung und vorschläge am source code anwenden!
    danke
    uj

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2006
    Beiträge
    11
    das obere hat sich geklärt.
    nun folgendes:
    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).

    wie löst man dieses problem am besten, mit schleifen und arrays (buffer)?
    danke

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress