www.mikrocontroller.net

Forum: PC-Programmierung Serielle Schnittstelle daten empfangen, wie anfangen?


Autor: stairzup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich muss zur zeit für die Schule ein Projekt machen, dabei 
handelt es sich um eine Wetterstation, dessen Messwerte an das Lemps12 
Mikrocontroller-System übergeben werden... Das ganze wird in C 
Programmiert und die Daten werden in einem Array gespeichert und ich 
kann sie auch z.B. mit printf an das Lemps-Terminal (das zur IDE gehört) 
ausgeben. Jetzt möchte ich aber ein Programm, am liebsten mit VB oder 
VBA (Excell) schreiben, das die Daten anzeigt und z.B. Visualisiert. 
Jetzt habe ich nur absolut keine ahnung wie ich das anstellen soll. 
Irgendwie muss es ja möglich sein. Ich habe schon versucht mit 
Programmen die den Com-Port auslesen aber irgendwie kriege ich es nicht 
hin. Würde es z.B. möglich sein mit VB die werte zu empfange die ich mit 
printf normalerweise ans Terminal sende? Ich weiß halt echt nicht wie 
ich anfangen soll und aus den vielen anderen Themen über die 
COM-Schnittstelle werde ich auch nicht schlauer...

Danke!

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Würde es z.B. möglich sein mit VB die werte zu empfange die ich mit
printf normalerweise ans Terminal sende?
Ja

>Ich weiß halt echt nicht wie
ich anfangen soll
http://www.faustweb.de/download/download_soft.htm#VBA

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die exceldatei macht wohl nicht das was du willst sehe ich grad

aber bei der rsapi.dll ist eine doku dabei:
http://www.faustweb.de/download/download_soft.htm#dll
damit sollte es dann kein problem sein ein paar zeilen zu empfangen

viel erfolg bei deinem projekt

Autor: stairzup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Vielen Danke habe das ganze mal ausprobiert, aber so richtig 
geklappt hat es nicht. nun habe ich mit vb express versucht daten zu 
empfangen mit folgenden code:
das klappt auch soweit nur das er mir nur die erste zeile ausgibt... und 
wenn ich statt "SerialPort2.ReadLine" "SerialPort2.ReadExisting" nehme 
zeigt er mir nur die ersten drei buchstaben an und sonst nichts...
wie kann ich es machen das er z.B. jede zeile die geschickt wird einzeld 
mit "SerialPort2.ReadLine" ausgib?
    Private Sub bsf1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bsf1.Click
        SerialPort2.Open()
        Dim Incoming As String
        lst.Items.Clear()
        Incoming = ""
        While Incoming = ""
            Incoming = SerialPort2.ReadLine
            If Incoming <> "" Then lst.Items.Add(Incoming)
        End While
        SerialPort2.Close()
    End Sub

die ausgabe im c code vom programm das aufn mikrocontroller ist:
     printf("\n\n\n%u Lemps12 Messwerte\n",MessNr-1);
        printf("\nMW Nr:\t\n\n");
        for(MessNrb=1;MessNrb<MessNr;MessNrb++){
            printf("%u:\t%u Grad\n",MessNrb,Dat[MessNrb-1]);
        }

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geh das

        Incoming = ""
        While Incoming = ""
            Incoming = SerialPort2.ReadLine
            If Incoming <> "" Then lst.Items.Add(Incoming)
        End While


einmal in Gedanken durch.
Wie lange läuft die while Schleife?
Welchen Wert hat Incoming nachdem die erste Zeile empfangen wurde?
Was bedeutet das für die Schleife?

Autor: stairzup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hehe ja das weiß ich wohl das es dann nach dem ersten wert abbricht ;)
aber wenn ich das ganze in einer endlosschleife mache klappt es auch 
nicht, dann passiert nix... mein problem ist wie kann ich machen das er 
automatisch erkennt wenn was geschickt wird.. also z.B. werden 10 zeilen 
geschickt woher weiß dann das programm das 10 zeilen kommen? da muss er 
ja irgendwie immer auf standby sein also in einer endlosschleife oder so 
aber wenn ich das mache passiert garnichts:

        While True
            Incoming = SerialPort2.ReadLine
            If Incoming <> "" Then lst.Items.Add(Incoming)
        End While

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Polling ist immer blöd ... Sollte in VB nicht ein Event ausgelöst 
werden, wenn was 'reinkommt?

Ich benutze zwar kein VB, sondern RealBasic, da ist das mit den 
seriellen Schnittstellen ganz easy. Ich kann mir nicht vorstellen, dass 
das Basic vom Platzhirsch das nicht auch kann ...

Frank

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As 
System.IO.Ports.SerialDataReceivedEventArgs) Handles 
SerialPort1.DataReceived
        t_zahl = t_zahl + 1                'variable Global
        If t_zahl = 100 Then t_zahl = 0   'test ob was rein kommt

        ' daten = SerialPort1.ReadByte()
        TextBox2.Text = t_zahl
        byteeinlesen()
    End Sub

'Eingelesener wert mit Timer Anzeigen
'sonst mit invoke arbeiten

Autor: stairzup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich habe es jetzt geschafft die daten an den pc zu schicken, in einem 
array zu speichern und in einem diagramm darzustellen. jetzt habe ich 
noch folgende problem, wo ich nicht weiter komme:
1. Ich habe ein array in dem einmal der messwert und die zeit/datum 
gespeichert werden soll... da irgendwas mit dem mikrocontroller nicht 
stimmt und die zeit immer 00:00:00 ist, muss ich die systemzeit vom pc 
nehmen. wie mache ich das am besten, so dass ich es in dem array 
speichern und wieder abrufen kann... irgendwie bin ich dazu zu blöd.

2. ich möchte das array abspeichern, in einer externen datei oder vllt 
sogar einem excel-blatt. mein problem: ich habe keine ahnung von vb und 
möchte nun wissen wie ich das anstelle das z.B. das array an ein anderen 
sub übergeben wird oder irgendwie so, weil es ja bei knopfdruck 
passieren soll.

3. wenn ich daten an den mikrocontroller senden will, z.B. um einen Teil 
des Programms zu starten oder so, dann benutze ich "SerialPort2.Write()" 
aber wenn ich jetzt "SerialPort2.Write(1)" benutzte kommt beim 
Mikrocontroller "177" an.... und irgendwie ist das alles tüdelig... so 
ist es nicht möglich mal ebend nen paar parameter für irgendeine 
funktion vom pc an den mikrocontroller zu senden.

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. ich würde in der hilfe nach time und date suchen

2.
daten an sub übergeben:

sub test (variable as Integer)

an dateien kommst du über das file system objekt.
wenn du deine werte in eine textdatei speicherts und mit ";" trennst 
kannst du die daten in excel importieren (=csv datei).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.