
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.
Cualquier orientación será de gran ayuda y bien recibida Gracias

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

Valora esta pregunta


0