Artículos
Medidor ADC infrarrojo por RS232 - Página 4
- Detalles
- Categoría: Artículo
- Publicado el Sábado, 21 Marzo 2009 08:47
- Escrito por Santiago Villafuerte
- Visto: 52485
Página 5 de 5
Programa del Receptor en Visual Basic
Descargar instalador (contraseña migsantiago.com)
(Descarga)
El programa fue hecho en Visual Basic 6 SP5. La interfaz con el usuario es la siguiente:
El programa recibe 2 bytes en el puerto COM1 ya que el ADC del pic está operando con resolución de 10 bits. El cálculo del valor entero resultará en un valor que va de 0 hasta 1023, siendo 0 el equivalente al voltaje de referencia negativo y 1023 el equivalente al voltaje de referencia positivo.
La conversión de los valores ASCII recibidos como cadena se logra con el código siguiente:
binario = (Asc(bin_msb) * 256) + (Asc(bin_lsb)) 'calcula de 0 a 1023
Siendo bin_msb el byte más significativo y bin_lsb el byte menos significativo de la conversión ADC. El byte bin_msb solo contiene 2 bits de importancia (bit 1 y bit 0) y el byte bin_lsb contiene 8, siendo en total los 10 bits de la conversión. Los 2 bits más significativos se multiplican por 256 y posteriormente se suma el contenido del byte menos significativo para obtener la medición.
La conversión a voltaje a partir de la medición en binario se realiza con la siguiente fórmula:
Por ejemplo, si se recibe 292 como medición, el voltaje de referencia positivo es 3.5V y el negativo es de 0V, la conversión entregará lo siguiente:
Posteriormente solo se hace una conversión entre unidades de ingeniería y su equivalente en V, según el sensor que se esté empleando.
El código fuente de la forma usada en Visual Basic se muestra a continuación:
'Santiago Villafuerte
'Programa que recibe una cadena pequeña con la conversión ADC
'de un PIC a través del puerto serial a 2400bps
'Convierte el valor de 8 bits en una unidad de ingeniería
'Recibe los voltajes de referencia con los que el pic fue
'configurado
'Solo trabaja con COM1
'Mis variables
Public vrefpos As Double
Public vrefneg As Double
Public voltaje As Double
Private captura As Boolean
Private Sub btnCaptura_Click()
cadena = MSComm1.Input
captura = True
btnCaptura.Enabled = False
btnDetener.Enabled = True
txtVrefp.Enabled = False
txtVrefn.Enabled = False
txtUIV.Enabled = False
txtUI.Enabled = False
End Sub
Private Sub btnDetener_Click()
captura = False
btnCaptura.Enabled = True
btnDetener.Enabled = False
txtVrefp.Enabled = True
txtVrefn.Enabled = True
txtUIV.Enabled = True
txtUI.Enabled = True
End Sub
'Subfunción que se ejecuta al principio de la aplicación
Private Sub Form_Load()
'Configura puerto serial COM1
MSComm1.Settings = "2400,N,8,1"
MSComm1.CommPort = 1 'usa el com1
MSComm1.InputLen = 0 'tamaño de buffer de entrada
MSComm1.PortOpen = True 'abre puerto
MSComm1.RThreshold = 1 'habilita el evento ante recepción
'en buffer después de recibir 1 byte
vrefneg = txtVrefn.Text 'valores iniciales de referencia
vrefpos = txtVrefp.Text
End Sub
'aquí llega si el com1 tuvo cambios en rx o tx
Private Sub MSComm1_OnComm()
If (MSComm1.InBufferCount >= 2) And (captura = True) Then 'el pic envía 2bytes cada 960ms
cadena = MSComm1.Input
cadrec.Caption = cadena
vrefneg = txtVrefn.Text 'valores de referencia
vrefpos = txtVrefp.Text
bin_msb = Mid(cadena, 1, 1) 'copia el 1er byte de la cadena
bin_lsb = Mid(cadena, 2, 1) 'copia el 2do byte
binario = (Asc(bin_msb) * 256) + (Asc(bin_lsb)) 'calcula de 0 a 1023
conv.Caption = binario
volts = ((binario / 1023) * (vrefpos - vrefneg)) + vrefneg
lblVolts.Caption = volts
UIV = txtUIV.Text
uing = volts * UIV 'convierte a unidades de ing.
lblUMedidas.Caption = CStr(uing)
lblUMedidas.Caption = Mid(lblUMedidas.Caption, 1, 5) + " " + txtUI.Text
End If
End Sub
Errores conocidos en el programa y circuito
- El voltaje de referencia dado por el diodo zener no es constante ya que depende de la fuente de alimentación y de la corriente que fluye por el diodo Esto implica que la conversión ADC pueda tener un error indeterminado.
- No se implementó corrección de errores en la comunicación infrarroja en Visual Basic por lo que el programa puede mostrar desbordamiento de cadena y fallar.
- El sensor de temperatura LM35 cuenta con un error de ±0.5°C en su medición.
- No se considera tampoco el offset que el LM324 tiene al amplificar el voltaje del LM35.
- << Anterior
- Siguiente