-
ja danke
hatte es dann eh selber rausgefunden.
was vielleicht noch zu bemerken ist, für andere user, dass die FTD2XX.DLL auch noch einbinden muss.
wenn es jemand benötigt, dann kann ich den source code für den c++ builder posten. (jedoch wurde das usb modul noch nicht getestet, da es bei mir noch nicht geliefert wurde, aber das programm läuft).
jedenfalls danke an alle!
-
Hallo!
Ich "schlage" mich auch grad mit der FTD2XX-Treiber-Programmierung unter Visual C++ rum.
Ich habe es allerdings vorerst mit der Implementierung der LIB in den Linker-Optionen geschafft, daher würde mich die Lösung mit der DLL sehr freuen.
Die Kommunikation selbst klappt soweit, ein paar (Begriffs)Schwierigkeiten bereitet mir jedoch der Bit-Bang-Modus...irgendwie klappt das mit dem Zuweisen der Outputwerte nicht so richtig. Hat da irgendwer Erfahrungen drin?
-
...hab jetzt bisschchen programmiert, und hab da beim Schreiben zum usb, probleme. hab da irgendwo mal gehört, dass die ersten paar bytes im speicher des ft245 fix reserviert sind, und ich beim schreiben, erst nach diesen bytes meine daten ablegen kann (das heißt ich müsste zuerst irgendwelche "sinnlosen" bytes zum usb-teil schicken, bevor ich meine nutz-daten senden kann, oder?).
vielleicht kann ja jemand den code zum Schreiben (FT_Write) posten. danke.
ps @sTEk: kannst du mir kurz erklären was der bit-bang-modus ist?
-
-
achja, hab jetzt das usb-teil bekommen, das modul lässt sich problemlos öffnen und schließen. mit dem lesen sollts auch funzn...
danke euch!
-
ich probiers nochmal
hab da ne frage:
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,&EventDWor d);
//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]
ich möchte folgende synchronisation mit einem µController, der auf dem USB-Modul hängt, vornehmen:
µC -> PC "Request"..... PC->µC "Reply"
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:
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,
danke
uj