Autor Tema: envio de un Byte por Puerto serie  (Leído 3963 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
envio de un Byte por Puerto serie
« en: 18 de Enero de 2006, 22:58:00 »
tengo que enviar un byte por el puerto serie lo que hago es esto

Private Sub boton1_Click()
MSComm1.Output = "00010011"
End Sub

no lo pude probar porque no compre el max232 quiero saber si esta bien y si manda ese byte

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: envio de un Byte por Puerto serie
« Respuesta #1 en: 19 de Enero de 2006, 19:05:00 »
No, no está bien. Lo que vas a conseguir con eso es que envíe "00010011" como texto, no como el valor 19 en binario. MsComm solo envía cadenas de texto.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: envio de un Byte por Puerto serie
« Respuesta #2 en: 20 de Enero de 2006, 01:12:00 »
y como hago para enviar el 00010001 en binario

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: envio de un Byte por Puerto serie
« Respuesta #3 en: 20 de Enero de 2006, 01:46:00 »
como NO SERIA ASI?
lo que tengo es que mandar el BYTE con los 8 bits cual serie la forma correcta de mandarlo

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: envio de un Byte por Puerto serie
« Respuesta #4 en: 20 de Enero de 2006, 10:08:00 »
No podés enviar una variable del tipo BYTE, solo envía strings. Si intentás enviar un BYTE supongo que te dará un error de tipos o enviará qién sabe qué... Hay otras maneras de solucionar esos problemas.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: envio de un Byte por Puerto serie
« Respuesta #5 en: 20 de Enero de 2006, 10:18:00 »
espero que alguien me pueda solucionar ese problema

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: envio de un Byte por Puerto serie
« Respuesta #6 en: 22 de Enero de 2006, 17:27:00 »
NECESITO ayuda en este tema alguien ayude

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: envio de un Byte por Puerto serie
« Respuesta #7 en: 22 de Enero de 2006, 22:33:00 »
Nunca viene mal pedir las cosas con un por favor y un gracias desquiciado Ardiendo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: envio de un Byte por Puerto serie
« Respuesta #8 en: 23 de Enero de 2006, 00:47:00 »
Hola.

Dim datoBin As Long
Dim datoInt As Integer
Dim Recorre As Integer
Dim Ready2Send As String * 1

Private Sub Form_Load()

datoBin = 1000000   "no debe superar los 8 digitos de largo(1 byte)

DatoInt = 0
For Recorre = 0 To Len(CStr(DatoBin)) - 1
DatoInt = DatoInt + ((2 ^ Recorre) * CInt(Mid(CStr(DatoBin), Len(CStr(DatoBin)) _
- Recorre, 1)))
Next

Ready2Send = Chr(DatoInt)

End Sub

Carga en datobin el valor que quieras en binario. Ej. 11111110  (eso seria igual a 254 )

ReadytoSend contiene el valor ASCII correspondiente al binario ingresado en DatoBin(en el ejemplo cargue 1000000 = .64, por lo tanto Ready2Send devuelve @ que es el ASCII correspondiente.)

Envia el String Ready2Send al control del puerto serial.

Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ENO45

  • PIC10
  • *
  • Mensajes: 42
RE: envio de un Byte por Puerto serie
« Respuesta #9 en: 23 de Enero de 2006, 11:56:00 »
hola brunof me podes esplicar que haces en esta parte

DatoInt = 0
For Recorre = 0 To Len(CStr(DatoBin)) - 1
DatoInt = DatoInt + ((2 ^ Recorre) * CInt(Mid(CStr(DatoBin), Len(CStr(DatoBin)) _
- Recorre, 1)))
Next

y despues para enviare el byte hago

Private Sub boton1_Click()
MSComm1.Output = Ready2Send
end sub

o entendi todo mal
desde ya muchas gracias

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: envio de un Byte por Puerto serie
« Respuesta #10 en: 23 de Enero de 2006, 14:19:00 »
Bueno...si ya configuraste el control de COM serial, entonces hace asi:


Private Sub boton1_Click()

MSComm1.Output = Bin2String(10000000) " reemplaza 10000000 por el valor que quieras enviar(8 decimales max) o bien una variable cargada con el valor que quieras enviar.
                                     
End Sub


Private Function Bin2String(DatoBin As Long) As String

Dim DatoInt As Integer
Dim Recorre As Integer

DatoInt = 0
For Recorre = 0 To Len(CStr(DatoBin)) - 1
DatoInt = DatoInt + ((2 ^ Recorre) * CInt(Mid(CStr(DatoBin), Len(CStr(DatoBin)) _
- Recorre, 1)))
Next

Bin2String = Chr(DatoInt)

End Function

Lo que hace el programa es tomar el DatoBin(que es un long, pero en el cual en realidad cargas un binario(ceros y uno SI O SI)) y utilizarlo como cadena de texto,y asi poder analizar cada uno de sus digitos.
Si el digito leido es un 1 entonces se eleva 2 al exponente correspondiente a la posicion del digito leido en la cadena.

o sea: si hago

MSComm1.Output = Bin2String(1100001) "

por ejemplo:

Lee el primer digito de der a izq ( o sea, el 1) y hace:

DatoInt = DatoInt(= cero inicialmente) + 2 elevado a la cero ( =1) * digito leido ( =1)

Lee ahora el segundo digito de der a izq ( o sea, el 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la uno ( =2) * digito leido ( =0)

Lee ahora el tercer digito de der a izq ( o sea, otro 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la dos ( =4) * digito leido ( =0)

Lee ahora el cuarto digito de der a izq ( o sea, otro 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la tres ( =8) * digito leido ( =0)

Lee ahora el quinto de der a izq ( o sea, otro 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la cuatro ( =16) * digito leido ( =0)

Lee ahora el sexto digito de der a izq ( o sea, un 1 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la cinco ( =32) * digito leido ( =1)

Lee ahora el septimo digito de der a izq ( o sea, otro 1 ) y hace:

DatoInt = DatoInt(=1+32) + 2 elevado a la seis ( =64) * digito leido ( =1)

Entonces al final: DatoInt=1+32+64 = 97

Al final pasa el valor 97 al codigo ASCII para transformarlo en String, que es lo que necesitas para poder enviarlo x el control COM
Entonces la funcion devuelve el caracter correspondiente al valor decimal 97.

Resumiendo, la linea queda:

MSComm1.Output = "a"  "ya que a = 97 en ASCII (presiona alt + 97 en un editor de texto y fijate lo que sale)Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante

Espero hayas entendido...Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: envio de un Byte por Puerto serie
« Respuesta #11 en: 23 de Enero de 2006, 14:22:00 »
Ah! y perdona el ingles...es que mi programando a veces invento palabras o bien las defino en otros idiomaslocolocolocoloco...jaja exitos..
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.