www.mikrocontroller.net

Forum: PC-Programmierung VB 2005 Serial Port Problem

Autor: bushobbyentwickler (Gast)
Datum: 25.06.2008 19:58

Hallo,

ich habe auf meinem MC Atmega 16 ein Programm, das über UART Zeichen
empfängt und diese dann wieder zurück über UART an den PC sendet.
In VB 2005 hab ich eine Anwendung gemacht, mit der man ein Zahlenwert
zwischen 0 und 255 an den MC schicken kann.

Senden tu ich mit SerialPort.Write(Chr(value)) .

Empfangen kann ich allerdings dann nur Werte zwischen 0 und 63!

Ich hab das ganze mal mit einem Terminal-Programm durchgespielt. Wenn
ich da beispielsweise 0xFF an den MC sende, dann kommt auch 255 zurück.

Also schließe ich daraus, dass diese .NET - KLasse die ich in VB nutze
nur Werte zwischen 0 und 63 sendet. Mit einer Messagebox habe ich auch
schon den Wert angezeigt, der der Sendefunktion übergeben wird, da sieht
alles noch normal aus.

Muss ich vielleicht eine andere Funktion zum Senden der Daten verwenden?

mfg bushobbyentwickler
Autor: j.... (Gast)
Datum: 26.06.2008 12:50

hallo


das könnte es sein

Stefan "stefb" B. (stefan)

Jetzt treibt ihr mich schon so weit, dass ich virtuell Visual Basic .NET
programmiere. Jungs, macht nur so weiter ;-)

Imports System
Imports System.Text    ' <=== !     ' das ist wichtig

Public Class Form1
    'Codeabschnitt von Rod:

    Sub SendSerialData(ByVal data As String)
        Dim enc As Encoding = Encoding.GetEncoding(1252)
        ' Send strings to a serial port.
        Using com1 As IO.Ports.SerialPort = _
        My.Computer.Ports.OpenSerialPort("COM1", 2400,
IO.Ports.Parity.None, 8)
            com1.Encoding = enc
            com1.WriteLine(data)
        End Using
    End Sub
End Class


gruß
Autor: bushobbyentwickler (Gast)
Datum: 27.06.2008 08:16

Ich habs damit mal probiert, es hat aber nichts gebracht.

Hab das Problem aber nochmal genauer untersucht:
Wenn ich Werte zwischen 0 und 127 sende, sendet er auch genau diese
Werte.
Wenn ich allerdings einen Wert > 127 sende, dann kommt vom MC 63 zurück,
also muss mein VB-Programm wohl 63 gesendet haben.

Nochmal: Wenn ich mit einem Terminalprogramm z.B. 250 sende, dann kommt
auch dieser Wert zurück!
Autor: Meister Eder (edson)
Datum: 27.06.2008 09:27

Hallo,

vielleicht ist ein Fehler bei der Verarbeitung der Werte auf dem uC
aufgetreten.

>Wenn ich allerdings einen Wert > 127 sende, dann kommt vom MC 63 zurück,
>also muss mein VB-Programm wohl 63 gesendet haben.

Das glaube ich nämlich nicht. Wieso sollten Werte <127 und Werte um oder
über 250 korrekt ausgegeben werden, die Anderen aber nicht? Den Fehler
vermute ich in der uC-Firmware.


@j....

Bitte nicht zu jedem VB Problem den selben Beitrag zitieren.


Gruss,
Edson
Autor: mars (Gast)
Datum: 27.06.2008 09:47

Probier mal SerialPort.Write(New Byte() {64, 128, 255}, 0, 3)
Autor: bushobbyentwickler (Gast)
Datum: 27.06.2008 11:06

[quote]Das glaube ich nämlich nicht. Wieso sollten Werte <127 und Werte
um oder
über 250 korrekt ausgegeben werden, die Anderen aber nicht? Den Fehler
vermute ich in der uC-Firmware.
[/quite]

Nein, Werte < 127 werden von der VB-Anwendung richtig gesendet, denn der
MC sendet diese Werte auch wieder zurück. Sende ich aber in der
VB-Anwendung Werte > 127 an den MC, kommt immer wieder 63 ('?') zurück.

Wenn ich das ganze mit dem Terminalprogramm durchspiele, funktioniert
alles wunderbar, d.h. wenn ich 255 an den MC sende, kommt dies auch
wieder zurück! Also kann es wohl nicht an der Firmware liegen, denn im
Terminalprogramm tuts ja!

Kann es sein, dass ich irgendwo den Zeichensatz umstellen muss???
Autor: Haus-Air (Gast)
Datum: 27.06.2008 13:56

Ich rate mal.... ist dein 'value' eh unsigned?
Autor: Johnny (Gast)
Datum: 27.06.2008 14:29

Bedenke, dass .NET für Zeichen und Strings Unicode verwendet, also
konkret 2 Bytes pro Zeichen. Dadurch kommt wahrscheinlich was
durcheinander.
Wie bereits "mars" geschrieben hat am besten ein Byte Array erzeugen und
das mit der entsprechenden Byte-Sende-Methode rausschicken.
Das gleiche gilt übrigens für den umgekehrten Weg.
Autor: Meister Eder (edson)
Datum: 27.06.2008 15:23

>Nein, Werte < 127 werden von der VB-Anwendung richtig gesendet

So habe ichs doch geschrieben...? :)

Das mit den Werten habe ich wohl falsch verstanden. Du hast ja die z.B.
250 oder so vom Terminal aus geschickt.

Würde dann auch den von mars und Johnny vorgeschlagenen Weg versuchen.

Gruss,
Edson
Autor: j.... (Gast)
Datum: 27.06.2008 20:27

bushobbyentwickler (Gast)


>@Stefan "stefb" B. (stefan)

>der cod ist richtig
>aus com1.WriteLine(Data)  muß aber com1.Write(Data) werden.

>Jetzt kann ich Einzelwerte und echte Datenstrings senden.

Versuche dies noch einmal.

Es geht wunderbar.

gruß
Autor: Jan (Gast)
Datum: 01.07.2008 09:33

Hallo,

Ich will einen Hydraulikzylinder 9 Positionen anfahren lassen. Ich würde
den Zylinder gerne mit einem einfachen VB oder C# Programm steuern. Ist
es möglich mit einem VB-Programm analoge Signale zur Ansteuerung des
Ventils zu erzeugen, bzw kann ich ein analoges Signal (von einem
Wegmesssystem) von einem VB programm verarbeiten lassen?

Vielen Dank,
Jan =)
Autor: bushobbyentwickler (Gast)
Datum: 01.07.2008 19:07

Nein, das geht nicht nur mit VB.
Du kannst aber damit einen MC über UART ansteuern der das dann alles
machen kann.
Autor: j.... (Gast)
Datum: 01.07.2008 21:49

hallo

bushobbyentwickler (Gast)

alles O.K.

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net