mikrocontroller.net

Forum: PC-Programmierung VB 2005 Serial Port Problem


Autor: bushobbyentwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal SerialPort.Write(New Byte() {64, 128, 255}, 0, 3)

Autor: bushobbyentwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[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:

Bewertung
0 lesenswert
nicht lesenswert
Ich rate mal.... ist dein 'value' eh unsigned?

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
>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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
hallo

bushobbyentwickler (Gast)

alles O.K.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
By default, SerialPort uses ASCIIEncoding to encode the characters. 
ASCIIEncoding encodes all characters greater then 127 as (char)63 or 
'?'. To support additional characters in that range, set Encoding to 
UTF8Encoding, UTF32Encoding, or UnicodeEncoding.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie war das schon wieder mit dem Suchen?

Beitrag "immer 3Fh auf dem COM-Port, beim senden von Werten > 127d"

(erst vor ein paar Tagen...)

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.