Forum: Mikrocontroller und Digitale Elektronik HyperTerminal selber schreiben


von bluemole (Gast)


Lesenswert?

Help,

ich hab' ein konkretes Problem. Ich will gesammelte Meßdaten über die
UART-Schnittstelle aus dem AVR 90S2313 in den PC einlesen und graphisch
schön aufbereiten. Die Kommunikation mittels MAX232 und dem
HyperTerminal funktioniert (mittlerweile, dank Eigenbau)super. So, nun
aber stecken die Daten im Terminal "fest".

Daher meine Idee, einfach ein HyperTerminal als primitivst Form selber
programmieren und die Daten in ein Array ablegen.

Hat jemand damit Erfahrung, mittels C oder C++ die serielle
Schnittstelle unter Windows auszulesen???? Oder, kann mir jemand ein
Buch etc. empfehlen??? Oder, gibt es eine elegante Möglichkeit die
Daten aus dem Hyperterminal weiterzuverarbeiten....


Vielen Dank schon mal im vorraus,
bluemole

PS:
Die abgelegten Daten graphisch aufzubereiten ist mit den GDI-Funktionen
von Windows kein Problem mehr.....

von Doggy (Gast)


Lesenswert?

Wenn Du in ein paar Minuten zu Ergebnissen kommen willst, dann nimm am
besten eine Skriptsprache wie Python.
Ansonsten ist zur Kommunikation über den USART zum PC genug hier im
Forum geschrieben worden. Benutz einfach mal die Suche. Das sollte
genug Treffer auswerfen.

von Stefan Kleinwort (Gast)


Lesenswert?

Ich habe sowas mal in Delphi gemacht.

Da aber die Windows-Libs von Delphi für die serielle Schnittstelle
benutzt werden, sollte das auch in C möglich sein. Suche mal in Deiner
Entwicklungsumgebung nach:

EscapeCommFunction

Kann aber sein, dass dieser Ansatz schon wieder recht veraltet ist, ist
schon ne Weile her. Auf der anderen Seite will M$ ja die RS232 eh nicht
mehr unterstützen, deswegen gab es da sicher keine großen Neuerungen
die  letzten 3 Jahre.

Viele Grüße, Stefan

von Thorsten (Gast)


Lesenswert?

Wenn du mir Borland C++ Builder arbeitest, so findest du im Netzt
haufenweise fertige Komponenten, die dir die gesamten
Schnittstellenfunktionen bereitstellen. Gibt es bestimmt auch für den
MS Visual C++. Erspart viel Arbeit und funktioniert zuverlässig.

Thorsten

von bluemole (Gast)


Lesenswert?

Danke für Eure schnelle Antwort.
Ich programmiere eigentlich immer nur unter der Visual C++ Umgebung
und dann meistens Konsolenanwendugen.
Mir scheint langsam, das der Borland Compiler viel gängiger ist und
flexibler. Im c/C++ Kompendiumbuch ist die Rede, dass das mit dem
Visual C++ Compiler es gar nicht möglich ist die Com-Schnittstelle
auszulesen. Kann ich aber nicht glauben.

bluemole

PS: Hab' unter help bei Visual C++ noch kein vernüftiges Com- Objekt
gefunden... suche weiter.

von Thorsten (Gast)


Lesenswert?

Also die COM-Schnittstelle kannst du definitiv mit Visual C++
ansprechen, sind alles reine API-Funktionen (FileCreate() etc.). Wie
das genau geht, kann ich dir nicht sagen.

von bluemole (Gast)


Lesenswert?

Die Online-Hilfe von Visual C++ ist so gewaltig, dass ich bald gar
nichts mehr finde... Es steht da zwar allerhand von APIs und COMs etc.
drin, aber was ich damit konkret anfangen kann steht da nicht. Ich
glaube da hilft nur ein Buchkauf oder ein ausgiebiger Besuch in einer
Bibliothek....

von Marco Haufe (Gast)


Lesenswert?

Mit VB für Applications soll soetwas gehen, d.h. es wird ein Plug-In für
Excel oder so erstellt.
VG Marco

von Tobias A. (Gast)


Lesenswert?

schau mal unter www.codeguru.de
da gibts ne routine für die Com-Schnittstelle.
Die ist recht gut.

Gruß
  Tobi

von Doggy (Gast)


Lesenswert?

In C++ wird das ganz einfach mit den Standardfunktionen CreateFile,
ReadFile, WriteFile und CloseHandle gemacht. Wie mit Standarddateien
auch. Die Parameter setzt man im DCB.

Im Übrigen ist Visual C++ der mit grossem Abstand am weitesten
verbreitete Compiler in der Windowswelt. Wenn auch sicherlich nicht der
Beste, von den MFC ganz zu schweigen...

von bluemole (Gast)


Lesenswert?

So eine längere Recherche scheint dem Ende nahe zu sein. Hab' ne super
Beschreibung gefunden. Dank Eurer Hilfe, bzw. Tobi's Hinweis mal unter
www.codeguru.com zu suchen.

Für alle die es interessiert hier der Link...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp

Wenn mein Code funzt wird er gepostet....

Schöne Ostern,
Bluemole

von Tobias A. (Gast)


Lesenswert?

hi
sorry ich meinte auch die .com adresse.
war verpeilt. Sorry das Du deswegen länger
suchen musstest...

Gruß
  Tobi

von Heiß Michael (Gast)


Lesenswert?

Zervas

Also ich programmiere auch mit Visual C++.
Natürlich ist es möglich die Serielle Schnittstelle mit VC++
anzusprechen.
Am einfachsten ist es wenn du es mit ActiveX machst.
Wenn du es mit API Funktionen machen willst kann ich dir nicht helfen
aber mit ActiveX (MSCOMM32.ocx) funktioniert es ohne großen Aufwand.

Wenn du interesse hast schick mir eine eMail dann kann ich dir genau
sagen wie du es am besten machen kannst.

von Hans (Gast)


Lesenswert?

uiii vergiss die activex scheisse schnell wieder... nimm die winapi...
1. schneller 2. flexibler 3. weis man was man tut...

CreateFile zum öffnen der schnittstelle
SetCommTimeouts
ReadFile/WriteFile
CloseHandle

die 5 API funktionen bruachst du... bei codeproject.com findest du
genaueres... eifach nach SetCommTimeouts suchen und dann war das
glaubich der letzte artikel oder so...

73 de oe6jwf

von Heiß Michael (Gast)


Lesenswert?

@Hans:

Ich finde der Mehraufwand ist nicht gerechtfertigt. Mit Active X
brauche ich nur einen Bruchteil an Code um die Kommunikation zum laufen
zu bringen (senden & empfangen).
Besonders wenn man MFC verwendet ist ActiveX eine sehr einfache
Möglichkeit um die Kommunikation zu realisieren.

von bluemole (Gast)


Lesenswert?

So hallo Zusammen,

danke für Euer grosses Interesse an meinem Hyperterminal, es ist so gut
wir fertig. Das Senden klappt wunderbar. Allerdings das auslesen
bereitet mir noch Schwierigkeiten. ReadFile macht mir also noch Kummer.
Einzelne Bytes kann ich auslesen, aber ich will ein ganzen Text
auslesen.
Hab' schon sämtliche TypeCasts ausprobiert -> Geht nicht....
Habt Ihr eine Idee, wie ich in CSReadText ein die Daten reinbekomme????

Stehen in Test dann drin. Vielleicht brauche ich auch Test gar nicht
sondern kann CSReadText gleich übergeben. Allerdings wie?????

Merci für Eure Hilfe.

BOOL Class_SerialPort::ReadText(CString CSReadText)
{
  LPVOID Test = "";

  DWORD dwTransfer=0;

  if (ReadFile (hComm,Test , 10, &dwTransfer, 0))
  {   if (dwTransfer == 1)
    {
    CSReadText = Test; // ?????????????????????
    return true;
    {
  }

  return false;
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.