Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi UART über Comport/Zahlen übertragen (https://www.delphipraxis.net/88583-uart-ueber-comport-zahlen-uebertragen.html)

deteschniger 17. Mär 2007 14:16


UART über Comport/Zahlen übertragen
 
Hi,

ich habe folgendes Problem:
Ich habe in meinen Borland Delphi2005 Entwicklungsumgebung eine Cport Library importiert, um mit einem Delphiprogramm über UART etwas an einen ATmega8 zu senden. Das funktioniet auch wunderbar. mit dem Befehl: Comport1.writestr(variable) kann ich zeichen senden. :o In meinem ATmega8 Programm steht, dass dieser auf die zahl z.B. 97 reagieren soll. Im Delphiporgramm kann ich aber jetzt nicht eine 97 senden, sondern muss in einer Ascii Tabelle nachsehen und für 97 ein "a" senden. :wall:

Ich habe in der Cport library noch nicht den Punkt gefunden, wo die gesendeten Zeichen in Ascii umgewandelt werden.
Mein ziel ist es, wenn ich eine z.B. eine 97 absende, dass auch eine 97 am ATmega8 ankommt. Gibt es einen Befehl aus der Cport library, der schon dafür vorgesehen ist? Oder gibt es noch eine andere möglichkeit das Problem der Ascii tabelle zu lösen?

Vielen Dank im Voraus für tips egal welcher art :lol: !




Cport quelle: http://sourceforge.net/projects/comport/

marabu 17. Mär 2007 14:19

Re: UART über Comport/Zahlen übertragen
 
Herzlich willkommen in der Delphi-PRAXiS, teschniger.

In Delphi kannst du #97 anstelle von 'a' verwenden.

Freundliche Grüße

deteschniger 17. Mär 2007 14:48

Re: UART über Comport/Zahlen übertragen
 
Ui das ging aber schnell. :thumb:

Das funktioniert nicht, da ich aus einer Edit box den Text nehme, in einer Variable speichere und dann per Comport1.writestr(variable) versende. Wenn ich jetzt #97 in mein Textfeld eingebe, ist das nicht das selbe, wie wenn wie ein a reinschreibe, da dann #97 in Asciizeichen umgewandelt wird...

Wie und wo müsste ich denn # einbrigen, damit das z.B. #97 in ein a umgewandelt wird?
sowas wie:
x:= '#' + Edit1.text

geht ja nicht........

Neutral General 17. Mär 2007 14:54

Re: UART über Comport/Zahlen übertragen
 
Hi,

also in deinem Edit stehen Zahlen?
Z.B '97' ?

Wie wärs mit

Delphi-Quellcode:
Chr(IntToStr(Edit1.Text))
?

Gruß
Neutral General

deteschniger 17. Mär 2007 15:09

Re: UART über Comport/Zahlen übertragen
 
Ich bitte meine Delphiunkenntnis zu entschuldigen!

Ist das ein eigenständiger Befehl? Mein problem ist folgendes. Das ganze Programm besteht derzeit aus einem Button, einem Label und einem Editfeld.
Wenn ich diesen wunderschönen Button betätige, soll das programm die oben eingetipte zahl in das Entsprechende Ascii zeichen umwandeln. Da ich deinen Befehl nicht kenne, sieht das ganze bei mir so aus

procedure TForm1.Button1Click(Sender: TObject);
begin


label1.Caption:= (InttoStr(Edit1.Text));

end;
Nur das Programm lässt sich nicht Debuggen, da die fehlermeldung: "[Fehler] Power.pas(33): E2250 Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann" auftaucht.

Wie muss ich also deinen Befehl in das Programm einbinden?


Vielen dank für deine Hilfe

deteschniger 17. Mär 2007 15:13

Re: UART über Comport/Zahlen übertragen
 
ich habs..........!!....ich dummerchen

Viele Dankens!!!!!!!!

Kaum schreibt man alles richtig schon funktioniert es :wall:

SirTwist 17. Mär 2007 15:15

Re: UART über Comport/Zahlen übertragen
 
Wenn, dann so rum:
Delphi-Quellcode:
Chr(StrToInt(Edit1.Text))
Ich denke mal, dass Deine Mega8-Routine nur einzelne Byte-Werte vom UART entgegennimmt. Deine Cport-Library schickt aber Strings. Ein String besteht aus einzelnen Zeichen, die jeweils durch einen Ascii-Code dargestellt werden. Jedes Zeichen kommt dann beim Mega8 als dessen Ascii-Code als Bytewert an. Deshalb wird aus Deinem 'z' die 97.

Alternative 1:
Delphi-Quellcode:
var a: Integer;
begin
  ...
  a := StrToIntDef(Edit1.Text, -1); // Wenn kein gültiger Zahlenwert, wird -1 zurückgegeben
 
  if InRange(a, 0, 255)           // Testen, ob ein Zahlenwert von 0 bis 255 eingegeben wurde
    then cport.WriteStr(Chr(a));  // Wenn ja, dann senden
...
Alternative 2:
Du benutzt zur Eingabe deiner Zahl direkt eine TUpDown-Komponente, gekoppelt mit einem Edit-Feld. Dann hast Du in der Eigenschaft "Position" direkt einen Integerwert, den Du über die Eigenschaften "Min" und "Max" auf den Wertebereich 0-255 einschränken kannst.

deteschniger 17. Mär 2007 15:20

Re: UART über Comport/Zahlen übertragen
 
Genau darauf sollte es hinaus laufen!!! Vielen vielen dank!

Neutral General 17. Mär 2007 16:05

Re: UART über Comport/Zahlen übertragen
 
Ehm ja sry.. Wenn ich schnell schreibe dann kommts schonmal vor das ich StrToInt denke und IntToStr schreibe :oops:

deteschniger 18. Mär 2007 07:33

Re: UART über Comport/Zahlen übertragen
 
.......ok....das hab ich garnicht gemerkt :lol: .
Ich hatte einen anderen Fehler, der zu banal ist, in hier zu posten :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz