PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : myAVR Board 2 PLUS USB mit Visual Basic 2005 visualisieren



Caligula
16.08.2008, 00:27
Hallo,
ich versuche schon seid geraumer Zeit VB mit dem uC kommunizieren zu lassen, nur es funktioniert einfach nicht. Bin echt schon etwas am verzweifeln.

Als Hardware benutze ich
http://www.myavr.de/shop/article.php?artDataID=41

zum Proggen Bascom
zum visualisieren Visual Basic 2005 pro

Habe den aktuellsten Usb-treiber drauf, welcher einen virtuellen com 4 Port eingerrichtet hat.

Würde mich echt freuen, wenn jmd schon mal auf diesem Wege einen Erfolg verzeichnen konnte und vielleicht mal ein einfaches kommentiertes Beispiel Veröffentlichen könnte was auch auf anhieb funktioniert.

Als "einfaches" Beispiel stelle ich mit eine Windowsanwendung mit Button und Textbox vor. Mit dem Button kann man eine Led anschalten und über die Textbox wird ein Analogwert eingelesen und angezeigt.

gruß Cali :)

holzi
16.08.2008, 07:54
Guten morgen Cali,
zeig hier doch mal bitte Deinen Code. Vor allem das Öffnen Deiner COMM4 und das CommEvent.

Peter

Caligula
16.08.2008, 09:07
Guten morgen holzi,

Der Bascom Code zum obrigen Beispiel sieht so aus.


$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 30
$framesize = 60

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cursor Off
Cls

Ddrb = &B00000001 'Led Ausgang

Dim Messvolt As Word
Dim Volt As Single
Dim Volt_a As String * 10 'Dieser wert soll in VB angezeigt werden

Const Faktor = 0.0048828125

Do

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Messvolt = Getadc(0)

Volt = Messvolt * Faktor

Volt_a = Fusing(volt , "#.#")
If Len(volt_a) = 3 Then
Volt_a = " " + Volt_a + "V"
Else
Volt_a = Volt_a + "V"
End If

Locate 1 , 1
Lcd Volt_a

Waitms 250

Loop

End


Mit VB habe ich zwar schon einmal visualisiert, das war aber zum einen eine SPS welche ich über ein Steuerelement eines OPC-Servers agesprochen habe. Deshalb habe ich auch kein schimmer wie das in VB Funktionieren könnte.

gruß Cali :)

holzi
16.08.2008, 18:04
Hi Caligula,
schau Dir mal das Tutorial von der folgenden Seite an.

http://www.activevb.de/tutorials/tut_com/com.html

Das ist zwar für VB6, aber es kann einfach umgesetzt werden.

Peter

Caligula
16.08.2008, 20:41
huhu holzi,

danke für den Tip aber diese Seite hatte ich auch schon ergoogelt, gelesen und getestet. Leider ohne Erfolg.

Glaube ohne ein richtiges beispiel bekomme ich das nie hin :(

gruß Cali :)

holzi
17.08.2008, 07:53
Guten morgen,
ich weiss wirklich nicht, wo Dein Problem ist. Nach dem folgenden Prinzip musst Du vorgehen:

Schnittstelle öffnen: SerialPort1.Open()

Daten senden: SerialPort1.Write("Hallo")

Daten lesen: Wert = SerialPort1.ReadLine (Dim Wert As String)

Hier ein Link zu diesem Thema, denn da hatte auch jemand das Problem mit der seriellen Schnittstelle unter VB 2005.

https://www.mikrocontroller.net/topic/49847

Ich hoffe, Du kommst nun weiter.

mfg Peter

Caligula
17.08.2008, 10:43
Huhu,

Habe mir das ganze mal angeschaut jetzt kommt wieder was neues hinzu das "SerialPort"-Element.

Dieses Element lässt sich über die Eigenschaften konfigurieren.

Jetzt bleibt nur noch die Frage offen, wie ich den Port öffne und und sinnvoll mit dem MC rede. Glaube das der MC mit einem "Hallo" garnix anfangen kann.

-> wo und was muss ich jetzt in diesen Code tippen, damit der "volt_a"-String aus dem MC ausgelesen wird und in der Textbox angezeigt wird.



Public Class Form1

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

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

End Sub
End Class


gruß cali :)

peterfido
17.08.2008, 21:55
Das DataArrived (oder Received(weiß grad nicht genau)) Ereignis wird bei mir nur ausgelöst, wenn der Empfangspuffer voll ist. Ich frage bei sowas per Timer regelmäßig den Füllstand des Puffers ab und wenn der >0 ist, dann lese ich ihn aus. Allerdings progge ich in VB6. VB2005 nehme ich nur notgedrungen, wenn ich was fürs Handy progge...

Willa
17.08.2008, 22:23
Öhm, wieso probierst du nicht einfach mein Beispielprogramm im Wiki...?
https://www.roboternetz.de/wissen/index.php/Windows_Programm_zum_Steuern_des_AVR%27s

Caligula
18.08.2008, 16:42
Huhu Willa,
hab das Programm mal angetestet, bin wie folgt vorgegeangen.



$regfile = "m8def.dat"
$crystal = 1000000


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"
Sound Portd.7 , 400 , 450
Print "Taste 1 wurde gedrückt!"
Case 50 'Das ist der ASCII Code für Taste "2"
Sound Portd.7 , 400 , 550
Print "Taste 2 wurde gedrückt!"
Case 51 'Das ist der ASCII Code für Taste "3"
Sound Portd.7 , 400 , 650
Print "Taste 3 wurde gedrückt!"
Case 114 'Das ist der ASCII Code für Taste "r"
Print "Reset..."
Goto 0
End Select
End If
Loop


mit Bascom in den MC geschrieben und Bacom geschlossen.
Portd.7 mit einem summer verbunden.
Dein Beispielprogramm gestartet und "com4" gewählt und "port öffnen" Taste gedrückt.

Wenn ich jetzt die 4 "Bedientaster" betätige passiert garnix. :(
Es scheint aber ein Signal Auf der MySmartUsb-Platine anzukommen. (Kurzes aufleuchten der roten Led bei Tasterdruck)

gruß Cali :)

Willa
18.08.2008, 17:53
Was hast du denn für eine Baudrate eingestellt bei deinem MC? Ich glaube in meinem Programm ist 9600 baud eingestellt, allerdings bin ich mir da nicht 100% sicher..... Sonst kannst du das ja schnell nachprogrammieren, ist ja im artikel erklärt wie's geht.

edit: klappt eigentlich die Kommunikation PC <--> MC mit deinem Terminalprogramm?

Caligula
18.08.2008, 20:25
Hallo,
mit Bascom progge ich mit 19200 also müsste 9600 baud kein prob sein.

Wie gesagt ich benutze diese hardware.
http://www.myavr.de/shop/article.php?artDataID=41
Quasi ein Experimentierboard mit Aufgesteckter "Usb-schnittstellenplatine".

Wenn ich die Bedienbuttons betätige wird offensichtlich ein Signal an die "Usb-Schnittstellenplatine" gesendet (Led leuchtet kurz auf).
Aber das war es dann auch schon
-> kein hupen
-> keine textmeldung im vb-programm

Ist das Bascom Programm so richtig?
Muss ich sonst nochwas beachten?

gruß cali :)

Willa
18.08.2008, 20:54
Also soweit ich mich richtig erinnere (hab schon länger nix mehr mit Bascom gemacht) musst du doch dem MC sagen mit welcher Baudrate er "zuhören/erzählen" soll.


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 16000000
$baud = 9600

Also z.B. so. Musst du halt für dich anpassen.

Inkoknito
18.08.2008, 21:52
hy,

hast du auch auf dem smart usb den dip-schalter so verstellt das es auf rs232 eingestellt ist?

mfg

Caligula
18.08.2008, 22:10
Hallo,
Hab mein Bascom Code mal abgeändert


$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 30
$framesize = 60
$baud = 9600

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"
Sound Portd.7 , 400 , 450
Print "Taste 1 wurde gedrückt!"
Case 50 'Das ist der ASCII Code für Taste "2"
Sound Portd.7 , 400 , 550
Print "Taste 2 wurde gedrückt!"
Case 51 'Das ist der ASCII Code für Taste "3"
Sound Portd.7 , 400 , 650
Print "Taste 3 wurde gedrückt!"
Case 114 'Das ist der ASCII Code für Taste "r"
Print "Reset..."
Goto 0
End Select
End If
Loop


Immernoch das selbe Ergebnis :(

@t inkoknito

Dip 1 + 2 = 0n 3 + 4 =Off + externe Spannungsquelle dran.

gruß Cali :)

Willa
18.08.2008, 22:27
Um festzustellen wo das Problem liegt teste doch mal bitte die Kommunikation mit nem Terminal Programm oder nem Testprogramm das bei deinem Board dabei ist. Da muss es doch irgendwas geben. Dein MC läuft auch tatsächlich mit 1 MHz? Fusebits richtig gesetzt..? Sonst müssen dir mal Leute helfen die das gleiche Board haben, ich kenn mich mit dem Teil gar nicht aus.

holzi
19.08.2008, 08:23
Guten morgen,
um einmal zu sehen, was da über die Com-Schnittstelle gesendet bzw. empfangen wird, kann ich das Programm 232Analyzer nur empfehlen. Damit kann dann eine definitive Aussage gemacht werden, ob die Com funktioniert und auch was für Daten da gesendet werden. Es kann damit gedebuggt werden, also alles, um die Fehlerquelle zu finden. Eine Freeware-Version ist unter www.232analyzer.com zu bekommen.
Ich würde damit bei diesem Problem eine Analyse machen und dann das Ergebniss hier veröffentlichen.

Peter

Caligula
19.08.2008, 18:00
huhu hab mir das proggi mal gesaugt und installiert.

-> port4 eingestellt
-> connectbutton gedrückt
-> playtaste gedrückt



19.08.2008 17:55:22
COM port: 4; Baud rate: 19200bps; Parity: Even; Data bit: 8; Stop bit: 1; Handshaking: None
Communication mode: Debugging / Simulating
TX data format: Dec; RX data format: Dec

* * * * * * * * * * COM Port Opened * * * * * * * * * *

Data sent: 065 084 073 049 013 010
Data sent: 065 084 073 050 013 010
Data sent: 065 084 073 051 013 010
Data sent: 065 084 073 052 013 010
Data sent: 065 084 073 053 013 010
Data sent: 065 084 073 054 013 010
Data sent: 065 084 073 055 013 010
Data sent: 065 084 073 056 013 010


das war das Ergebnis.

gruß Cali :)

Willa
19.08.2008, 19:23
Anscheinend läuft irgendwas bei dir mit 19200 Baud.....? Wenn dem so ist dann funktioniert das nicht mit meinem Programm, das ist auf 9600 baud ausgelegt. Also einfach selber noch mal nach der ANleitung programmieren.
Könntest du mal was zu dem Terminalprogramm sagen.....?!? Funktioniert eine Datenübertragung PC <--> µC ohne diesen ganzen Visualbasic kram???
sorry für das fett schreiben, aber du ignorierst diese wichtige und "alles entscheidende" frage permanent

p.s.: Wieso wird denn "ATI" gesendet bevor die Zahl kommt...?

Caligula
19.08.2008, 21:59
HuHu,
ich feiere grade mein erstes Erfolgserlebinis in sachen Kommunikation.
MC <-> Computer.

Ist zwar etwas komisch aber nun Funktioniert es. Habe den externen Quarz freigefused. -> rennt er jetzt mit 3686400 anstelle von den internen 1000000. Habe dies im Bascom Code abgeändert.



$regfile = "m8def.dat"
$crystal = 3686400
$hwstack = 40
$swstack = 30
$framesize = 60
$baud = 9600

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"
Sound Portd.7 , 400 , 450
Print "Taste 1 wurde gedrückt!"
Case 50 'Das ist der ASCII Code für Taste "2"
Sound Portd.7 , 400 , 550
Print "Taste 2 wurde gedrückt!"
Case 51 'Das ist der ASCII Code für Taste "3"
Sound Portd.7 , 400 , 650
Print "Taste 3 wurde gedrückt!"
Case 114 'Das ist der ASCII Code für Taste "r"
Print "Reset..."
Goto 0
End Select
End If
Loop


Es erklingen 3 verschiedene Töne bei den Buttons und es gibt eine Textanzeige im Vb-Programm.



Taste 1 wurde gedrückt!
Taste 2 wurde gedrückt!
Taste 3 wurde gedrückt!
Reset...
Š


Habe zum Spass jetzt auch nochmal das rs232 Prog laufen lassen und siehe da.



19.08.2008 21:42:14
COM port: 4; Baud rate: 9600bps; Parity: Even; Data bit: 8; Stop bit: 1; Handshaking: None
Communication mode: Debugging / Simulating
TX data format: Dec; RX data format: Dec

* * * * * * * * * * COM Port Opened * * * * * * * * * *

Data sent: 065 084 073 049 013 010
Data sent: 065 084 073 050 013 010
Data received: 084 097 115 063 063 032 049 032 063 117 063 100 063 032 103 063 100 063 063 063 107 063 063 013 063
Data sent: 065 084 073 051 013 010
Data sent: 065 084 073 052 013 010
Data received: 084 097 115 063 063 032 063 032 063 117 063 100 063 032 103 063 100 063 063 063 107 063 063 013 063
Data sent: 065 084 073 053 013 010
Data sent: 065 084 073 054 013 010
Data sent: 065 084 073 055 013 010
Data sent: 065 084 073 056 013 010


Nun zum Kleingedruckten:
- Zum Terminalprogramm kann ich dir leider nicht viel sagen ist das erste was ich benutzt habe. Glaube holzi ist da der bessere Ansprechpartner.
- PC <-> MC scheint jetzt zu funktionieren mit sowie auch ohne den VB-Kram.

gruß Cali :)

holzi
20.08.2008, 07:55
Guten morgen,
dieser RS232-Analyzer hat mir auch schon sehr viel geholfen. Na klar können von diesem Programm aus auch Strings an den uC gesendet werden. In Dez, Hex , Oct, Bin und als ASCII. Es könnnen Checksummen für beide Richtungen erzeugt bzw. simuliert werden und vieles mehr. Mit diesem Programm fange ich immer als erstes an, wenn ich mein uC-Programm testen will.

Tschuesss Peter