Comunicación serial con Visual Basic 2008

Compañeros foreros, quiero ver si me pueden ayudar con un problema que tengo. Resulta que estoy realizando un proyecto en el cual debo comunicar un microcontrolador PIC 16F con una computadora. Lo que es la programación del pic lo domingo pero no se como hacerlo en la computadora.

Dado que no se programar decidí probar el Visual Basic Express 2008. Para la comunicación serial uso el componente SerialPort de Visual Basic 2008, pero algo no hago bien. Tengo que enviar tres caracteres distintos, uno dando click en el botón respectivo, los caracteres son <, = y >. Hago doble click en algún botón e ingreso el siguiente código

Código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    SerialPort1.Write("<")
End Sub

el caracter < lo pongo entre comillas porque tengo entendido que asi se deben mandar las strings, aunque no se si haya alguna otra manera de hacerlo, si deba escribirlo en hexadecimal o si hay que hacerlo de otra manera. Después el pic al recibir uno de esos caracteres debe dar una respuesta a la PC para que sepa que el envío tuvo éxito. En este caso el pic envia un 1 en ASCII (osea un 0x31 hexadecimal), en visual basic intento recibirlo así

Código:
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    Dim rx As Integer
    rx = SerialPort1.ReadByte()
End Sub

Pero de nuevo no se si esa es la forma correcta de recibir un dato. Espero me puedan ayudar porque al probar el programa con el pic no funciona. Para ver que el pic no fuera el del problema programé otro pic que envía esos 3 caracteres y el otro al recibirlos si da una respuesta satisfactoria, entonces el problema debe estar en Visual Basic. Para adaptar los niveles ttl del pic a rs232 de la pc uso este circuito http://www.pablin.com.ar/electron/circuito/mc/ttl232/index.htm el circuito funciona, ya lo he probado con éxito en otras ocasiones así que solo me queda culpar a mi programación en visual basic.

¿Alguien me puede ayudar? Muchas gracias!
 
Hola:

No puedo ayudarte en Visual Basic .net 2008 pero si en Visual C#. Estoy haciendo un manual sobre ello en Visual C#. Cuando acabe, buscaré colaboradores para que me lo pasen a Visual Basic .net 2008. Visual C# me funciona de maravilla.

Envía datos con este código. Es de C#, pero quizás te valga en dar ideas.

No debería ponerlo porque no he acabado el manual pero bueno. Este código lo pones dentro de un botón onClick
Código:
            byte[] miBuffer = new byte[1];
            miBuffer[0] = 0x74; // Letra "t" del ASCII.
            this.serialPort1.Write(miBuffer, 0, miBuffer.Length);
Si quieres enviar tres carácter uno detrás del otro.

Código:
            byte[] miBuffer = new byte[3];
            miBuffer[0] = 0x3C;     // "<" en ASCII
            miBuffer[1] = 0x3D;     // "=" en ASCII
            miBuffer[2] = 0x3E;     // ">" en ASCII
            this.serialPort1.Write(miBuffer, 0, miBuffer.Length);
Estoy investigando con botones de envío y recibir datos más PWM de temperatura, velocidad del motor, etc...

Lo de recibir dato es algo similar así.

Código:
public partial class Form1 : Form

    {

        // Utilizaremos un string como buffer de recepcion

        int Recibido;

 

        public Form1()

        {

            InitializeComponent();

            // Ejecutar la funcion Recepcion por disparo del Evento 'DataReived'

             this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.RecibeByte);

        }

 

        private void RecibeByte(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

        {

            Recibido = this.serialPort1.ReadByte();

            this.Invoke(new EventHandler(ActualizarBotones));

        }

 

        private void ActualizarBotones(object s, EventArgs e)

        {

            if (Recibido==0x60)

            {

                this.button1.Text = "0";

            }

            else

            {

                if (Recibido==0x61)

                {

                    this.button1.Text = "1";

                }

            }

        }

       

        // Al cargar el form

        private void Form1_Load(object sender, EventArgs e)

        {

            // Abrir el puerto de comunicaciones

            this.serialPort1.BaudRate = 2400;

            this.serialPort1.PortName = "COM1";

            this.serialPort1.Open();

            this.Text = this.serialPort1.PortName +":"+ this.serialPort1.BaudRate;

        }

 

    }

}
Quizás encuentre algo aquí.
http://msdn.microsoft.com/es-es/library/default.aspx

Un cordial saludos.
 
Meta, cuantas páginas tiene tu manual? Creo que por ahi dijiste una vez que ya llevabas 200 páginas, si habla sobre comunicación serial con Visual C# más que un manual será todo un libro :LOL:
 
Ya quedó, en VB2008 es parecido que con C#:

Código:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim data(1) As Byte
        data(0) = Asc(1)
        SerialPort1.Write(data, 0, 1)
        Label1.Text = data(0)
    End Sub

En ese caso estoy transmitiendo un 1 en ASCII, la función Asc() obtiene el código numérico correspondiente al caracter ASCII, siempre es más fácil escribir el símbolo ASCII que escribir un 49
 
pic-man dijo:
Ya quedó, en VB2008 es parecido que con C#:

Código:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim data(1) As Byte
        data(0) = Asc(1)
        SerialPort1.Write(data, 0, 1)
        Label1.Text = data(0)
    End Sub

En ese caso estoy transmitiendo un 1 en ASCII, la función Asc() obtiene el código numérico correspondiente al caracter ASCII, siempre es más fácil escribir el símbolo ASCII que escribir un 49

Cierto, también puedes escribirlo en binario b'00000001'. Lo bueno que lo entienda. ejejjeje.
 
Creo que en Visual Basic no se pueden escribir los números directamente en binario. No estoy seguro, pero creo que no se puede. Además el código ASCII de 1 no es b'00000001', 1 en ASCII es 49 decimal, 31 hexadecimal y 110001 en binario.
 
tengo problemas en cuanto a cuando abrir y cerrar el puerto , cuando quiero transmitir con el pic el puerto tiene que estar cerrado?

o se reciben de igual manera y solo hay que abrirlo para transmitir.

estoy usando el vb 20008
 
Lo tienes que dejar abierto esperando respuesta. También abrirlo cuando lo vas a usar y luego cerrar si no lo vas a usar. estoy haciendo un manual actualmente pero en Visual C# .net express.
 
Hola a todos estoy en este momento realizando la comunicacion serial con un microcontrolador y VB express edition 2008, e tratado de hacer la comunicacion pero me sale un mensaje de error que
tiene que ver con algo de un archivo " IO.dll " como e podido ver ustedes lo han logrado si es posible y me pueden colaborar se los agradeceria enormemente.

muchas gracias
 
Hola, veo que este tema tiene algunos meses sin actividad. Soy nuevo en el foro y pues veo que es un foro excelente. Escribo aquì porque veo que el tema ya està abierto y no quiero abrir otro tema sobre lo mismo. Espero alguien me pueda ayudar. Estoy haciendo una interfaz Visual Basic 2008 con Pic16F72. En donde envìo un byte con VB y lo recibo con el pic y viceversa. Con el Pic no tengo problemas lo domino perfectamente. Pero por la parte de VB soy bastante inexperto. He logrado mandar bytes con Visual Basic, pero no sè como puedo recibirlos. Alguna ayuda? Estoy utilizando la subclase SERIAL PORT de visual basic. Espero alguien pueda ayudarme con algùn còdigo de recepciòn.
 
Muchas gracias colega Meta, el link ya lo habìa visto y no me funcionaba, por eso me atrevì a preguntar , pero le he pedido a un amigo que de favor abriera el link por mì y ya funcionò. Luce como un excelente contenido. Muchas gracias por la ayuda. Lo leerè con detenimiento y si tengo dudas los molestarè de nuevo con ellas. Saludos a todos.
 
Atrás
Arriba