PDA

Επιστροφή στο Forum : VB 2008 επικοινωνια με uC PIC



billtech
02-12-11, 19:15
καλησπερα,
παιδια εχει κανενας κανει κανενα προγραμμα που να στελνει και να λαμβανει δεδομενα μεσω καποιας πορτας ειτε σειριακης, ειναι USB-TO-SERIAL, και να λαμβανει τα δεδομενα με καποιο software στην Visual Basic 2008? να στελνει ας πουμε απο τον επεξεργαστη προς την VB καποιο μυνημα και το αναποδο.

BOOMER
02-12-11, 20:22
Διάβασα το μύνημα σου, Θα προσπαθήσω να βρώ το αρχείο, αν και το θεωρώ λίγο δύσκολο επειδή έχει περάσει πολύς καιρός και έχω κάνει φορματ στον υπολογιστή.

Είσαι όμως τυχερός δίοτι είχα εκτυπώσει σε χαρτί τις οδηγίες που βρήκα στο internet και φαίνεται η διεύθυνση.

http://www.devx.com/dotnet/Article/31001/0

Με αυτό εγώ ξεκίνησα , ελπίζω να σε βοηθήσει.

tomas_17121
02-12-11, 20:29
Δεν ξέρω εαν καταλαβα καλα,αλλα εχω καποια προγραμματακια VB2011 επικοινωνια με pic18F4550 μεσω USB.
Εάν σε ενδιαφέρουνε πες μου να τα δημοσιευσω.

billtech
02-12-11, 21:13
παιδια σας ευχαριστω και τους δυο για τις απαντησεις σας.
Θαναση και βεβαια ενδιαφερομαι.
Θωμα αυτο ειναι καλο.το ετρεξα. μα θελω να καταλαβω πως γινεται. Και βεβαια αν θελετε μπορουμε να το κανουμε βημα βημα ολοι μαζι. Με τα usb2serial που εχουμε σημερα μπορουμε να στελνουμε δεδομενα σε καποιο pc απο καποιον uC. θα με σκασει. δεν μπορει να ειναι τοσο δυσκολο.

billtech
03-12-11, 20:14
δηλαδη παιδια με απλα λογια για αρχη θελω να κανω ενα προγραμματακι που να στελνω απο τον επεξεργαστη στον υπολογιστη hello και να μου το εμφανιζει απλα σε ενα Label. και για μενα αυτο μοιαζει βουνο.

picdev
03-12-11, 21:06
δες σε ποιο com είναι συνδμένo to usb και κάντο με τη κλάση της σηριακής γίνεται νομίζω

georgz
03-12-11, 21:49
Αυτό το βιβλίο (http://www.lvr.com/spc.htm) έχει μέσα βήμα βήμα τις οδηγίες για την επικοινωνία μικροελεγκτή με υπολογιστή και το πρόγραμμα σε visual basic.

BOOMER
05-12-11, 14:25
Τελικά Βασίλη τι έγινε, είχες κάποια προόδο επί του θέματος

billtech
05-12-11, 19:32
Θωμα ακομα τπτ. εχω κανει τον κωδικα για τον 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

billtech
05-12-11, 23:07
Γιωργο καταρχας σε ευχαριστω.
οι γνωσεις μου ειναι οι απλες. δλδ κομπιουτερακι και τετοια απλα προγραμματα.
το MSCOMM32.OCX εγω γτ δεν το βρισκω πουθενα μεσα στην VB2008 μου? μου εχει πανω το toolbox .NET framework componets. αλλα αυτο δεν το βρισκω μεσα. εκει μεσα δεν επρεπε να ηταν?
βεβαια η VB2008 εχει το serial port tool απο μονη της. αυτο δεν μας κανει την ζωη πιο ευκολη?

billtech
05-12-11, 23:12
Θωμα και εσενα σε ευχαριστω.
Αλλα νομιζω θα βοηθουσε αν εκανες την υπερβαση :lool:
να ριξεις και κανα σχολιο διπλα στις γραμμες για να καταλαβουμε τι κανει τι. οχι απλα να κανουμε copy paste αλλα να καταλαβουμε και τι εχει που.

GeorgeVita
05-12-11, 23:16
... το MSCOMM32.OCX εγω γτ δεν το βρισκω πουθενα μεσα στην VB2008 μου?
Η δική μου "γνώση" είναι παλιότερη, ίσως στη δική σου έκδοση να είναι ενσωματωμένο.
Θα μπορούσες να δοκιμάσεις πρώτα επικοινωνία PC με PC χρησιμοποιώντας hyperterminal προς πρόγραμμα VB.
Κοίτα και το παράδειγμα του Θανάση και συνοψίζεις.
G

billtech
06-12-11, 00:10
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



Παιδια εχω κανει αυτο.
αλλα ακομα δεν το εχω δοκιμασει. πως σας φαινετε?

georgz
06-12-11, 00:48
Πρέπει να αρχικοποιήσεις την θύρα για parity bits, ταχύτητα κτλπ...

billtech
06-12-11, 00:58
το κανω απο το σχηματακι της σειριακης που περνω στη φορμα μου.

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.

Καλή συνέχεια!

billtech
22-12-11, 13:07
Δημητρη (η καποιος αλλος) μπορεις να μου πεις λιγο περισσοτερα για αυτο με το dataReceived? και το event?
εγω προσπαθω να εχω ενα textbox και μολις στειλει κατι ο επεξεργαστης να το εμφανιζει στο textbox η VisualBasic χωρις να παταω εγω καποιο πληκτρο και να πηγαινει να διαβαζει τον Inbuffer.

billtech
23-12-11, 20:29
nobody ρε παιδια?