SerialPort & Visual Studio 2008

Gast #1186525
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
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 ?
Gast
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
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
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.
Gast
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
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
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
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
> 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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.