TODOPIC

Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: atlasdelcarinakeel en 02 de Abril de 2005, 13:25:00

Título: Mscomm (Numeros Binarios)
Publicado por: atlasdelcarinakeel en 02 de Abril de 2005, 13:25:00
Que tal, haber si me pueden ayudar necesito enviar numeros binarios a traves del mscomm, el caso es que si yo envio lo siguiente:

Mscomm1.Output="1"

en el puerto se vera en binario 00110001 o lo que es lo mismo el ascii de 1 que es 31H, necesito por favor que si envio un 1 por el mscomm en la salida se me muestre  "00000001", pero necesito hacerlo por software y no por hardware ya que por hardware puedo usar un Pic y listo.

Yo visualizo el dato en unos leds, a traves de un registro de corrimiento.

Les agradeceria su ayuda.
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 02 de Abril de 2005, 13:54:00
Puedes probar a hacer la asignación del valor sin las comillas.

Si no funciona, porque la propiedad Output necesariamente tenga que ser en formato texto, puedes intentar lo siguiente:
Mscomm1.Output=chr$(1)

De esta manera, te aseguras que envías un carácter cuyo código ascii es el 1.
Título: RE: Mscomm (Numeros Binarios)
Publicado por: atlasdelcarinakeel en 10 de Abril de 2005, 10:20:00
Gracias nocturno66, me funciono muy bien  usando la funcion Chr$().
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 10 de Abril de 2005, 12:17:00
De nada, me alegro
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Elizabeth2004 en 14 de Abril de 2005, 18:15:00
Hola Amigos.. si para enviar el caracter cuyo assci es el número se ultiza " Chr$().".. como hago para enviar un byte.. o un número en hex.... necesito enviar por ejemplo el Byte "200" o en su hex "C8" o en Binario "11001000"... gracias...

Bye
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 14 de Abril de 2005, 23:34:00
La diferencia entre un carácter y un byte es únicamente su nombre Sonrisa Gigante
Es más una cuestión estética que real, porque chr$(200) representa todas las fórmulas que expones.
En el fondo, lo que quieres es que por el cable viajen una serie de impulsos eléctricos que signifiquen lo mismo tanto para el emisor como para el receptor, y las representaciones binaria, hexadecimal, decimal o ascii no son más que distintas convenciones a las que hemos llegado "para entendernos".
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Elizabeth2004 en 15 de Abril de 2005, 10:02:00
Escrito originalmente por nocturno66
La diferencia entre un carácter y un byte es únicamente su nombre Sonrisa Gigante
Es más una cuestión estética que real, porque chr$(200) representa todas las fórmulas que expones.
En el fondo, lo que quieres es que por el cable viajen una serie de impulsos eléctricos que signifiquen lo mismo tanto para el emisor como para el receptor, y las representaciones binaria, hexadecimal, decimal o ascii no son más que distintas convenciones a las que hemos llegado "para entendernos".


Gracias...tenía esa duda... porke anoche haciendo unas pruebas me estaba confundiendo un poco... jejeje.. ya decía....

oye y aprovechando un poco... Cómo hago para ke me envie el Caracter, Byte, hexa.. lo ke sea.. mientras tenga presionado un botón... osea continuamente.. no ke solo me envie uno.. sino ke mientras esté presionado me envie indefinidamente hasta ke suelte el botón..

Bye
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 15 de Abril de 2005, 10:28:00
Habría que ver tu programa. Eso que dices se puede hacer de varias formas, pero no me atrevo a indicarte alguna sin ver cómo encaja en tu programa.
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Elizabeth2004 en 15 de Abril de 2005, 12:43:00
Escrito originalmente por nocturno66
Habría que ver tu programa. Eso que dices se puede hacer de varias formas, pero no me atrevo a indicarte alguna sin ver cómo encaja en tu programa.


Pues mira.. ten cuento ke lo ke estoy tratando de hacer es un control remoto.. ya lo tengo echo con un pic... estoy utilizando un modulador ASK para tx bytes a otro PIC "16F877" ke es el ke me controla un microbot... entonces en la parte del transmisor.. con un 16f84 envio bytes en formato RS232.. para ke cuando me lleguen al otro lado .. los pueda identificar con la usart del pic.. entonces me surgió la idea de aparte de mandar los bytes desde el pic.. tambien poder enviarlos desde el PC... ha sido una tarea entretenida.. ya ke no sabía nada de Visual..... te dejo algunas fotos de mi prototipo para ke tengas una mejor idea.. de lo ke trato de hacer... también te dejo el código de lo ke llevo del control remoto...



es sencillo lo tengo ke cuando haga click en un botón me envie un byte por el com1

lo tengo en periodo de prueba por eso lo verás un poco desordenado y sin asignar acciones a un resto de botones.. pero bueno.. echale un ojo a la parte del frame "Cámara " ke es lo ke tengo asignado ...para poder enviar los bytes tienes ke presionar en el boton OnOFF...

Akí te dejo el Código


Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 16 de Abril de 2005, 01:31:00
No puedo bajar el código, puede que el link esté roto.

De todas formas, por lo que comentas, creo que tu problema tiene fácil solución.

Creo que tú actualmente envías el byte en el evento "Click" del botón que sea. Ese evento se ejecuta después de haber presionado y levantado el ratón sobre el botón.

Lo que tú necesitas podrías hacerlo por ejemplo así:
- en el evento "MouseDown" (que se ejecuta al presionar sobre el botón, aunque no levantes el ratón) cambias el valor de una variable global y haces un bucle que envíe un byte, cuya condición de salida dependa de un nuevo cambio en dicha variable global. Por ejemplo:

Codigo:
BotonPulsado=1
while (BotonPulsado) -> envioByte


- en el evento "MouseUp" que se ejecuta al levantar el botón del ratón, vuelves a cambiar el valor de esa variable global, para salir del bucle que se está ejecutando indefinidamente. Por ejemplo: BotonPulsado=0

(disculpa por no usar la sintaxis de Visual Basic pero hace mucho que no lo uso y tengo ahora mismo mentalidad de "C" loco )
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Elizabeth2004 en 16 de Abril de 2005, 08:18:00
Escrito originalmente por nocturno66
No puedo bajar el código, puede que el link esté roto.


(disculpa por no usar la sintaxis de Visual Basic pero hace mucho que no lo uso y tengo ahora mismo mentalidad de "C" loco )


Gracias había pensado en algo similar.. pero pesaba ke el mousedown tenía una sintaxis confusa para mi....

Voy a revisar con lo ke me dices y te cuento...

el link no está roto.. sino ke lycos dice ke ingreses a la página principal y luego si puedes descargar el archivo ose http://usuarios.lycos.es/vlad2004   luego entras a /ALBERT  y luego a control y ahí encuentras el control.rar


gracias por todoGiño

Bye
Título: RE: Mscomm (Numeros Binarios)
Publicado por: batmand en 11 de Mayo de 2005, 13:03:00
Hola a todos,

estoy intentando mi primer programa en vb6, tratando de utilizar el mscomm

Pero cuando quiero compilarlo, me da error por "variable  no definida"

Alguien puede echarle una mirada a mi programa?

La idea es recibir el dato del puerto serie y verlo en un text bos que se llama txtS1

mi form se llama frmVentana

Aca copio el codigo

Private Sub frmVentana_Load()
MSComm1.CommPort = 1
MSComm1.RTSEnable = False
MSComm1.RThreshold = 1
MSComm1.Handshaking = 0
MSComm1.Settings = "1200,n,8,1"
MSComm1.PortOpen = True
End Sub


Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = 2 Then
dato = MSComm1.Input
txtS1.Text = txtS1.Text & dato
End If
End Sub

Gracias a todos
Dario
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Elizabeth2004 en 11 de Mayo de 2005, 22:31:00
Escrito originalmente por batmand
Hola a todos,

Pero cuando quiero compilarlo, me da error por "variable  no definida"




Ke tal amigo, no se mucho de vb6, pero ahí te dice lo ke pasa, "variable no definida" y según lo ke vi.. no estás definiendo "dato" por ningún lado, prueba a definirla como string y me cuentas algo así
Dim dato As String

Espero no ekivocarme..Giñosi es así disculpasdesquiciado

Bye
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 12 de Mayo de 2005, 23:58:00
¿Qué hace esto en Basic?:
txtS1.Text = txtS1.Text & dato
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 13 de Mayo de 2005, 10:53:00
Hola:

Se utiliza para forzar la concatenación de las cadenas de dos expresiones.

Si txtS1.Text ="Hola" y dato=255

txtS1.Text = txtS1.Text & dato

txtS1.Text = Hola255

Sonrisa Gigante Giño
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 13 de Mayo de 2005, 11:09:00
Hola batmand:

Yo compile tu programa y no me da ningun error...

lo unico es que aun así llame al formulario frmVentana_Load() el evento en mi vb siempre me da como Form_Load y si te dice lo de "Variable no definida" es cuando utilizas Option Explicit... Prueba declarando dato como string:

Dim dato as string  Sonrisa Gigante Giño
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 13 de Mayo de 2005, 11:10:00
Llorando Tienes razón, se me está olvidando el Basic, y había confundido "&" con el operador AND de C

Si no recuerdo mal, en VB para que las variables no necesiten ser declaradas, existía algo como "OPTION EXPLICIT".

Lo que no estoy seguro es si había que ponerlo o había que borrarlo para conseguir el efecto deseado, pero bueno, pruébalo y nos cuentas.
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 13 de Mayo de 2005, 11:16:00
Hola:

El Option Explicit te obliga a declarar las variables.
Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 13 de Mayo de 2005, 11:27:00
Pues entonces será que lo tiene puesto y tendría que quitarlo
Sonrisa Gigante
Título: RE: Mscomm (Numeros Binarios)
Publicado por: atlasdelcarinakeel en 15 de Mayo de 2005, 11:15:00
Que tal, trata colocando a 1 el MSComm1.Handshaking, es decir MSComm1.Handshaking =1
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 15 de Mayo de 2005, 13:47:00
Hola:

Te pongo un jmplo que a mi me funciona bien....

Crea un formulario exe standard y en el un textbox, el mscomm y un timer:

Option Explicit
Dim dato As String

Private Sub Form_Load()
    Timer1.Interval = 1
    MSComm1.Settings = "2400,n,8,1" "propiedades
    MSComm1.CommPort = 2 "seleccionar puerto
    MSComm1.PortOpen = True "abrir puerto
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then "si el pueerto esta
        MSComm1.PortOpen = False "abierto, cerrarlo
    End If
End Sub

Private Sub Timer1_Timer() "setear timer en 1 ms
    dato = MSComm1.Input
    Text1.Text = dato
End Sub

Este codigo pegalo y listo!

Yo utilizo un timmer para hacer una lectura cada 1ms, luego si te funciona puedes cambiarlo, es necesario que cuando cierres tu aplicacion cierrs tambien el puerto.

Comprueba que las velocidades en baudios del PC y del PIC sean las mismas. Sonrisa Gigante Giño
Título: RE: Mscomm (Numeros Binarios)
Publicado por: batmand en 17 de Mayo de 2005, 13:03:00
Al fin!!!!!!!!!!!!!!!!!!!1   RebotadoRebotadoRebotadoRebotado

Gracias LordLafebre!!!!!

Bueno, con tu ejemplo funciona, aunque me frustra un poco el no saber porque cuernos mi programa no funciona, pero seguire investigando.

Ahora el problema es que lo visualizo como codigo ascii, no en decimal.

Conocen alguna forma mas o menos simple de hacer eso? Digo mas o menos simple porque estuve mirando este otro post

http://miarroba.com/foros/ver.php?foroid=64652&temaid=1626935

pero no entiendo un pepino.

gracias nuevamente
Saludos
Dario
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 17 de Mayo de 2005, 15:10:00
Que bien...!

Me alegra que te haya funcionado.... Muchas risas
Título: RE: Mscomm (Numeros Binarios)
Publicado por: batmand en 24 de Mayo de 2005, 12:52:00
Bueno, aqui estoy de nuevo, afloje un poco con este tema porque estaba tapado de laburo, pero ahora lo estoy retomando.

LordLafebre, tu ejemplo funciona perfecto, pero ahora quiero ir personalizando mas mi programa, y no puedo.

Lo primero que quiero hacer es que convierta el dato recibido a decimal, ya que lo visualiso siempre en ascii (no importa como lo envie del pic, siempre lo visualizo como ascii).

Me dijeron que lo unico que hay que hacer es usar la sentencia Asc(), pero por mas que intento no me sale.

Cambie el programa del micro, para que en ves de enviar 5 datos seguids mande 1, espere un segundo, mande le otro, y asi, pero tampoco funciona.

Podrias darme una ejemplo de como se hace?

Porque una vez que pueda recivir en el textbox un numero decimal, ahi quiero seguir avanzando para graficarlos en tiempo real y luego guardarlo una vez al dia.

Saludos y mil gracias
Dario
Título: RE: Mscomm (Numeros Binarios)
Publicado por: atlasdelcarinakeel en 25 de Mayo de 2005, 10:02:00
Que tal, puedes probar usando la funcion CDec() o tambien Val().RollEyes
Título: RE: Mscomm (Numeros Binarios)
Publicado por: batmand en 27 de Mayo de 2005, 13:20:00
Hola a todos

atlasdelcarinakeel, gracias por la info, pero no me funciona.

Si pongo Val(), me aparece siempre 0, y si pongo CDec (), me da error y me dice que no coinciden los tipos

Abajo te paso el codigo que tengo y como intente con cada uno, lo mas probable es que no lo este escribiendo en el lugar debido.

Gracias de antemano
Dario


Private Sub Form_Load()
Timer1.Interval = 100
MSComm1.Settings = "9600,n,8,1" "propiedades
MSComm1.CommPort = 1 "seleccionar puerto
MSComm1.PortOpen = True "abrir puerto
End Sub

Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then "si el puerto esta
MSComm1.PortOpen = False "abierto, cerrarlo
End If
End Sub

Private Sub Timer1_Timer()
Dato = MSComm1.Input
[color=FF0000]Text1.Text = Text1.Text & CDec(Dato)

End Sub[/color]

o sino

Private Sub Timer1_Timer()
Dato = MSComm1.Input
Text1.Text = Text1.Text & Val(Dato)
End Sub


Título: RE: Mscomm (Numeros Binarios)
Publicado por: Nocturno en 27 de Mayo de 2005, 17:49:00
Tu problema es que pretendes usar el operador & para unir una cadena de texto con una variable numérica.
No se pueden concatenar peras con manzanas, o unes peras con peras, o manzanas con manzanas.

Por tanto, o haces:
text1.text=text1.text & Dato // si quieres tratarlo como cadenas

o

text1.text = val(text1.text) + val(Dato)  // si quieres tratarlo como números
Título: RE: Mscomm (Numeros Binarios)
Publicado por: atlasdelcarinakeel en 28 de Mayo de 2005, 08:47:00
Que tal creo que nocturno66 ya respondio la forma de hacerlo o tambien puedes hacerlo asi:

Dato=MSComm1.Input

Variable_Tipo_String=Text1.Text & Dato

y luego

Text1.Text=Val(Variable_Tipo_String).Sonrisa
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 28 de Mayo de 2005, 21:24:00
Hola batmand:

Aqui te pongo dos funciones la una que transforma un numero binario a decimal y la otra un decimal a binario, espro te sirva...

Public Function BinADec(Valbin As String) As Integer
Dim ValAn As Integer
Dim PosBin As Integer
ValAn = 0
PosBin = 1
Do
   If PosBin = (Len(Valbin) + 1) Then Exit Do
   If Right(Left(Valbin, PosBin), 1) = "1" Then
      ValAn = (ValAn + 0.5) * 2
   Else
      ValAn = ValAn * 2
   End If
   PosBin = PosBin + 1
Loop
BinADec = ValAn
End Function

Public Function DecABin(ValDec As Integer) As String
Dim Valdec2 As String
Dim Valdec1 As Integer
Dim res As Integer
Dim Bin As String
Valdec1 = ValDec
    Do
        If Valdec1 = 0 Then
            Exit Do
        End If
        res = Valdec1 Mod 2
        Bin = res
        Valdec2 = Bin + Valdec2
        Valdec1 = Int(Valdec1 / 2)
    Loop
If Len(Valdec2) < 9 Then Valdec2 = String$((8 - Len(Valdec2)), "0"Giño + Valdec2
DecABin = Valdec2
End Function

Pudes utilizarla asi:

text2=DecAbin(val(text1))    Giño Sonrisa Gigante
Título: RE: Mscomm (Numeros Binarios)
Publicado por: batmand en 30 de Mayo de 2005, 14:40:00
Bueno, gracias a todos por la ayuda, pero creo que voy a abandonar, porque no hay caso.

Probe lo que sugirio Nocturno, y aunque no me da error, me da siempre 0.

Despues probe lo que me sugirio atlasdelkarinakel,y me convierte el primer byte (0), paro se queda ahi, es como si al convertir el valor dejara de recibir datos.

Despues probe lo que sugirio LordLafebre, con la funcion BinADec, pero me da un error de compilacion, asumi que era donde aparece el guiño, pero tambien me da 0 todo el tiempo.

Si alguien tiene un ejemplo completo de como recibir el dato y visualizarlo en forma decimal, se los agradeceria.

Lo que estuve pensando es que no necesito concatenar los datos, lo importante es que los visualice en el textbox en formato decimal.

Bueno, mil gracias por la paciencia, esto me pasa por meterme con otra especialidad.

Saludos
Dario

Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 31 de Mayo de 2005, 11:16:00
Hola batmand:

No te rindas aun, por que no pones el programa para tu pic y cual utilizas para ver si lo armo y veo si te puedo ayudar, ahora estoy en vacaciones y tengo tiempo libre, si quieres puedo intentarlo....
Título: RE: Mscomm (Numeros Binarios)
Publicado por: batmand en 01 de Junio de 2005, 11:20:00
Gracias LordLafebre

Te comento mi proyecto.

Tengo un pic 16F876, al cual conecte 4 sensores de presion diferencial. REcibo los datos a 8 bits, les realizo una comparacion contra un registro que tiene el valor patron para cada uno, y los envio por rs232, con un intervalo de 1 segundo entre cada dato.

El programa esta hecho con el Niple, y todo eso funciona barbaro, porque use otro programa para recibir los datos, y los recibo bien.

Ahora quiero personalizar la recepcion de los datos, para lo cual hice un form, en el cual tengo 4 text box y una ventana de grafico. En cada textbox quiero recibir el dato, visualizarlo ahi y graficarlo en funcion del tiempo.

Por supuesto, recien estoy empezando, y con el ejemplo que vos me pusiste unos post antes, puedo recibir y enviar bien, pero ahi me quede.

De todos modos, ahora consegui un manual gigantezco de Visual Basic (creo que este fin de semana me la paso leyendo loco )y un amigo me mando el codigo de un programa funcionando, asi que voy a estudiar todo en detalle.

De mas esta decir que en lo que puedas ayudarme, te lo voy a agradecer muchisimo.

De paso, queria preguntarte, de donde sale tu nick? Nunca lo escuche antes.

Mil gracias nuevamente, hasta la proxima y que disfrutes tus vacaciones.

Saludos
dario
Título: RE: Mscomm (Numeros Binarios)
Publicado por: LordLafebre en 01 de Junio de 2005, 23:26:00
Hola:

De hecho yo tengo una aplicación muy similar a la tuya, consiste en un sensor de temperatura lm35 conectado al RA0 de un pic 16F877 y el dato lo envio en forma serial al pc, para mi pic utilizo PBP 2.45, el dato recibido lo visualizo en un label y tengo una base de datos para que almacene aquellos valores que excedan de cireto límite....

Bueno en PBP para hacer esto es algo asi:

        ADCIN 0, dato
        dato = dato / 2
        serout PORTD.2,T2400,[#dato,"oC"]        

aqui lo que hago es enviar el valor de dato seguido d "oC" para grados centigrados, y lo que recivo en el label es algo así:  13oC, no he tenido problemas con esto.

el texto de ayuda para esta instruccion es:

" Send the ASCII value of B0
SEROUT PORTB.0,N2400,[#B0]

He escuchado algo de nipple y me parece que es un soft para programar mediante diagramas de flujo.... no lo he utilizado... Ahora que si quieres puedo ayudarte con una pequña aplicación pero con PBP para el pic....

AHHHH y con respecto a mi nick Lafebre es mi apllido y lo de Lord es por lo de los SITH (soy fanático de las guerras de las galaxias). Sonrisa Gigante