Τομζασ: Θλεκτρολογίασ Θλεκτρονικισ Εκπαιδευτικόσ: Μπουλταδάκθσ Στζλιοσ Καςάμπαλθσ Στζλιοσ Μάθημα: Εργαςτιριο Ψθφιακών Θλεκτρονικών Συςτθμάτων Εργαςτιριο Συλλογισ Μεταφοράσ και Επεξεργαςίασ Δεδομζνων Αντικείμενο: Αςφγχρονθ Σειριακι Επικοινωνία του PIC16F877 (PIC18F452) με προςωπικό Θ/Υ με Εφαρμογι ςε Visual Basic Υλικά που απαιτοφνται: Θ εκπαιδευτικι πινακίδα SE1001 Ζνασ μ/c PIC16F877 ι PIC18F452 Τροφοδοτικό 9-12 Volts Μετατροπζασ USB to Serial με οδθγοφσ ςυμβατοφσ για Windows 7 (32 & 64 bit) για τθ ςφνδεςθ τθσ πινακίδασ SE1001 ςε κφρα USB ενόσ προςωπικοφ Θ/Υ. Αντικείμενο τθσ άςκθςθσ: Να αναπτυχκεί εφαρμογι ςε γλώςςα προγραμματιςμοφ Visual Basic 5.0 με τθν οποία κα γίνονται μεταφορά δεδομζνων αναλογικισ τάςθσ από μικροεπεξεργαςτι PIC μζςω αςφγχρονθσ ςειριακισ επικοινωνίασ. Μζςω τθσ εφαρμογισ κα ενεργοποιείται ο μετατροπζασ A/D ενόσ PIC16F877 (PIC18F452) για μετριςεισ από τον ακροδζκτθ RA3/AN3 όπωσ είναι ςτθν εκπαιδευτικι πινακίδα SE1001. Στον PIC τρζχει θ εφαρμογι που παρουςιάςτθκε αναλυτικά ςτο φφλλο ζργου τθσ τροποποιθμζνθσ Άςκθςθσ 5. Περιγραφι τθσ Εφαρμογισ: Με το τρζξιμο τθσ εφαρμογισ εμφανίηονται με τθ ςειρά τα παρακάτω διαλογικά παράκυρα: Ειδοποίθςθ ςτο χριςτθ ώςτε να βρει μζςα από τισ Ιδιότθτεσ Συςτιματοσ/Διαχείριςθ Συςκευών ςε ποια Θφρα COMn φαίνεται μζςω των Windows o μετατροπζασ USB to Serial 1
Ειςαγωγι του Αρικμοφ τθσ κφρασ COM του παραπάνω βιματοσ. Ειςαγωγι του Αρικμοφ των μετριςεων. Ειςαγωγι του πρόςκετων Αντικειμζνων Microsoft Comm Control 5.0 και Microsoft Common Dialog Control 6.0 ςτθν εργαλειοκικθ και ςτθ φόρμα, μζςα από τα μενοφ Project/Components: 2
Να υπάρχει μπουτόν ελζγχου λειτουργίασ τθσ ςειριακισ επικοινωνίασ (Τζςτ Επικοινωνίασ ) μεταξφ προςωπικοφ Θ/Υ και PIC με το οποίο κα ςτζλνεται από τον Θ/Υ ςτον PIC θ γραμματοςειρά ma και ο PIC κα απαντά με το μινυμα HELLOWORLD Να υπάρχει μπουτόν (Μζτρηςε) με το οποίο αποςτζλλεται ςτον PIC ο χαρακτιρασ c και ο PIC εκτελεί για μία μζτρθςθ αναλογικισ τάςθσ που τθν αποςτζλλει ςτθ ςυνζχεια ςτον Θ/Υ μζςω του μθχανιςμοφ αςφγχρονθσ ςειριακισ επικοινωνίασ MSComm Control. Στθ ςυνζχεια θ μζτρθςθ απεικονίηεται ςε μθχανιςμό γραφικών Να υπάρχει παράκυρο ειδοποίθςθσ τερματιςμοφ μετριςεων 3
Να υπάρχει μπουτόν αποκικευςθσ και φόρτωςθσ αρχείου μετριςεων όπωσ ςτισ παραπάνω εικόνεσ. Ο κώδικασ τθσ Εφαρμογισ είναι ο παρακάτω: Option Explicit Option Base 1 Dim a() As Variant ' θ εντολι Dim για τον οριςμό του πίνακα μπορεί να ' οριςκεί και ςτθν ενότθτα γενικϊν δθλϊςεων του πίνακα ' και επίςθσ μπορεί και να μθν ζχει ορίςματα ςισ παρενκζςεισ Dim counter As Integer Dim numofmeas, comnumb, min, max As Integer Dim tiempo As Long Dim meas As Integer Private Sub Form_Load() 'οδθγίεσ εφρεςθσ ςειριακισ κφρασ MsgBox "ΘΥ μου δεξί κλικ/ιδιότθτεσ/διαχείριςθ Συςκευών/Θφρεσ COM&LPT", 65, "Εφρεςθ ςειριακισ κφρασ Θ/Υ.." ' ορίηω ςε ποιά κφρα COMn ζχει ςυνδεκεί το όργανο.. comnumb = InputBox("Δώςε ακζραιο αφοφ ελζγξεισ τθ Διαχείριςθ Συςκευών :", "Διλωςθ Αρικμοφ κφρασ COMn ςειριακισ επικοιν.",, _ 8000, 5000) ' ορίηω πόςεσ μετριςεισ κερμοκραςίασ κα πάρω numofmeas = InputBox("Πόςεσ μετριςεισ κα κάνετε :", "Πλικοσ μετριςεων",, _ 8000, 5000) min = 0 max = 5 counter = 0 ReDim a(numofmeas) '---ρυκμίςεισ γραφικϊν Picture1.ScaleMode = 0 4
Picture1.Scale (1, max)-(numofmeas, min) Picture1.BackColor = vbwhite Picture1.DrawWidth = 5 Picture1.AutoRedraw = True '--- ρυκμίςεισ πεδίων κειμζνου txtcounter.fontsize = 20 txtcounter.forecolor = vbgreen txtvolt.fontsize = 25 txtvolt.forecolor = vbred txtdig.fontsize = 18 txtvolt.forecolor = vbblue '---------------------------------- ' Αρχικοποίθςθ τθσ ςειριακισ κφρασ MSComm1.CommPort = comnumb ' 9600 baud, no parity, 8 data, and 1 stop bits. MSComm1.Settings = "9600,N,8,1" ' διαβάηουμε ολόκλθρο το buffer τθσ ςειριακισ λιψθσ MSComm1.InputLen = 0 ' ενεργοποιοφμε τθ ςειριακι ςφνδεςθ MSComm1.PortOpen = True Private Sub cmdclear_click() Picture1.Cls txtdig.text = "" txtcounter.text = "" txtvolt.text = "" txtrs232.text = "" Private Sub cmdenable_click() Dim Instring, Buffer As String Dim k1 As String Dim k2 As Variant Dim N As Integer counter = counter + 1 If counter <= numofmeas Then txtcounter.text = counter ' δθμιουργοφμε μια χρονοκακυςτζρθςθ μεταξφ των ςθμείων Call Delay(3000) MSComm1.Output = "c" + Chr$(13) ' περιμζνουμε μζχρι να διαβάςουμε ζνα χαρακτιρα κάκε φορά Do DoEvents 5
Loop Until MSComm1.InBufferCount >= 1 txtrs232.text = MSComm1.Input If txtrs232.text <> "" Then txtdig.text = Asc(txtRS232.Text) k1 = Val(txtdig.Text) k2 = k1 * 5 / 255 'μετατροπι των ψθφιακϊν επιπζδων ςε τάςθ txtvolt.text = k2 N = 2 ' ςτρογγυλοποίθςθ ςτο δεφτερο δεκαδικό: βιβλίο προγραμμ VB ςελίδα 97 k2 = Int(k2 * 10 ^ N + 0.5) / 10 ^ N Else k2 = 0 End If a(counter) = k2 ' τοποκετϊ τισ μετριςεισ ςε πίνακα για προςωρινι αποκικευςθ ςτθ μνιμθ '--- ηωγραφίηω τα ςθμεία Picture1.PSet (counter, k2), vbred Else 'παράκυρο μθνφματοσ ελζγχου MsgBox "Τζλοσ Μετριςεων. Επιλζξτε Αποκικευςθ.. ;", 65, "Παράκυρο ελζγχου.." End If Private Sub cmdexit_click() ' Close the serial port. MSComm1.PortOpen = False End Private Sub cmdopen_click() Dim N As Integer Dim filename As String filename = InputBox("Δώςτε το όνομα Αρχείου", "Αποκικευςθ ςε αρχείο",, _ 8000, 5000) Open filename For Input As 1 Input #1, numofmeas For counter = 1 To numofmeas ' διαβάηω μετριςεισ από αρχείο Input #1, N, a(counter) txtcounter = N txtvolt = a(counter) ' ηωγραφίηω τισ μετριςεισ Picture1.PSet (N, a(counter)), vbred 6
Next counter Close 1 Private Sub cmdsave_click() Dim filename As String filename = InputBox("Δώςτε το όνομα Αρχείου ςτον δίςκο D..", "Αποκικευςθ ςε αρχείο",, _ 8000, 5000) Open filename For Output As 1 Print #1, numofmeas For counter = 1 To numofmeas Write #1, counter, a(counter) Next counter Close 1 Public Sub Delay(tiempo As Integer) Dim kd1, kd2 As Integer kd1 = 0 kd2 = 0 For kd1 = 0 To tiempo For kd2 = 0 To tiempo kd2 = kd2 + 1 Next kd2 kd1 = kd1 + 1 Next kd1 Private Sub TestSerial_Click() Dim Instring, Buffer As String ' κακαρίηω το πεδίο κειμζνου από προθγοφμενα μθνφματα txtrs232.text = "" txtmessage.text = "περίμενε λίγα sec.." ' αποςτολι χαρακτιρων ελζγχου ςτον PIC16F877 MSComm1.Output = "ma" + Chr$(13) ' περιμζνουμε μζχρι να διαβάςουμε 10 χαρακτιρεσ Do DoEvents Loop Until MSComm1.InBufferCount >= 10 ' τϊρα διαβάηουμε όλο το buffer ςειριακισ επικοινωνίασ Instring = MSComm1.Input txtrs232.text = Instring 7
txtmessage.text = "Οκ.." Βιβλιογραφία : 1) «Ειςαγωγή ςτον προγραμματιςμό μικροελεγκτών, FPGA και CPLD: Επιλεγμζνεσ Εφαρμογζσ» Σ. Μπουλταδάκθσ, Γ. Πατουλίδθσ και Ν. Αςθμόπουλοσ, Εκδόςεισ ΤΗΙΟΛΑ, Θεςςαλονίκθ 2011, ISBN: 978-960-418-291-6 2) «Υλικό και Λογιςμικό Μετρήςεων: Παραδείγματα και Εφαρμογζσ» Σ. Μπουλταδάκθσ και Ι. Καλόμοιροσ, Εκδόςεισ ΤΗΙΟΛΑ, Θεςςαλονίκθ 2009, ISBN: 978-960-418-161-2 8