Hallo,
ich kommuniziere mit meinem PC per UART (BAUD 56000) mit einem Mikrocontroller (ATMega8).
Der Mikrocontroller schickt 2Zeilen mit insgesamt 96 Werten, berechnet dann was und schickt wieder 2 Zeilen mit je 96 Werten. Das geht ca. 7 mal in der Sekunde.
Wenn ich mir das ganze mit dem HTerm anseh funktioniert alles supa.
Nur wenn ich mein eigenes Programm benutze sind die Werte verzögert und werden immer mehr Verzögert. Sprich ich empfange Daten vom Controller was auch funktioniert, dann geb ich ihm ein signal dass er nur noch 0 schicken soll, dann dauert es aber bis zu ein paar sekudnen bis ich die 0 auch wirklich empfang, genau das selbe auch wenn ich wieder auf die realen Werte umstelle.
Am Programm vom Mikrocontroller liegst ziehmlich sicher nicht, da es mit HTerm ja wunderbar funktioniert (ohne verzögerung).
Hier der Code den ich derzeit verwende:
Wenn ich das ganze nicht mir readline sondern mit readchar mach geht das ganze noch um einiges langsamer von statten. Dann braucht er für eine Zeile schon um die 5 Sekunden.
Irgendwo hab ich da einen groben Denkfehler drin. Ich hoff es kann mir wer helfen.
mfg.skyscater
ich kommuniziere mit meinem PC per UART (BAUD 56000) mit einem Mikrocontroller (ATMega8).
Der Mikrocontroller schickt 2Zeilen mit insgesamt 96 Werten, berechnet dann was und schickt wieder 2 Zeilen mit je 96 Werten. Das geht ca. 7 mal in der Sekunde.
Wenn ich mir das ganze mit dem HTerm anseh funktioniert alles supa.
Nur wenn ich mein eigenes Programm benutze sind die Werte verzögert und werden immer mehr Verzögert. Sprich ich empfange Daten vom Controller was auch funktioniert, dann geb ich ihm ein signal dass er nur noch 0 schicken soll, dann dauert es aber bis zu ein paar sekudnen bis ich die 0 auch wirklich empfang, genau das selbe auch wenn ich wieder auf die realen Werte umstelle.
Am Programm vom Mikrocontroller liegst ziehmlich sicher nicht, da es mit HTerm ja wunderbar funktioniert (ohne verzögerung).
Hier der Code den ich derzeit verwende:
VB.NET-Quellcode
- Public Class frm1
- Private Sub frm1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- End Sub
- Private Sub cmdConnent_Click(sender As System.Object, e As System.EventArgs) Handles cmdConnent.Click
- If cmdConnent.Text = "Verbinden" Then
- srpMain.PortName = "COM1"
- srpMain.BaudRate = 56000
- srpMain.DataBits = 8
- srpMain.StopBits = IO.Ports.StopBits.One
- srpMain.Parity = IO.Ports.Parity.None
- srpMain.Open()
- cmdConnent.Text = "Trennen"
- ElseIf cmdConnent.Text = "Trennen" Then
- srpMain.Close()
- cmdConnent.Text = "Verbinden"
- End If
- End Sub
- Private Sub txtMain_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtMain.TextChanged
- If txtMain.TextLength > 10000 Then
- txtMain.Text = txtMain.Text.Remove(0, txtMain.TextLength - 10000)
- txtMain.SelectionStart = txtMain.TextLength
- End If
- txtMain.ScrollToCaret()
- End Sub
- Private Sub srpMain_DataReceived(sender As Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles srpMain.DataReceived
- Me.Invoke(Sub() txtMain.Text = srpMain.ReadLine)
- End Sub
- End Class
Wenn ich das ganze nicht mir readline sondern mit readchar mach geht das ganze noch um einiges langsamer von statten. Dann braucht er für eine Zeile schon um die 5 Sekunden.
Irgendwo hab ich da einen groben Denkfehler drin. Ich hoff es kann mir wer helfen.
mfg.skyscater