Forum: PC-Programmierung RS232 Daen vom AVR zum PC Senden


von Klaus (Gast)


Lesenswert?

hi

Ich beschäfige mich jetzt schon seit langem, mit der Komunikation eines 
AVR mit dem Computer oder ehr gesagt mit Visual Basic 2005.

Nun ich möchte gerne dinge die der Atmel mir mit printf zum PC sendet 
auch auf dem Computer Angezeigt bekommen. Damit sind wir auch bei meinem 
Problem nehme ich mir nämlich das Hyperterminal bekomme ich folgendes 
vom Atmel 200 dies bekomme ich aber nur wenn ich zuvor vom PC folgendes 
übertragen habe 3 150 im Atmel wird dann einfach zu versuchszwecken 50 
hinzuaddiert und es kommt die Rückmeldung 200 so wie es sein soll.

Allerdings bin ich mit meinen versuchen mit VB 2005 nicht sehr weit 
gekommen das einzigste was ich hinbekommen habe ist das mir folgendes 
angezeigt wurde. 203 150 dabei vermischt mir das System einfach das 
Ergebniss mit dem was ich zuvor gesendet habe dieses Ergebniss habe ich 
mit einem Timer erreicht in dem ich erst an den Atmel 3 150 gesendet 
habe und direkt danach mit ReadLine ausgelesen. Erscheind diese 
Zahlenkombination.
(Code)

Daher würde ich von euch gerne wissen wie ich soetwas sinvoll aufbauen 
kann?

Ich habe schon etwas von DataReceived gehört und mich auch schon daran 
versucht allerding wurde das ereignis nie bei mir ausgelöst.

Hier mein bisheriger Code:
1
Public Class Form1
2
3
 Dim aktwert As sting
4
5
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
6
        SerialPort1.BaudRate = 9600
7
        SerialPort1.DataBits = 8
8
        SerialPort1.PortName = "COM1"
9
        SerialPort1.StopBits = System.IO.Ports.StopBits.One
10
        SerialPort1.Parity = System.IO.Ports.Parity.None
11
    End Sub
12
13
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
14
        SerialPort1.Open()
15
        SerialPort1.Write("3 150" & Chr(10))
16
        aktwert = SerialPort1.ReadLine()
17
        TextBox1.Text = aktwert
18
        SerialPort1.Close()
19
    End Sub
20
End Class

P.s. Ich habe erst vor kurzem mit vb6 angefangen und bin noch in der 
lernphase!

von Philipp B. (philipp_burch)


Lesenswert?

Du hast es doch schon angesprochen: DataReceived. Das wird aufgerufen 
wenn Daten empfangen wurden. In deinem Timer-Ereignis liest du auf gut 
Glück etwas aus, obwohl vielleicht gar nix drin steht.
Du machst dir also ein DataReceived-Ereignis und packst alle empfangenen 
Daten in einen String. Z.B. so:
1
    Private buf As New System.Text.StringBuilder
2
3
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
4
        Call buf.Append(SerialPort1.ReadExisting())
5
    End Sub

'buf' beinhaltet damit immer eine Folge von empfangenen Zeichen die du 
auswerten kannst. Siehe dazu auch hier: 
Beitrag "µC über Serielle Schnittstelle steuern"

EDIT: Nochwas: Wenn du dich schon mit VB 2005 beschäftigst, dann lass 
VB6 weg. VB6 ist eine gute Sache, allerdings nicht mehr zeitgemäss. 
Lerne besser richtig VB 2005 (Auch als VB .NET bekannt).

von Peter T. (peter_vals)


Lesenswert?

hast du eine serielle schnittstelle am pc??? oder ein usb-adapter??? ich 
frage desshalb, weil ich da auch probleme hatte. daten dauerfeuer hat 
funktioniert, aber einzellne Bytes nicht. das problem war trotz 
auschgeschaltenem fifo buffer, dass der usb-seriell converter die daten 
zwischengspeichert hatte und so nur je nach dem nach lust und laune 
weitergeleitet hat. habs dann mit einem anderen adpter versucht und tip 
top geklappt.
ich hatte lange zeit gebraucht um dieser "Fehler" zu finden...

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
Noch kein Account? Hier anmelden.