Επιστροφή στο Forum : VB 2008 επικοινωνια με uC PIC
καλησπερα,
παιδια εχει κανενας κανει κανενα προγραμμα που να στελνει και να λαμβανει δεδομενα μεσω καποιας πορτας ειτε σειριακης, ειναι USB-TO-SERIAL, και να λαμβανει τα δεδομενα με καποιο software στην Visual Basic 2008? να στελνει ας πουμε απο τον επεξεργαστη προς την VB καποιο μυνημα και το αναποδο.
Διάβασα το μύνημα σου, Θα προσπαθήσω να βρώ το αρχείο, αν και το θεωρώ λίγο δύσκολο επειδή έχει περάσει πολύς καιρός και έχω κάνει φορματ στον υπολογιστή.
Είσαι όμως τυχερός δίοτι είχα εκτυπώσει σε χαρτί τις οδηγίες που βρήκα στο internet και φαίνεται η διεύθυνση.
http://www.devx.com/dotnet/Article/31001/0
Με αυτό εγώ ξεκίνησα , ελπίζω να σε βοηθήσει.
tomas_17121
02-12-11, 20:29
Δεν ξέρω εαν καταλαβα καλα,αλλα εχω καποια προγραμματακια VB2011 επικοινωνια με pic18F4550 μεσω USB.
Εάν σε ενδιαφέρουνε πες μου να τα δημοσιευσω.
παιδια σας ευχαριστω και τους δυο για τις απαντησεις σας.
Θαναση και βεβαια ενδιαφερομαι.
Θωμα αυτο ειναι καλο.το ετρεξα. μα θελω να καταλαβω πως γινεται. Και βεβαια αν θελετε μπορουμε να το κανουμε βημα βημα ολοι μαζι. Με τα usb2serial που εχουμε σημερα μπορουμε να στελνουμε δεδομενα σε καποιο pc απο καποιον uC. θα με σκασει. δεν μπορει να ειναι τοσο δυσκολο.
δηλαδη παιδια με απλα λογια για αρχη θελω να κανω ενα προγραμματακι που να στελνω απο τον επεξεργαστη στον υπολογιστη hello και να μου το εμφανιζει απλα σε ενα Label. και για μενα αυτο μοιαζει βουνο.
δες σε ποιο com είναι συνδμένo to usb και κάντο με τη κλάση της σηριακής γίνεται νομίζω
Αυτό το βιβλίο (http://www.lvr.com/spc.htm) έχει μέσα βήμα βήμα τις οδηγίες για την επικοινωνία μικροελεγκτή με υπολογιστή και το πρόγραμμα σε visual basic.
Τελικά Βασίλη τι έγινε, είχες κάποια προόδο επί του θέματος
Θωμα ακομα τπτ. εχω κανει τον κωδικα για τον PIC να στελνει δεδομενα στον υπολογιστη και τωρα με την VB να παλεψω να τα διαβασω. Αλλα ακομα δεν καταφερα να ετοιμασω την σειριακη να μπορω αυτα που στελνω να τα διαβασω.
Οποιος θελεις να κανουμε μαζι την αρχη εδω μεσα σαν ενα μικρο project ετοιμος ειμαι :)
GeorgeVita
05-12-11, 22:06
Οποιος θέλει ...
Για αρχή γράφω ένα "σκονάκι για το διαγώνισμα" και όχι την πραγματική λύση γιατί πέρασαν 10+ χρόνια από τότε που έγραφα σε VB, οπότε υπομονή! Ελπίζω κάποιος πιο φρέσκος να συνεχίσει τα σχόλια στην σωστή κατεύθυνση.
Για να στείλεις δεδομένα από ένα μC στο PC, καλό είναι να τα φτιάξεις "πακέτα με header" γνωρίζοντας από πριν το μέγεθος. Στο παράδειγμά μου θεωρώ ότι θα στείλεις 10 χαρακτήρες ASCII (00h-FFh) μετά από το header $#, δηλαδή αν θέλεις να στείλεις την πληροφορία "1234567890" η σειριακή έξοδος του μC θα δώσει "$#1234567890".
Δεν γνωρίζω την ικανότητά σου σε προγραμματισμό VB. Αν είσαι "αρχάριος", ανέβασε λίγο γνωστικό επίπεδο πριν ασχοληθείς με την σειριακή επικοινωνία. Θεωρώντας ότι κατέχεις τα βασικά και έχεις δημιουργήσει την γενική φόρμα (λ.χ. xyzForm). Θα προσθέσεις το module MSCOMM32.OCX (σειριακή επικοινωνία) και θα έχεις δημιουργήσει ένα συμβάν για να τρέξει η ρουτίνα του παραδείγματος με κουμπί για "click" όπως έχω εγώ [τρέχει το Command1_Click()] ή θα βάλεις ένα timer να trig-άρει αυτόματα.
Για να είσαι σίγουρος ότι λειτουργεί ο κορμός του προγράμματος (ή μια συγκεκριμένη ρουτίνα), βάλε κάπου ένα αθροιστή τον οποίο θα τυπώνεις σε ένα textbox με το πέρασμα από το σημείο ελέγχου. Εφόσον αυτά λειτουργήσουν, τότε θα προσθέσεις τη διαδικασία ανάγνωσης σειριακής πόρτας.
Ο κώδικας παρακάτω ασχολείται με το να λαμβάνει όλους τους χαρακτήρες της σειριακής σε string, ψάχνει για το header $# και εφόσον έρθουν συνολικά 10+2=12 χαρακτήρες τους δίνει για εμφάνιση στο textbox "showRXtext". Στις παραμέτρους της "MSCommLib.MSComm" έλεγξε ότι έχεις DTREnable=0 (φαίνεται ως 1η παράγραφος στο παράδειγμα). Μετά φαίνεται ο ορισμός του textbox "showRXtext" (εσύ θα τα ρυθμίσεις στο γραφικό περιβάλλον από τις επιλογές/μενού).
Αρχικοποίηση της σειριακής γίνεται στο "φόρτωμα" της φόρμας (baudrate, κ.λπ. και άνοιγμα πόρτας) ενώ με το τέλος της φόρμας "κλείνει" η σειριακή πόρτα.
Begin MSCommLib.MSComm MSComm1
DTREnable = 0 'Fals
End
Begin VB.TextBox showRXtext
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 161
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 2040
TabIndex = 2
Text = "----------"
Top = 0
Width = 1215
End
Private Sub Command1_Click()
Dim RxDATA As String
Dim HeaderPointer, NewData As Integer
showRXtext.Refresh
Do
NewData = 0
Do
DoEvents
RxDATA = RxDATA & MSComm1.Input
HeaderPointer = InStr(RxDATA, "$#")
If HeaderPointer > 0 And Len(RxDATA) > HeaderPointer + 12 Then NewData = 1
Loop Until NewData = 1
RxDATA = Mid(RxDATA, HeaderPointer, 50)
If NewData = 1 Then
showRXtext.Text = Mid(RxDATA, 3, 10)
RxDATA = " "
showRXtext.Refresh
NewData = 0
End If
Loop
End Sub
Private Sub Form_Load()
xyzForm.Cls
xyzForm.Refresh
' SetUP COM1, 9600 baud, no parity, 8 data, 1 stop, read ALL BUFFER, open port
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub
Private Sub Form_Terminate()
MSComm1.PortOpen = False
End
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End
End Sub
Επαναλαμβάνω ότι δεν θυμάμαι αρκετά για να λύσεις το πρόβλημα (ούτε έχω εγκατεστημένη VB)!
Απλά "δίνω κλώτσο να γυρίσει, παραμύθι ν' αρχινίσει"...
G
tomas_17121
05-12-11, 23:07
Γεια σας παιδια,
δεν ξερω εαν βοηθαει,για αρχη παραθετω τον κωδικα για τον pic ,o οποιος θελει επισης να γινει compile με το αναλογο Descriptor το οποιο πρεπει να το βαλεις μεσα στο folder με τον κωδικα.
program USB_HID_test
include USBdsc
dim
k, i, ch as byte
userWR_buffer as byte[64] absolute 0x500
userRD_buffer as byte[64] absolute 0x540
'************************************************* *****************************
' Main Interrupt Routine
'************************************************* *****************************
sub procedure interrupt
HID_InterruptProc
end sub
'************************************************* *****************************
'************************************************* *****************************
' Initialization Routine
'************************************************* *****************************
sub procedure Init_Main
'--------------------------------------
' Disable interrupts
'--------------------------------------
INTCON = 0 ' Disable GIE, PEIE, TMR0IE,INT0IE,RBIE
INTCON2 = 0xF5
INTCON3 = 0xC0
RCON.IPEN = 0 ' Disable Priority Levels on interrupts
PIE1 = 0
PIE2 = 0
PIR1 = 0
PIR2 = 0
ADCON1 = ADCON1 or 0x0F ' Configure all ports with analog sub function as digital
'--------------------------------------
' Ports Configuration
'--------------------------------------
TRISA = 0x00 '0XFF
TRISB = 0xFF
TRISC = 0xFF
TRISD = 0
TRISE = 0x07
LATA = 0
LATB = 0
LATC = 0
LATD = 0
LATE = 0
end sub
'************************************************* *****************************
' Main Program Routine
'************************************************* *****************************
main:
Init_Main()
HID_Enable(@userRD_buffer, @userWR_buffer)
Delay_ms(1000)
Delay_ms(1000)
while true
k = HID_Read() 'diavazei to buffer j to dinei sto k
i = 0
while i < k
if userRD_buffer[0]=65 then lata.2=1
end if
if userRD_buffer[0]=66 then lata.2=0
end if
if userRD_buffer[0]=32 then lata.3=1
end if
if userRD_buffer[0]=27 then porta.3=0
end if
ch = userRD_buffer[0]
userWR_buffer[0] = ch '=portb
HID_Write(@userWR_buffer, 1)
inc(i)
wend
wend
HID_Disable()
end.
Τωρα με αυτον τον κωδικα μπορεις να στειλεις απο VB σε AScii πχ 65 και να αναψεις το porta.2-
Ουσιαστικα ο pic γεμιζει καποιες θεσεις μνημης (64) και με VB πηγαινεις στις αντιστοιχες θεσεις κ τις διαβαζεις κ το αντιστροφο.
Στο επομενο post μου θα στειλω κ τον κωδικα της VB.και μπορω να σου στειλω κ ολο το project με το οποιο εχω ασχοληθει και αφορα ενα θερμοκηπιο το οποιο εχει εναν pic18f4550 συνδεδεμενο με δυο ανεμιστηρες,μια αντλια για ποτισμα στα outputs του pic και τρεις sensors (δυο θερμοκρασιας και μια φωτοαντισταση) στα inputs ,o pic usb σε ενα laptopaki με wifi το οποιο τρεχει VB2011 και ελεγχει κ απεικονιζει τις τιμες απο τα sensors.ολο αυτο το ελεγχω μεσω internet με TeamViewer και απο κινητο, αλλα τωρα ειμαι στην φαση που προσπαθω να το ελεγχω μεσω ενος client κ εχω προχωρησει με το Gtalk(jabber) κ εχω καει γενικα αλλα ενω μπορω να το ελεγχω κατα καποιο τροπο δεν το εχω ολοκληρωσει ακομα.ολο αυτο για να μπορει καποιος να το ελεγχει απο παντου χωρις ολη αυτη την φλυαρια με TeamViewr ktl.Γενικα εννοειτε οποιος εχει ιδεες πανω σε αυτο το θεμα ειναι ευπροσδεκτες με χαρα!
αυτα για την ωρα ,οπως ειπα θα στειλω κ το κομματι της visual κ για Read και για Write.(το ιδιο κ για τον pic -ο κωδικας που δειχνω εχει μονο το Read του pic.
αυτο το site με ειχε βοηθησει πολυ.
http://www.lvr.com/hidpage.htm
Γιωργο καταρχας σε ευχαριστω.
οι γνωσεις μου ειναι οι απλες. δλδ κομπιουτερακι και τετοια απλα προγραμματα.
το MSCOMM32.OCX εγω γτ δεν το βρισκω πουθενα μεσα στην VB2008 μου? μου εχει πανω το toolbox .NET framework componets. αλλα αυτο δεν το βρισκω μεσα. εκει μεσα δεν επρεπε να ηταν?
βεβαια η VB2008 εχει το serial port tool απο μονη της. αυτο δεν μας κανει την ζωη πιο ευκολη?
Θωμα και εσενα σε ευχαριστω.
Αλλα νομιζω θα βοηθουσε αν εκανες την υπερβαση :lool:
να ριξεις και κανα σχολιο διπλα στις γραμμες για να καταλαβουμε τι κανει τι. οχι απλα να κανουμε copy paste αλλα να καταλαβουμε και τι εχει που.
GeorgeVita
05-12-11, 23:16
... το MSCOMM32.OCX εγω γτ δεν το βρισκω πουθενα μεσα στην VB2008 μου?
Η δική μου "γνώση" είναι παλιότερη, ίσως στη δική σου έκδοση να είναι ενσωματωμένο.
Θα μπορούσες να δοκιμάσεις πρώτα επικοινωνία PC με PC χρησιμοποιώντας hyperterminal προς πρόγραμμα VB.
Κοίτα και το παράδειγμα του Θανάση και συνοψίζεις.
G
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If SerialPort1.IsOpen = True Then
MsgBox("Port is allready open")
Else
SerialPort1.Open()
TextBox1.Text = "Port1 Open"
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If SerialPort1.IsOpen = False Then
MsgBox("Port is allready close")
Else
SerialPort1.Close()
End If
TextBox2.Text = ""
TextBox1.Text = "Port1 Closed"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
TextBox2.Text = ""
Delay(5)
SerialPort1.Write("aaa")
TextBox2.Text = "Message send"
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
End
End Sub
End Class
Παιδια εχω κανει αυτο.
αλλα ακομα δεν το εχω δοκιμασει. πως σας φαινετε?
Πρέπει να αρχικοποιήσεις την θύρα για parity bits, ταχύτητα κτλπ...
το κανω απο το σχηματακι της σειριακης που περνω στη φορμα μου.
electroman
06-12-11, 02:29
Γειά σας!
Βασίλη, η serial έχει ένα event (δεν το θυμάμαι... dataReceived????? κάπως έτσι) που το ενεργοποιείς εύκολα από το GUI της .NET. Αυτό μπορείς να το σετάρεις να κτυπήσει όταν γεμίσει ένα buffer που εσύ καθορίζεις το μέγεθος...
Ακόμα πιο εύκολος τρόπος είναι να καλέσεις την serialport.ReadLine() η οποία επιστρέφει όλα τα data μέχρι να της στείλεις carriage return.
Αν θες απλά το data σου να είναι text τότε πολύ απλά πρέπει να στέλνεις char (κοίτα τον κώδικα (http://psychoul.com/electronics/serial-interface-between-pic-and-pc-pr4)) απο την serial του PIC.
Καλή συνέχεια!
Δημητρη (η καποιος αλλος) μπορεις να μου πεις λιγο περισσοτερα για αυτο με το dataReceived? και το event?
εγω προσπαθω να εχω ενα textbox και μολις στειλει κατι ο επεξεργαστης να το εμφανιζει στο textbox η VisualBasic χωρις να παταω εγω καποιο πληκτρο και να πηγαινει να διαβαζει τον Inbuffer.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.