SerialPort & Visual Studio 2008

Gast #1186525
Lesenswert?

Ich Versuche gerade mittels Visual Studio 2008 eine Terminal Programm in 
Basic zu schreiben. Bei meinem mC hadelt es sich um einen ATMega2560.
Die Verbindung erfolgt über USB (Com4).
Habe als ersten Versuch mal folgendes programmiert :

In VB:
1
 Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
2
        Me.InitializeComponent()
3
        SerialPort1.Open()
4
    End Sub
5

6
    Private Sub cmdEingabe1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEingabe1.Click
7
        SerialPort1.Write(1)
8
    End Sub
9

10
    Private Sub cmdEingabe2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEingabe2.Click
11
        SerialPort1.Write(2)
12
    End Sub
13

14
    Private Sub cmdEingabe3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEingabe3.Click
15
        SerialPort1.Write(3)
16
    End Sub
17

18
    Private Sub cmdReset_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdReset.Click
19
        SerialPort1.Write("r")
20
    End Sub
21

22
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
23
        If SerialPort1.BytesToRead > 0 Then
24
            Do
25
                txtAnzeige.AppendText(Chr(SerialPort1.ReadByte))
26
                txtAnzeige.ScrollToCaret()
27
                If SerialPort1.BytesToRead = 0 Then
28
                    Exit Do
29
                End If
30
            Loop
31
        End If
32
    End Sub
33

34
End Class

Und in BascomAVR:
1
$prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
2

3
$regfile = "m2560def.dat"
4
$hwstack = 82                                               '80
5
$framesize = 68                                             ' 64
6
$swstack = 68                                               '44
7

8
$crystal = 16000000                                         'Quarzfrequenz
9

10
Config Pind.5 = Output
11
Led Alias Portd.5
12

13
Config Pine.5 = Input
14
Usb Alias Pine.5                                            'Ist 1 wenn USB angeschlossen
15

16
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
17
Open "com4:" For Binary As #4                               'USB Buchse
18

19
Dim A As Byte
20

21
Do
22
A = Inkey()
23
If A > 0 Then
24
    Select Case A
25
      Case 49                                               'Das ist der ASCII Code für Taste "1"
26
         Led = 1
27
         Waitms 200
28
         Led = 0
29
         Print #4 , "Taste 1 wurde gedrückt!"
30
      Case 50                                               'Das ist der ASCII Code für Taste "2"
31
      Led = 1
32
      Waitms 200
33
      Led = 0  
34
      Print #4 , "Taste 2 wurde gedrückt!"
35
      Case 51                                               'Das ist der ASCII Code für Taste "3"
36
         Print #4 , "Taste 3 wurde gedrückt!"
37
      Case 114                                              'Das ist der ASCII Code für Taste "r"
38
         Print #4 , "Reset..."
39
         Goto 0
40
   End Select
41
End If
42
Loop

Die LED soll mir nur zeigen wenn der mC einen Befehl empfangen hat.
Jedoch bekommt ich überhaupt keine Reaktion.
Kann mir jemand sagen was ich falsch mache ?

lg Dennis
Gast #1186611
Lesenswert?

Habe das bisher immer so gemacht wenn ich etwas auf dem PC ausgeben 
will. Mit dem Terminal Emulator in Bascom läuft das auch wunderbar, nur 
VB macht da nicht mit. Gehe daher mal davon aus das das Problem in 
meinem VB code liegt.
Gast #1186631
Lesenswert?

Ja das habe ich schon verstanden ich nenne den ja auch nur so mit :
1
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
2
Open "com4:" For Binary As #4                               'USB Buchse
Wie der eigentlich heißt oder bezeichnet wird ist doch eigentlich auch 
egal oder ??
Gast #1186820
Lesenswert?

Fat Tony, bei allem hier noch möglichem Respekt, aber dir ist nicht mehr 
zu helfen.....

Admin / Mod, bitte Thread als Beispiel für Begriffststutzigkeit und 
Lernresistenz archivieren und verlinken. Danke :-)
Persönliche Seite #1186828
Lesenswert?

Nun gut, der verwendete AVR hat tatsächlich vier serielle Schnittstellen 
(2560), und die BASCOM-Syntax wäre auch die richtige, wenn denn die 
verwendete Testplatine ihren USB-RS232-Wandler an der vierten des 2560 
betriebe:

http://avrhelp.mcselec.com/configcomx.htm

Das aber wissen wir nicht.

Also, Tony: Wie der USB-RS232-Wandler auf Deiner Platine mit dem AVR2560 
verbunden?
Gast #1186932
Lesenswert?

Wenn dein obiger VB-Code noch aktuell ist, tippe ich mal drauf, dass es 
daran liegt, dass du für die Befehle 0x01(SOH), 0x02(STX) und 0x03(ETX) 
sendet und nicht 0x31("1"), 0x32("2") und 0x33("3"). Oder andersrum 
gesagt:

Du erwartest im µC ASCII-Zeichen, und sendest Steuerzeichen.

Ralf
Gast #1186968
Lesenswert?

Hm ich ging davon aus das ich es als Dezimal eingeben muss und er es 
dann als Hex verschickt.
Aber wie dem auch sei , es geht beides nicht hab es eben mal 
ausprobiert.
Aber wo wir gerade bei dem Thema sind, was gibt mir den Inkey() zurück 
im mC ?
In der Notiz steht  case 49  'ASCII Code für Taste"1"
das passt doch auch nicht.
Gast #1187020
Lesenswert?

> Hm ich ging davon aus das...
Ab hier interessiert deine Antwort wahrscheinlich niemand mehr, weil dir 
garantiert irgendwann irgendwer sagt, dass du nicht von Annahmen 
ausgehen sollst, sondern von der Dokumentation. Das heisst, die 
FrameWork-Doku runterladen und installieren - sofern nicht bereits doch 
vorhanden - und dann nachlesen, was SerialPort.Write erwartet. 
Dezimal, Hexadezimal oder String.

> Aber wo wir gerade bei dem Thema sind, was gibt mir den Inkey() zurück
> im mC ?
Wo wir grad beim Thema sind: Dokumentation

Ich mein das nicht böse, ehrlich. Aber es muss dir klar sein, dass 
niemand für dich lesen wird, denn das kannst du selber. Nur so lernst 
du. Wenn du trotz mehrmaligem Lesen dann immer noch ein Problem hast, 
dann gehört das hierher, und nicht Fragen wie "Ich verwende dies und 
das, wie funktioniert es".

Ralf
Gast #1187022
Lesenswert?

Ach so, ganz vergessen:

> das ich es als Dezimal eingeben muss und er es dann als Hex verschickt.
Was bitte ist denn 1, 2, 3 als Hex? 0x01, 0x02, 0x03. Was du schicken 
müsstest, und was ich oben auch geschrieben habe, ist '1', '2' und '3', 
also 0x31, 0x32 und 0x33, was wiederum dem Dezimalwert aus deinem 
µC-Programm entspricht: 49, 50 und 51.

Ralf

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