PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation mit Visual Basic 2008 Programm nur einseitig



Björn
07.01.2009, 13:26
Hallo!

Ich versuche gerade meinen AVR über RS232 mit dem PC zu steuern. Dafür habe ich eine Anwendung in Visual Basic 2008 Express angefangen. Wenn ich Daten vom µC via Print "Text" an den PC schicke, kommen diese auch problemlos an.
Leider klappt es nicht in die andere Richtung. Das Programm sollte eigentlich den µC etwas an den PC senden lassen, sobald er Daten empfängt.
Ich habe mich dabei an dieses Tutorial gehalten: https://www.roboternetz.de/wissen/index.php/Windows_Programm_zum_Steuern_des_AVR%27s

Die Codes sehen so aus:

ATmega8:


$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600

Dim A As Byte

Do
A = Inkey()
If A > 0 Then
Print "Angekommen!"
End If
Loop

End


VB 2008 Express:


Option Explicit On

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort.Open()
End Sub

Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
SerialPort.Close()
End Sub

Private Sub DataTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataTimer.Tick
If SerialPort.BytesToRead > 0 Then
Do
TextBox1.AppendText(Chr(SerialPort.ReadByte))
TextBox1.ScrollToCaret()
If SerialPort.BytesToRead = 0 Then
Exit Do
End If
Loop
End If
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort.Write("r")
End Sub
End Class


Kann jemand einen Fehler entdecken?

Grüße, Björn

MeckPommER
07.01.2009, 14:31
Sorry, ich kenne mich mit VB6 besser aus mit 2008, deshalb nur ein wenig Raten von mir ... wo legst du baud, datenbits, stoppbits, etc. für die rs232 fest?

Gruß MeckPommER

P.S.: Sind vielleicht auch Hardware-Fehler denkbar? Ists eine eigene Schaltung?

Björn
07.01.2009, 14:36
Sorry, ich kenne mich mit VB6 besser aus mit 2008, deshalb nur ein wenig Raten von mir ... wo legst du baud, datenbits, stoppbits, etc. für die rs232 fest?

Gruß MeckPommER

P.S.: Sind vielleicht auch Hardware-Fehler denkbar? Ists eine eigene Schaltung?

Baud, Daten- und Stoppbits usw. werden über das Design Fenster eingestellt.
Die Werte sind:
BaudRate: 9600; DataBits: 8; Parity: None; StopBits: One.

Ja die Schaltung ist eine eigene also sind auch Hardware-Fehler denkbar. Nur das Senden vom µC zum PC funktioniert ja, deshalb wüsste ich nicht wo der Fehler sein könnte.

Danke schonmal!

Grüße, Björn

Björn
07.01.2009, 15:05
So ich habe mir jetzt nochmal die EXE-Datei von dem Tutorial heruntergeladen. Auch dort funktioniert nur der Empfang. Wenn ich etwas sende erhalte ich keine Antwort.
Das heißt der Fehler liegt entweder bei der Software im AVR oder es liegt ein Hardware-Problem vor. Aber Hardware-technisch wüsste ich nicht was dieses Problem hervorrufen könnte.
Weiß das jemand? ;)

Grüße, Björn

linux_80
07.01.2009, 15:12
Hi,

funktionerts denn mit einem normalen Terminal ?
Dann lässt sichs schon mal eingrenzen auf welcher Seite der Fehler liegt.

Björn
07.01.2009, 15:45
Hi,

funktionerts denn mit einem normalen Terminal ?
Dann lässt sichs schon mal eingrenzen auf welcher Seite der Fehler liegt.

Hm, auch im Terminal kann ich nur Empfangen und nicht Senden.

Grüße, Björn

Wsk8
07.01.2009, 16:30
Hallo,
habe das selbe Problem bei meinem alten PC. Kann nur was empfangen. Senden klappt bei mir auch nicht.

P.S. Bei meinem neuen habe ich keine Sub D 9 buchse. Was braucht man für usb wenns dort auch funkt.

mfg

Björn
07.01.2009, 16:32
Bei meinem neuen habe ich keine Sub D 9 buchse. Was braucht man für usb wenns dort auch funkt.

Da gibt es einen USB-Seriell Adapter. Z.B. bei Reichelt "USB2 SERIELL" für knapp 5€.

Grüße, Björn

holzi
07.01.2009, 17:18
Moin moin,
in dem VB 2008 Programm fehlt meiner Meinung nach einiges in der Sub Form1_Load. Z.B. Code nach dem folgenden Prizip
Me.myComPort.BaudRate = 9600
Me.myComPort.DataBits = 8
Me.myComPort.StopBits = IO.Ports.StopBits.One
Me.myComPort.Parity = IO.Ports.Parity.None
Me.myComPort.ReceivedBytesThreshold = 1
Schau Dir mal das Beispiel auf der folgenden Seite an. Dort kannst Du Dir auch den Beispielcode (der hervorragend kommentiert ist) herunter laden.

Peter

holzi
07.01.2009, 17:19
Jetz habe ich doch tatsächlich den Link vergessen. Hier ist er:

http://www.activevb.de/tipps/vbnettipps/tipp0071.html

Peter

Björn
07.01.2009, 18:37
Bei meinem neuen habe ich keine Sub D 9 buchse. Was braucht man für usb wenns dort auch funkt.

Da gibt es einen USB-Seriell Adapter. Z.B. bei Reichelt "USB2 SERIELL" für knapp 5€.

Grüße, Björn

Hmm... ich habe jetzt mal meinen Adapter rausgekramt. Da habe ich ein ganz seltsames Phänomen: Wenn ich den AVR im Sekundentakt etwas senden lasse kommen nur seltsame Zeichen im Terminal an. In dem Moment wo ich z.B. Fusebits auslese kommt der Text sauber an. Danach wieder nicht.
Das ganze passiert nur bei dem Adapter. Da ich aber später darauf angewiesen bin (mein Laptop hat keine serielle Schnittstelle) muss ich dieses Problem auch lösen...

Grüße, Björn

Netzman
08.01.2009, 03:44
hast du schon die rs232-leitungen vom pc-seitigen stecker bis zum controllerpin durchgemessen? gnd von pc mit µC schaltung verbunden? sauber geglättete versorgungsspannung?
betreibst du den avr mit einem externen quarz? fusebits? der interne takt macht bei seriellen verbindungen gerne probleme weil er nicht sonderlich genau ist.
versuch evtl. auch einen anderen quarz, ich hab mal einen erwischt der dezent nicht richtig war.
und auch wenns vielleicht nicht das problem löst, aber das einrichten der schnittstellenparameter per Config Com1 = ... kann auch hilfreich sein.

In dem Moment wo ich z.B. Fusebits auslese kommt der Text sauber an.
wie was? in dem moment in dem du fusebits ausliest ist der controller im programmiermodus (RESET = Low), da sendet er sicher nichts...

Björn
08.01.2009, 06:39
hast du schon die rs232-leitungen vom pc-seitigen stecker bis zum controllerpin durchgemessen? gnd von pc mit µC schaltung verbunden? sauber geglättete versorgungsspannung?
betreibst du den avr mit einem externen quarz? fusebits? der interne takt macht bei seriellen verbindungen gerne probleme weil er nicht sonderlich genau ist.

Ja, ich habe alles durchgemessen. Die Massen sind verbunden. Spannung kommt vom LM7805 mit Kondensator. Es ist ein externes Quarz (7,...). Fusebits sind wie im Anhang.



In dem Moment wo ich z.B. Fusebits auslese kommt der Text sauber an.
wie was? in dem moment in dem du fusebits ausliest ist der controller im programmiermodus (RESET = Low), da sendet er sicher nichts...
Dann muss es der Text sein den er unmittelbar danach sendet.

Grüße, Björn

//EDIT:

Mir ist gerade noch etwas aufgefallen. Der Pegelwandler ist ein Max232N. Allerdings sind scheinbar alle Max232 die ich von Reichelt bekommen habe die "N" Variante (obwohl ich immer den Max232 CPE bestellt habe) - also wird es wohl hoffentlich egal sein. Kondensatoren sind 1µF.
Vom Max zur Sub-D Buchse sind ja nur zwei Leitungen + Masse - oder müssten das bei "beidseitigem" Verkehr mehr sein?
Bin schon echt verunsichert :D

Grüße, Björn

Björn
08.01.2009, 13:37
Hmm...

Laut dem Datenblatt für den Max232N(!) http://www.datasheetcatalog.org/datasheet2/7/0ticokjwkstesioj9ks0775a9cwy.pdf
müsste der ganz anders beschaltet werden. Mich wundert z.B., die Kondensatoren an 2 und 6 beide gegen Masse geschaltet werden.
Jetzt bin ich endgültig verwirrt.

Grüße, Björn

Björn
08.01.2009, 14:10
Hallo nochmal!

Ich muss mich echt entschuldigen. Der Masse-Pin des Max232 war nicht richtig verbunden. Jetzt funktioniert es einwandfrei. Da bin ich echt nicht drauf gekommen, weil ich dachte er würde dann gar nicht laufen.

Vielen, vielen Dank für euer Bemühen!

Grüße, Björn