Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/10/2008 #1


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/ci...l232/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!
01/11/2008 #2

Avatar de Meta

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.
01/11/2008 #3


Gracias meta, lo que pusiste me sirvió de guia y encontré en MSDN este enlace donde muestran como escribir al puerto serie, en cuanto pueda lo pruebo.

http://msdn.microsoft.com/es-es/library/1050fs1h.aspx

Sobre tu manual en cuanto lo termines avisa, me gustaría colaborar para hacer el equivalente en visual basic 2008.
01/11/2008 #4

Avatar de Meta

Avisaré, me falta algo más de 100 páginas. A ver si entre todos hacemos algo, que esto se usa mucho.
01/11/2008 #5


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
02/11/2008 #6

Avatar de Meta

Ahora llevo más páginas. Es más largo de lo que creía. ¿Ya te funciona lo que buscabas?
02/11/2008 #7


Lo probaré por la mañana que ahorita vengo llegando de la calle y no estoy en condiciones de montar un circuito.
02/11/2008 #8


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
02/11/2008 #9

Avatar de Meta

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.
02/11/2008 #10


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.
02/11/2008 #11

Avatar de Meta

Hola

Cuando acabes la interfaz me avisas. El manual que estoy haciendo acabaré pasarlo también en Visual Basic ya que lo quiere todo el mundo. Ahora me falta unas 50 páginas si no me surgen ideas nuevas para completar. Sin contar con Linux.

Saludos.

EDITO:
http://www.geekpedia.com/tutorial137...-and-back.html
http://www.codeproject.com/KB/cs/balamurali_balaji.aspx
18/11/2008 #12


Problemas con el open()
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
18/11/2008 #13

Avatar de Meta

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.
12/05/2009 #14


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
12/05/2009 #15

Avatar de Meta

Buenas:

Aquí hay un manual sobre lo que buscas.
http://www.abcdatos.com/tutoriales/tutorial/v12.html

Saludo.
25/07/2009 #16


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.
25/07/2009 #17

Avatar de Meta

Mira este enlace por si te parece bien.

http://www.abcdatos.com/tutoriales/tutorial/v12.html

Saludo.
25/07/2009 #18


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.
25/07/2009 #19

Avatar de Meta

Este otro de Visual C# es más completo la explicación. Ten paciencia en cargar el PDF que ocupa mucho.

http://www.abcdatos.com/tutoriales/tutorial/z9521.html

O lo miras por aquí.

http://www.slideshare.net/Metaconta/...a-presentation

Saludo.
08/08/2009 #20


He aplicado el codigo de VB 2008 y me dice que el puerto esta cerrado.

Alguna solucion?, de antemano gracias
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.