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
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ß
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!
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
[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???
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.
>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
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ß
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 =)
Nein, das geht nicht nur mit VB. Du kannst aber damit einen MC über UART ansteuern der das dann alles machen kann.
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.
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...)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.