mikrocontroller.net

Forum: PC-Programmierung SerialPort & Visual Studio 2008


Autor: Fat Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
 Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Me.InitializeComponent()
        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
                txtAnzeige.AppendText(Chr(SerialPort1.ReadByte))
                txtAnzeige.ScrollToCaret()
                If SerialPort1.BytesToRead = 0 Then
                    Exit Do
                End If
            Loop
        End If
    End Sub

End Class

Und in BascomAVR:
$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 Pine.5 = Input
Usb Alias Pine.5                                            'Ist 1 wenn USB angeschlossen

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

Do
A = Inkey()
If A > 0 Then
    Select Case A
      Case 49                                               'Das ist der ASCII Code für Taste "1"
         Led = 1
         Waitms 200
         Led = 0
         Print #4 , "Taste 1 wurde gedrückt!"
      Case 50                                               'Das ist der ASCII Code für Taste "2"
      Led = 1
      Waitms 200
      Led = 0  
      Print #4 , "Taste 2 wurde gedrückt!"
      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
   End Select
End If
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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso denn COM4 beim uC ?? Versuchs mal mit Com1.....

Autor: Fat Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fat Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal im Klartext:

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

Autor: Fat Tony (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fat Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tatsächlich 4 serielle. Ups.

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

:-)

Autor: Fat Tony (Gast)
Datum:

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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fat Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fat Tony (Gast)
Datum:

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

Autor: Avr Nix (avrnix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaue mal dir : http://www.cs.utk.edu/~pham/ascii_table.jpg

Dez und Hex

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wieso ist bei dem mC 0x31 = 49 ?

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.