Visual Basic - Graficando una señal Analógica Recepcion por el Puerto Com

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Merlí n

Graficando una señal Analógica Recepcion por el Puerto Com

Publicado por Merlí n (1 intervención) el 16/02/2015 14:24:03
Hola a todos les cuento que estoy realizando una practica donde intento graficar una señal que recibo atrabes de un COM virtual que me genera una tarjeta electrónica con un PIC, la parte de la comunicación la tengo resuelta la parte que gráfica también esta resuelta la he probado con un VScroll para generar los datos a graficar que deben ser de 0-255 ya que en el micro-controlador PIC que uso el ADC es de 8 Bits, mi problema radica en que logro ver la señal analógica en un textbox pero no logro ponerlos en una variable para que los grafique me salta un error " 13 No coinciden los tipos de datos" lo curioso es que grafica un poco y luego salta el error ya probé mandando desde el PIC distintos tipos de datos Entero con signo, Entero sin signo, Entero largo sin signo, Entero largo con signo pero nada parece funcionar solo los puedo visualizar en el textbox cuando los mando como Entero sin signo, pongo también un retorno de carro para separarlos. El programa en el micro esta echo en CCS para micro-controladores estas son las lineas del PIC.

if (usb_enumerated()){

set_adc_channel(0);
delay_us(20);
recbuf=read_adc();

printf(usb_cdc_putc,"%u\r\n ",recbuf);

Aquí pongo una imagen del programa y el código que estoy utilizando.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
Option Explicit
 
Dim cx As Integer, cy As Integer
Dim cx1 As Integer, cy1 As Integer
Dim i As Integer, j As Long
Dim x As Long, y As Integer
Dim dato(1000) As Long
Dim pcx As Long, pcy As Long
Dim fcx As Long, fcy As Long
Dim n As Integer
 
Dim Send_Buf(0) As Byte
Const verde = &HFF00&
Const rojo = &HFF&
 
Dim valor As String, maximo As Integer
Dim te As Byte
 
'-------------Abrir Puerto-------------------
 
Private Sub AbrirPuerto_Click()
    Dim cSetting, Pari As String
    If MSComm1.PortOpen = True Then
        MSComm1.PortOpen = False
    End If
     Select Case Paridad.Text
        Case "Par"
            Pari = "e"
        Case "Impar"
            Pari = "o"
        Case "Ninguna"
            Pari = "n"
        Case "Marca"
            Pari = "m"
        Case "Espacio"
            Pari = "s"
    End Select
    MSComm1.CommPort = Val(Mid(Puertos.Text, 4))
    cSetting = (Baudios.Text) + "," + Pari + "," + Bits.Text + "," + Parada.Text
    MSComm1.Settings = cSetting
    MSComm1.PortOpen = True
    Timer3.Interval = 200
End Sub
 
'-------------Cerrar Puerto-------------------
 
Private Sub CerrarPuerto_Click()
    If MSComm1.PortOpen Then
        MSComm1.PortOpen = False
        Timer1.Interval = 0
    End If
End Sub
 
'-------------Borrar textBox de resepción-------------------
 
Private Sub Limpiar_Click()
    Text1.Text = ""
End Sub
 
'-------------Salir y cerrar programa-------------------
 
Private Sub Salir_Click()
    If MSComm1.PortOpen Then
        MSComm1.PortOpen = False
    End If
        Beep
    End
End Sub
 
'-------------Guardar la resepción en un archivo .txt-------------------
 
Private Sub Guardar_Click()
    If Text1.Text <> "" Then
        Dim cFile, cCadena As Variant
        Dialogo.Filter = "Archivos de Texto|*.Txt|"
        Dialogo.DialogTitle = "Guardar Como Archivo de Texto"
        Dialogo.ShowSave
        cFile = Dialogo.FileName
        Open cFile For Output As #1
        cCadena = Text1.Text
        Write #1, cCadena
        Close #1
    End If
End Sub
 
'-------------Cargar configuración predeterminada-------------------
 
Private Sub Default_Click()
    Dim cSetting, Pari As String
    If MSComm1.PortOpen = True Then
        MSComm1.PortOpen = False
    End If
    Puertos.Text = "COM6"
    Baudios.Text = 9600
    Bits.Text = 8
    Paridad.Text = "Ninguna"
    Parada.Text = 1
    Select Case Paridad.Text
        Case "Par"
            Pari = "e"
        Case "Impar"
            Pari = "o"
        Case "Ninguna"
            Pari = "n"
        Case "Marca"
            Pari = "m"
        Case "Espacio"
            Pari = "s"
    End Select
    MSComm1.CommPort = Val(Mid(Puertos.Text, 4))
    cSetting = (Baudios.Text) + "," + Pari + "," + Bits.Text + "," + Parada.Text
    MSComm1.Settings = cSetting
'    9600,n,8,1
End Sub
 
'-------------Controla el ProgressBar con VScroll-------------------
 
Private Sub Timer4_Timer()
Dim S As Byte
    S = VScroll1.Value
    DoEvents
    ProgressBar1.Value = S
End Sub
 
'-------------Secarga el formulario-------------------
 
Private Sub Form_Load()
    Puertos.AddItem ("COM1")
    Puertos.AddItem ("COM2")
    Puertos.AddItem ("COM3")
    Puertos.AddItem ("COM4")
    Puertos.AddItem ("COM5")
    Puertos.AddItem ("COM6")
    Baudios.AddItem (110)
    Baudios.AddItem (300)
    Baudios.AddItem (1200)
    Baudios.AddItem (2400)
    Baudios.AddItem (4800)
    Baudios.AddItem (9600)
    Baudios.AddItem (19200)
    Baudios.AddItem (38400)
    Baudios.AddItem (57600)
    Baudios.AddItem (115200)
    Baudios.AddItem (230400)
    Baudios.AddItem (460800)
    Baudios.AddItem (921600)
    Bits.AddItem (5)
    Bits.AddItem (6)
    Bits.AddItem (7)
    Bits.AddItem (8)
    Paridad.AddItem ("Par")
    Paridad.AddItem ("Impar")
    Paridad.AddItem ("Ninguno")
    Paridad.AddItem ("Marca")
    Paridad.AddItem ("Espacio")
    Parada.AddItem ("1")
    Parada.AddItem ("1.5")
    Parada.AddItem ("2")
'-------------------------------------------------
     valor = 0
     maximo = 255
 
 
'-------------Limites del ProgressBar-------------------
 
     With ProgressBar1
        .Max = 255
        .Min = 0
End With
'-----------------------------------------------------------
    ' el resultado del CAD en un tiempo discreto
    maximo = VScroll1.Max
 
 
    n = 30
 
    cy = Picture1.ScaleHeight
    cx = Picture1.ScaleWidth
 
    cy1 = Picture1.ScaleHeight
    cx1 = Picture1.ScaleWidth
 
    pcx = Picture1.Width
    pcy = Picture1.Height
 
    fcx = Me.Width
    fcy = Me.Height
 
    ajustar_tiempo (n)
 
    Timer1.Enabled = False
    Timer2.Enabled = False
 
    HScroll1.Value = n
 
End Sub
Private Sub Form_Resize()
    Timer1.Enabled = False
    Timer2.Enabled = False
 
    Picture1.Height = Form1.Height / (fcy / pcy)
    Picture1.Width = Form1.Width / (fcx / pcx)
 
    Picture1.ScaleHeight = Picture1.Height / (pcy / cy1)
    Picture1.ScaleWidth = Picture1.Width / (pcx / cx1)
    cy = Picture1.ScaleHeight
    cx = Picture1.ScaleWidth
    Picture1.Cls
    x = -1: y = 0:  i = 0: j = -1
    ajustar_tiempo (n)
    Timer1.Enabled = True
 
End Sub
 
Private Sub HScroll1_Change()
    n = HScroll1.Value
    lblconta.Caption = n
    Form_Resize
End Sub
 
Private Sub HScroll1_Scroll()
    lblconta.Caption = HScroll1.Value
End Sub
 
 
Private Sub Timer1_Timer()
 
 
    dato(i + 1) = Int(cy - valor * (cy / maximo))
    If Not j > (cx - n) Then
        Picture1.Line (x, dato(i))-(j, dato(i + 1)), vbBlack
        x = j
        i = i + 1
        j = j + n
    Else
   Timer1.Enabled = False
   Timer2.Enabled = True
    End If
   Label1.Caption = "CAD= " & Round(valor * (5 / maximo), 3) & " volts -> 0x" & Hex(valor)
 
End Sub
 
Private Sub Timer2_Timer()
    Picture1.Cls
    x = -1
    j = -1
 
 
 
    If n > 1 Then
    dato(Int((cx / n) + 2)) = Int(cy - valor * (cy / maximo))  'No coinsiden los tipod de datos
    Else
    dato(Int((cx / n)) + 1) = Int(cy - valor * (cy / maximo))
 
    End If
    For i = 0 To cx
        Picture1.Line (x, dato(i))-(j, dato(i + 1)), vbBlack
        x = j
        j = j + n
        dato(i) = dato(i + 1)
    Next i
    Label1.Caption = "CAD= " & Round(valor * (5 / maximo), 3) & " volts -> 0x" & Hex(valor)
 
End Sub
 
Function ajustar_tiempo(time_division As Integer)
    If time_division > 1 Then
        Timer1.Interval = 3 * time_division
        Timer2.Interval = 3 * time_division
    Else
        Timer1.Interval = 1
        Timer2.Interval = 1
    End If
End Function
 
'-------------Cuando se cierra el formulario si el puerto esta abierto se cierra-------------------
 
Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen Then
        MSComm1.PortOpen = False
    End If
End Sub
 
'-------------Si el puerto esta abierto muestra el valor en text1-------------------
 
Private Sub Timer3_Timer()
    If MSComm1.PortOpen Then
        Text1.Text = MSComm1.Input + Text1.Text
        valor = MSComm1.Input + valor
 
    End If
End Sub
 
'-------------Si el puerto esta abierto muestra el valor en text1-------------------
 
Private Sub ayuda_Click()
 Dim mensaje As String
 
 mensaje = "Este programa recoge los datos enviado desde un" & vbCrLf
 mensaje = mensaje & "dispositivo (PIC18F4550) y grafica la señal correspondiente" & vbCrLf
 mensaje = mensaje & "al resultado de una conversión analógica-digital" & vbCrLf
 mensaje = mensaje & "a 8 bits de resolución"
 
 MsgBox mensaje, vbInformation, "Información"
 
End Sub

Cualquier orientación será de gran ayuda y bien recibida Gracias
sshot-6
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder