-
Dafür verwende ich ein virtuelles Nullmodem - com0com, das erstellt 2 virtuelle serielle Ports die miteinander verbunden sind, an einen "hängst" du dein VB-Programm, an den anderen ein Terminal (bei mir Docklight).
Das funktioniert leider nicht mit dem Bascom-Simulator, habe zu diesem Problem schon hier und im englischen Forum gepostet und auch an den Support geschrieben, ohne Ergebnis...
Hardwaremäßig funktioniert die Verbindung? schon durchgemessen, wenn dein VB-Programm sendet ob was am Controller ankommt und umgekehrt?
mfg
-
Ok hab das jetzt mal mit com0com und Docklight aufgebaut.
Mein VB Prog sendet einwandfrei .Danke für den Tipp Netzman das sind echt mal nützliche tools.
Also liegt mein Fehler in Basecom.
Was ist denn mit Waitkey() oder Inkey() ? Gibt es da keine anderen Aufruf um Daten aus dem Buffer zu lesen ?
-
Gibt es, Inputbin liest die Daten binär in eine Variable, soviele Bytes wie die Variable groß ist, beginnend mit dem MSB.
mfg
-
Hab das ganze jetzt mal noch einfacher versucht :
Code:
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4 'USB Buchse
Dim My_byte As Byte
Dim My_string As String * 1
Do
My_byte = Waitkey()
Print #4 , "Empfangen: " ; My_byte 'Gibt den ASCII-Code des Zeichens zurück
My_string = Waitkey()
Print #4 , "Empfangen: " ; My_string 'Gibt den Text zurück
Loop
End
Geht aber immer noch nicht :(
-
Was genau geht nicht?
Codemäßig sollte das IMHO hinhauen.
Wie gesagt, der Simulator hat ein Problem mit seriellen Terminals, er empfängt nichts, senden geht aber.
Wenn du InSystem testest, würde ich wie schon erwähnt prüfen ob auch die Signale dort ankommen wo sie sollten.
mfg
-
Also das VB Prog läuft so wie es soll.
Habe mit dem com0com die Buttons empfangen und umgekehrt wurden die Zahlen oder Zeichen die ich in Docklight eingab auch in dem VB Fenster ausgegeben.
Klemme ich jetzt mein VBprog an den mC und lasse den mC irgendwas senden kommt das auch im Fenster an.
Wenn ich aber versucht mit dem Oben stehenden Prog die Sachen die ich an den mC sender von diesem einfach wieder zurück zu schicken zu lassen macht er das nicht.
-
Also ich bin jetzt schon mal einen Schritt weiter , das Problem war das der "Print #4 , Wert " immer noch ein CR und LF mitschickt die ich jedoch in meiner Abfrage nicht berücksichtigt hatte, hab jetzt
jetzt noch ein ";" dahinter gehangen und schon läuft die Kiste :)
-
So hab jetzt alles am laufen.
Das Problem war das ich einmal nicht nur das Zeichen sondern auch den CR und LF sendete und zum anderen hatte ich "inputbin A" anstelle von "Inputbin #4 , A" geschrieben.
Noch mal vielen Dank für eure Hilfe.
Vor Allen an Netzman , ohne die Tools hätte ich das nicht so schnell herausgefunden.
-
Hallo tony,
der Quellcode von deinem VB-Programm wäre sicher von allgemeinen Interesse. Ich für meinen Teil interessiere mich auf jeden Fall dafür.
Würde mich freuen, wenn du deinen Quellcode hier posten würdest.
An Netman ebenfalls mein Dank, hätte mir schon fast für viel Geld ein Nullmodemkabel gekauft. Eventuell wäre es hilfreich den von mir geposteten Wiki-Eintrag um einen kurzen Hinweis zu diesem Programm zu erweitern.
Gruß, pacer
-
Hier einmal die Bedienoberfläche zu dem Programm :
Bild hier
Und hier der VB Code :
Code:
Public Class Form1
Dim Anzeigewert As String
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
SerialPort1.Open()
End Sub
Private Sub cmdEingabe1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEingabe1.Click
SerialPort1.Write(1)
End Sub
Private Sub cmdEingabe2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEingabe2.Click
SerialPort1.Write(2)
End Sub
Private Sub cmdEingabe3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEingabe3.Click
SerialPort1.Write(3)
End Sub
Private Sub cmdReset_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdReset.Click
SerialPort1.Write("r")
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If SerialPort1.BytesToRead > 0 Then
Do
Anzeigewert = Chr(SerialPort1.ReadByte)
txtAnzeige.AppendText(Anzeigewert)
txtAnzeige.ScrollToCaret()
If SerialPort1.BytesToRead = 0 Then
Exit Do
End If
Loop
End If
End Sub
End Class
Und der Basecom-AVR:
Code:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4 'USB Buchse
Dim A As Byte
Led = 1
Do
Inputbin #4 , A
If A > 0 Then
Select Case A
Case 49 'Das ist der ASCII Code für Taste "1"
Led = 0
Print #4 , "LED = Ein"
Case 50 'Das ist der ASCII Code für Taste "2"
Led = 1
Print #4 , "LED = Aus"
Case 51 'Das ist der ASCII Code für Taste "3"
Print #4 , "Taste 3 wurde gedrückt!"
Case 114 'Das ist der ASCII Code für Taste "r"
Print #4 , "Reset..."
Goto 0
Case Else
Print #4 , "Error"
End Select
End If
Loop
End