rs 232 rechtecke vor und nach wert

Gast #1345793
Lesenswert?

hallo jungs,

habe einen atmega8 mit print lasse ich in "1", "2" und "3" nacheinander 
ausgeben.
funktion ok, im Terminal von MS: 1
                                 2
                                 3
funktion ok, super.
aber in meiner VB.NET 2008 zeigt er mir vor und nach jeweils ein quadrat 
oder rechteck, ich denke mal das sind meine gänsefüße, oder etwa nicht.
jetzt meine frage wie bekomme ich die sachen weg. Weil mit den zeichen 
habe ich probleme in der verarbeitung des programmes wohl, weil bei 
eintreffen der sachen sollen diverse schen farblich gemeldet werden.

ich danke euch schon mal im vorraus.
Gast #1345815
Lesenswert?

>aber in meiner VB.NET 2008 zeigt er mir vor und nach jeweils ein quadrat
>oder rechteck, ich denke mal das sind meine gänsefüße, oder etwa nicht.

Gänsefüßchen sind auch "sichtbare" ASCII-Zeichen.
Guck mal in der Codesammlung nach "Hterm". Das ist ein Terminalprogramm, 
das sehr schön sämtliche Darstellungsformen von Bytes bereitstellt.
Ich vermute, dass es sich bei den Klötzchen um Steuerzeichen handelt.
Gast #1346875
Lesenswert?

hier der quell code von vb 2008 express

Public Class Form1

    Delegate Sub TextBoxCallback(ByVal text As String)

    Private WithEvents myComPort As IO.Ports.SerialPort

    Private EndOfCommand As String = Constants.vbCrLf.ToString

    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        Dim str() As String = IO.Ports.SerialPort.GetPortNames()

        If str.Length = 0 Then
            MsgBox("No Serialport available!", MsgBoxStyle.Critical)
            Me.Close()
        End If


        Me.myComPort = New IO.Ports.SerialPort(str(1)) 'für com3


        Me.myComPort.BaudRate = 4800
        Me.myComPort.DataBits = 8
        Me.myComPort.StopBits = IO.Ports.StopBits.One
        Me.myComPort.Parity = IO.Ports.Parity.None
        Me.myComPort.ReceivedBytesThreshold = 1
        Me.myComPort.Open()
    End Sub

    ''' <summary>

    ''' </summary>
    Private Sub myComPort_DataReceived( _
        ByVal sender As Object, _
        ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles myComPort.DataReceived

        Select Case e.EventType
            Case IO.Ports.SerialData.Chars
            Case IO.Ports.SerialData.Eof
        End Select
        Dim msg As String = Me.myComPort.ReadExisting
        Me.ShowText(msg)
    End Sub

    ''' <summary>

    ''' </summary>
    Private Sub myComPort_PinChanged(ByVal sender As Object, ByVal e As 
_
        System.IO.Ports.SerialPinChangedEventArgs) Handles 
myComPort.PinChanged
        Select Case e.EventType
            Case IO.Ports.SerialPinChange.Break


            Case IO.Ports.SerialPinChange.CDChanged


            Case IO.Ports.SerialPinChange.CtsChanged


            Case IO.Ports.SerialPinChange.DsrChanged


            Case IO.Ports.SerialPinChange.Ring

        End Select
    End Sub

    ''' <summary>

    ''' </summary>
    Private Sub myComPort_ErrorReceived( _
        ByVal sender As Object, _
        ByVal e As System.IO.Ports.SerialErrorReceivedEventArgs) _
        Handles myComPort.ErrorReceived

        Select Case e.EventType
            Case IO.Ports.SerialError.Frame

            Case IO.Ports.SerialError.Overrun


            Case IO.Ports.SerialError.RXOver


            Case IO.Ports.SerialError.RXParity

            Case IO.Ports.SerialError.TXFull

        End Select
        Me.ShowText("ERROR" & vbCrLf)
    End Sub

    ''' <summary>

    ''' </summary>
    Private Sub ShowText(ByVal text As String)
        If Me.TextBox1.InvokeRequired Then
            Dim d As New TextBoxCallback(AddressOf ShowText)
            Me.Invoke(d, New Object() {text})
        Else
            Me.TextBox1.Text = Me.TextBox1.Text & text
        End If
    End Sub

    ''' <summary>

    ''' </summary>
    ''' <param name="command"></param>
    ''' <remarks></remarks>
    Private Sub Send(ByVal command As String)
        Me.myComPort.Write(command & Me.EndOfCommand)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        Me.Send("4")
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button2.Click
        Me.Send("5")
    End Sub
End Class
#1346994
Lesenswert?

Hallo Dietmar

also die Funktion Print auf dem AVR sendet nicht nur das angegebene 
Zeichen sondern auch noch ein CR 0x0D und ein LF 0x0A, wenn du das mit 
dem Termialprogramm anschaust, so sorgen die beiden Steuerzeichen dafür 
das die Schreibposition zur nächsten Zeile und wieder zum Zeilenanfang 
springt.
Beim Empfang mit VB werden auch diese 2 Codes mit in deinem String 'msg' 
eingelesen - deine Funktion ShowText kann die Zeichen aber nicht 
darstellen und zeigt die "Rechtecke" als Platzhalter an.
Entweder du bringst print dazu kein CR-LF zu senden oder du entfernst 
die empfangenen nicht darstellbaren Codes im VB-Programm aus deinem 
String oder du pickst dir nur die relevanten Daten aus dem String wie 
Peter schon vorgeschlagen hat.

Sascha
Gast #1347180
Lesenswert?

Hi

>da liegt der hund begraben mit dem auspicken, das habe ich noch nie
>gemacht und weiß jetzt nicht genau wie ich es einbauen soll.

Noch einfacher ist es, die Zeichen gar nicht erst zu senden. Einfach 
statt 'print' zu benutzen, die Zeichen direkt UDR übergeben  .

MfG Spess
#1347195
Lesenswert?

Dietmar schrieb:
> da liegt der hund begraben mit dem auspicken, das habe ich noch nie
> gemacht und weiß jetzt nicht genau wie ich es einbauen soll.

Dann schau in der Hilfe nach, welche Stringfunktionen es gibt.

Du hast einen String. Und du willst aus diesem String einen anderen 
String extrahieren, der aus allen ausser dem ersten und dem letzten 
Zeichen besteht.
In Basic gibt es für Stringverarbeitung eine Menge Funktionen. Unter 
anderem gibt es Funktionen um die Länge eines Strings festzustellen, um 
die linken x Zeichen zu bekommen, um die rechten x Zeichen zu bekommen 
und um einen Substring zu bekommen, der an Position x anfängt und n 
Zeichen lang ist.

Wie gesagt: Durchsuch deine Hilfe nach Stringfunktionen. Die brauchst du 
sowieso, wenn du auch nur annähernd ersthaft programmieren willst.
Gast #1347398
Lesenswert?

Hallo,
CR und LF kann man beim Senden sehr einfach unterdrücken wenn man in 
Basic auf dem AVR statt Print "Text" einfach ein ; anhängt, also Print 
"Text";

Das ist dann auf dem Terminal-Programm nicht mehr zu lesen, weil das 
Folge-Print in die gleiche Zeile schreibt.

Anders herum kann man in VB .Net das CR und LF einfach ausblenden, wenn 
man Zeile = Io.Ports.SerialPort.ReadTo(vbcrlf) verwendet. In Zeile ist 
dann das CR und LF nicht enthalten.

Viel Spaß
Hermi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren