String senden über RS232

TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 753
Registered: 06 / 2013
Subject:

String senden über RS232

 · 
Posted: 16.12.2021 - 17:48  ·  #1
Hallo, wie war das noma ???


Wenn ich einen String an meinen XMega über RS232 senden und
ihn sofort zurück sende dann bekomme ich das erste Zeichen
nicht angezeigt.


Das ist ein Test <<= Senden
as ist ein Test <<= Empfangen


Thorsten hatte mir dabei schon mal geholfen, aber ich finde das nicht mehr.

Gruß Frank
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: String senden über RS232

 · 
Posted: 17.12.2021 - 09:36  ·  #2
Hallo Frank,

kannst uns mal das Define der Schnittstelle zeigen?

Gruss
Harry
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 753
Registered: 06 / 2013
Subject:

Re: String senden über RS232

 · 
Posted: 17.12.2021 - 10:25  ·  #3
Moin Harry, ich sende über CDC, hier meine Define

Code

  USBvid     = $9125;  //
  USBpid     = $001E;
  USBprodRel = 0001;
  USBcurrent = 200;
  USBsernum = 2143;
  //USBvBUS = PortB.4; // port and pin, optional
  SerPortCDC          = TimeOut;
  RxBufferCDC         = 254, iData;
  TxBufferCDC         = 254, iData;


Ich verstehe es auch nicht warum ich so viele Probleme mit der SeriellenCDC habe.
Ich habe ein kleines Tool gebastelt was mir ein String über CDC an meinen (Xmega 50Mhz)
sendet bei 115200Baud. Erst wenn ich eine Antwort vom Xmega bekomme wird der Butten
Senden wieder frei gegeben. Harry ich zeige dir mal mein kleines Test Sending vom XMega

Harry schaue dir mal das Bild an, also ich könnte .....

Gruß Frank


Code

    data:= false;
    repeat
      if SerStatCDC then
        SerInpBlock_TO(USARTCDC, EmpfStr, 5);
        SendStr:= EmpfStr;
        data:= true;
      endif;
      
      if data = true then
//Test 1
         len:= length(SendStr);
         setlength(SendStr,len);
         SerOutBlock_P(UsartCDC, @SendStr, word(len));
//Test 2
//       write(SerOutCDC, SendStr);    //write oder writeln
         data:= false;
      endif;
    until not  CDCportValid;
    CDCclosePort;
You must be logged in or your permissions are to low to see this Attachment(s).
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: String senden über RS232

 · 
Posted: 17.12.2021 - 12:22  ·  #4
Hi Frank,

50MHz? Eher 48MHz? Hast du mal geschaut, wie groß der Fehler bei deiner Taktfrequenz ist, also die Abweichung von den 115200 Baud?

Und müßte die zu sendende Länge nicht +2 .... CR&LF ..... sein?

Gruss
Harry
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 753
Registered: 06 / 2013
Subject:

Re: String senden über RS232

 · 
Posted: 17.12.2021 - 12:30  ·  #5
Hallo Harry, CR&LF sende ich doch schon hin, also kann ich es auch gleich zurück senden.
Ich habe jetzt eine neue Routine für Delphi die haben mein Kumpel und ich mal vor 20
Jahren Programmiert.

Damit schaut es jetzt sehr gut aus, nur das erste Zeichen fehlt.
write(SerOutCDC, SendStr);

Hiermit bekomme ich zwar das erste Zeichen aber dann nach ein paar mal senden sieht es wieder
so aus wie im Bild.
SerOutBlock_P(UsartCDC, @SendStr, word(len));


Gruß Frank
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1370
Registered: 03 / 2005
Subject:

Re: String senden über RS232

 · 
Posted: 17.12.2021 - 12:34  ·  #6
Hi Frank

It looks to me like you might be sending 'normal' strings from your Delphi program. By default Delphi characters are 2 bytes long each unless they are defined as fixed length ( eg x : string[255];) when they are 1 byte long. AVRCo characters are always one byte long.

Also assuming that if you get 1 character you will get the entire string seems highly suspect to me. For shorts string it may work. But the longer the string is the less likely it is to work, and once it gets out of step you are in real trouble.

Regards

Merlin
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   108   122 · Page-Gen-Time: 0.02329s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI