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 :)
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 :)
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 :)
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...
Ö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 :)
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 :)
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 :)
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.
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 :)
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 :)
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.