Hallo, ich habe ein seltsames Problem.
Also ich habe hier einen FT232R, der bekommt vom PC Daten und gibt die
über den UART aus. Ein FPGA empfängt die dann und gibt die unter anderem
auf LEDs aus, also das empfangene Byte.
Jetzt übergebe ich dem FT232R vom PC einmal das Byte mit einem
Terminalprogramm (Realterm) und einmal mit einem selbst in C
geschriebenen Programm. Dort verwende ich das D2XX von FTDI.
Es ist nun so, schalte ich das Board ein so leuchtet keine LED, das soll
ja auch so sein.
Jetzt schicke ich vom PC aus mit meinem C programm ein beliebiges Byte.
Und dann ist das höchstwertige Bit gesetzt und bleibt auch gesetzt egal
welche weiteren Bytes ich schicke.
Wenn ich aber mit dem Terminalprogramm ein Byte übertrage wird es
korrekt auf den LEDs angezeigt.
Aber:
Wenn ich zuerst mit dem C Programm ein Byte geschickt habe und dann das
höchstwertige Bit gesetzt ist und ich dann mit dem Terminalprogramm ein
Byte < 128 schicke, ist das höchstwertige Bit korrekterweise nichtmehr
gesetzt. Übertrage ich danach wieder beliebige Bytes mit meinem C
Programm werden diese immer korrekt angezeigt.
Mir sieht das wie irgendeine seltsame Startbedingung aus die sich aber
auflöst sobald ich mit dem Terminalprogramm ein Byte (ein beliebiges)
sende. Wenn ich gleich nach dem Einschalten ein Byte mit dem
Terminalprogramm sende tritt das Problem erst gar nicht auf.
Unterschiedliche Baudraten habe ich schon getestet ...
Code vom C Programm:
1 | unsigned char TX[1]={0x00};
|
2 | .
|
3 | .
|
4 | .
|
5 | TX[0]=(char)bytewert;
|
6 | ftStatus = FT_Open(DevNumber, &FT232R_ftHandle);
|
7 | ftStatus = FT_SetBaudRate(FT232R_ftHandle, 9600);
|
8 | ftStatus = FT_Write(FT232R_ftHandle, TX, 1, &BytesWritten);
|
Edit:
Verdammt, wie es aussieht hab ich es gefunden:
1 | ftStatus = FT_SetDataCharacteristics(FT232R_ftHandle, FT_BITS_8, FT_STOP_BITS_1, FT_PARITY_NONE);
|
hab ich eingefügt und jetzt geht es. Dachte das wäre der Default ...
hoffentlich war das wirklich die Lösung.