Forum: PC-Programmierung SerialPort & Visual Studio 2008


von Fat Tony (Gast)


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

von Dennis (Gast)


Lesenswert?

Wieso denn COM4 beim uC ?? Versuchs mal mit Com1.....

von Fat Tony (Gast)


Lesenswert?

Das hat mein Geräte-Manager selber festgelegt als ich die Treiber für 
mein mC Board installiert habe.
Das sollte doch nicht das Problem sein oder ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

COM4 ist die Bezeichnung der seriellen Schnittstelle am PC.
Dein Bascom-Programm aber läuft auf dem µC, und der hat keinen 
Schnittstelle namens COM4.

von Fat Tony (Gast)


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.

von Dennis (Gast)


Lesenswert?

Nochmal im Klartext:

Dein uC HAT KEIN COM4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

von Fat Tony (Gast)


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 ??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Open "com4:" For Binary As #4                               'USB Buchse
> Wie der eigentlich heißt oder bezeichnet wird ist doch
> eigentlich auch egal oder ??

NEIN, das ist es NICHT. Lies Dir die Dokumentation Deines 
Basic-Compilers durch, die Namen, die dort die seriellen Schnittstellen 
haben, haben einen SINN.

von Fat Tony (Gast)


Lesenswert?

Ja das stammt ja aus einem Beispielprogramm das auf der vom Hersteller 
beigelegten CD war.
Und das senden der Daten zum PC geht ja auch, zumindest mit dem Terminal 
Emulator.

von Dennis (Gast)


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 :-)

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Dennis (Gast)


Lesenswert?

Tatsächlich 4 serielle. Ups.

Dann nehme ich alles zurück und behaupte das Gegenteil!

:-)

von Fat Tony (Gast)


Lesenswert?

Muss ich später mal raus suchen.
Aber das Passt schon so.
Bin mir recht sicher das das Prblemm in VB liegt.

von Ralf (Gast)


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

von Fat Tony (Gast)


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.

von Ralf (Gast)


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

von Ralf (Gast)


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

von Fat Tony (Gast)


Lesenswert?

Ja hab mich verschrieben meine ja als ASCII.
Wieso ist bei dem mC 0x31 = 49 ?

von Avr N. (avrnix) Benutzerseite


Lesenswert?

Schaue mal dir : http://www.cs.utk.edu/~pham/ascii_table.jpg

Dez und Hex

von STK500-Besitzer (Gast)


Lesenswert?

>Wieso ist bei dem mC 0x31 = 49 ?

0x31 ist die hexadezimale Schreibweise von 49 (soll jetzt mal die 
geläufige dezimale Schreibweise sein).

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.