Comunicación serial con Visual Basic 2008

Buenas:

Te pido una cosa. Pon botones en el formulario, diseña tu propia Interfaz y pones una captura por aquí de cómo quieres que sea. ¿OK?

Ya me encargaré de la programación de los botones y luego del PIC.

Saludo.
 
hola META la interfaz ya la hice es la misma que tu pusiste con la t,b,a,l aunque yo le e puesto A,B,C,D
lo que no se hacer es lo de la lucesita que cuando reciba 000A se encienda y cuando reciba 000a se apage
por otro lado el programa del pic es el 2º que puse que funciona bien gracia pepe
 
Hola META Haber si puedo explicarme bien de lo que necesito se trata del interfaz que tiene 4
pulsadore t,b,a,l ese lo hice y me funciona bien pero el programa del pic no es igual el prog es el
2 que puse.Si te fijas en el prog veras que tiene 4 pulsadores para que se pueda acionar desde
el pic y desde el pc por eso es muy ynportante que cada pulsador tenga una lucesita encima
a continuacion paso a esplicate los datos que tienen que enviar cada cosa yo lo escriba como
sea ten presente que todo se tramsmite ascii datos que tiene que manda el interfaz.
1º pulsador 000A 1ª lucesita recibira 000A y debe encenderse con 000a apagarse
2º pulsador 000B 2ª lucesita recibira 000A y debe encenderse con 000b apagarse
3ª pulsador 000C 3ª lucesita recibira 000C y debe encenderse con 000b apagarse
4º pulsador 000D 4ª lucesita recibira 000D y debe encenderse con 000d apagarse

No te he entendido bien desde el principio. Por lo que te entiendo, que he estado leende varias veces esto. EL PIC tiene 4 pulsadores físicos, no son tipo interruptor. Al pulsarlo debe enviar en ASCII lo que indicas arriba. Si pulso el pulsador (no interruptor) el 3º llamado 000C. La lucesita de la interfaz (¿o Led conectado al PIC?) se enciende si recibe el ASCII 0C y se apaga cuando recibe 0c.

Si esto es así como dices, no te había entendido desde el principio y te estaba vovliendo loco o loca.

Voy hacer una prueba de que al pulsar el 000A, envía una lucesita encendida con 0A, al pulsar de nuevo el mismo pulsador, la lucesita de la Interfaz se apaga enviando por le puerto serie el caracter ASCII 0c.

tabla_ascii.gif


Estoy haciendo pruebas, cuando tenga resultado te aviso. Confirmame si al final te he entendido lo que buscas. Déjame claro si las entradas del PIC son pulsadores o interruptores, cosa que no es lo mismo. Cuando me confirmes esta perte, ya nos meteremos en la parte de manejar varios PIC en el RS232 que no se como lo harás.
 
Última edición:
Hola META paso a lo de los pine PORTA0 a 2 tres interruptores de direccion PORTA,3 a 4 a
virtual terminal PORTB,0 a 3 cuatro led PORTB,4 a 7 cuatro pulsadores. Meta haz el circuito en
proteus veras como lo entiendes vien lo que me tienes que hacer es que un pulsador del interfaz
mande 000A cada vez que pulse y una luz que cuando reciba 000A se encienda y cuando reciba
000a se apague me da lo mismo si lo haces en basic como en C dado que lo pusistes en los 2
lenguajes el resto puedp hacerlo yo no te olvides que si los interruptores de porta estan cerrados
la direcion es 000.....y y si estan habierto la direccion es 111....y gracias por tu tienpo cualqui
er duda dimelo pepe

Meta no te olvides que que los interruptores y puldadores yo los tengo conectados a masa y
los 3 interruptores de porta con 3 resistencias de 10k a5v las de los pulsadores de portb no
hace falta porque estan activadas las resistencias internas gracias pepe

Meta lo de varios es lo siguien te yo pondre X pulsadores dividido en grupos de 4 pulsadores en
el interfaz el1º pulsasor mandara 000A, el2º pulsador 000B el 3º pulsador 000C y el 4º pulsador
000D y los recibira el pic que tenga los 3 pulsadores de porta cerrados en el 2º grupo de pulsa-
dores mandara 001A,001B,001C,00D y los recibira el pic que tenga los interruptores del porta que
coincidan con dicha combinacion asis asta 8 con el pil 16f84 y 32 con el pic 16f628 hata ahora
pepe

META no te olvides que el programa del pic es el 2º que puse.Con respecto a lo tuyo e estado mirendo sobre
el 16f887 y no hay mucha cosa pero estoy seguro que configurando bien las interrupciones y que los puerto
que se use esten configurados como digutales funcionara hasta ahora pepe
 
Última edición:
No te tengo que hacer nada. ;)

Bormas a parte. Me cuesta entenderte lo que me expresas. Si es posible, coge al menos el Paint de Windows o un papel y lápiz para que hagas el esquema del circuito antes de programar.

Vamos hacerlo paso a paso, ya me encargaré de pasarlo a proteus en simulación.

Saludo.
 
Hala META ya lo tengo el circuito hecho en proteus pero no allo la forma de copiar y pegar lo
tengo en el pain pero tampoco.Pero veras cuando lo agas el programa que es el2º veras como
con lo simple que es "ALUCINAS" yo lo tengo hecho con un pic en un circuito y despues tengo
otro con tres pic y funciona a la perfecion por favor tomate la molestia de hacerlo en proteus
y veras como lo entiendes bien gracias pepe

Hola META de lo que me dices que te cuesta entenderme te dire que en una oportunida di clases de electri_
cidad en venezuela en una escuela industrial, para que me ejilizacen los papeles y a los 15 dias me dijo el
rector pepe me consta que es usted un gran electricista,pero en mi colegio usted no da mas clase
hasta ahora pepe
 
Última edición:
Captura la pantalla con el botón Impr PetSis del teclado de tu PC, con el proteus abierto, que se vea el circuito. Luego abres el Paint de Windows, luego pulsas "Control + V" que es pegar. Luego le dar guardar como... en formato .jpg. No quiero perder el tiempo adivinando.

La imagen puedes subirla en el foro o por este enlace.
http://www.subeimagenes.com/

Me imagino que el código segundo es este que me dices. https://www.forosdeelectronica.com/posts/464938/
;)
 
Última edición:
Entendido.

Al menos con el Paint, escribes el dibujo con el lápiz. Te esperaré o envía el esquema del Proteus por aquí comprimido en .zip.

Esperando...

Saludo.
 
http://www.subeimagenes.com/img/006-24217.html


Hola Meta al final pude poner el circuito,gracias a ti, por que yo en algunas cosas soy muy tocho.Te dire
en en pic de la derecha no me e dado cuenta y les falta las resistencias de 10K de PORTA,0,1,2 .Por otra
parte tienes que cargar los dos pic con el mismo programa pero con direcciones distintas por ejen pic 1
(de la izquierda) todos los interructores habiertos y pic 2 (de la derecha todos cerrados y cuando varies
los pulsadores lo entederas mejor.muchas gracias por tu tiempo y no tires la toalla que veras al final que
no es una idea rara asta luego pepe
 
Última edición:
Buenas:

puerto-serie-24226.jpg


Pedazo de esquema hiciste. Si puedes pasarlo el circuuito del Proteus cuando lo termines bien, mejor que mejor. Lo envías por e-mail. Lo puedes ver aquí: Mejor leo las Normas de Participación@forosdeelectronica.com


Fíjate el código por aquí. El base que he dado.
Código:
[COLOR=Blue]using[/COLOR] System;
[COLOR=Blue]using[/COLOR] System.Collections.Generic;
[COLOR=Blue]using[/COLOR] System.ComponentModel;
[COLOR=Blue]using[/COLOR] System.Data;
[COLOR=Blue]using[/COLOR] System.Drawing;
[COLOR=Blue]using[/COLOR] System.Linq;
[COLOR=Blue]using[/COLOR] System.Text;
[COLOR=Blue]using[/COLOR] System.Windows.Forms;
[COLOR=Blue]using[/COLOR] System.IO.Ports;

[COLOR=Blue]namespace[/COLOR] Puerto_Serie
{
  [COLOR=Blue]public[/COLOR] [COLOR=Blue]partial[/COLOR] [COLOR=Blue]class[/COLOR] Form1 : Form
  {
    [COLOR=Green]// Utilizaremos un string como buffer de recepcion[/COLOR]
    [COLOR=Blue]string[/COLOR] Recibidos;

    [COLOR=Blue]public[/COLOR] Form1()
    {
      InitializeComponent();
      [COLOR=Green]// Abrir puerto mientra se ejecute la aplicación[/COLOR]
      [COLOR=Blue]if[/COLOR] (!serialPort1.IsOpen)
      {
        [COLOR=Blue]try[/COLOR]
        {
          serialPort1.Open();
        }
        [COLOR=Blue]catch[/COLOR] (System.Exception ex)
        {
          MessageBox.Show(ex.ToString());
        }
      }
      [COLOR=Green]// Ejecutar la funcion Recepcion por disparo del Evento 'DataReived'[/COLOR]
      serialPort1.DataReceived += [COLOR=Blue]new[/COLOR]
      System.IO.Ports.SerialDataReceivedEventHandler(Recepcion);
    }
    [COLOR=Green]// Al recibir los datos[/COLOR]
    [COLOR=Blue]private[/COLOR] [COLOR=Blue]void[/COLOR] Recepcion([COLOR=Blue]object[/COLOR] sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
      [COLOR=Green]// Acumular los carácteres recibidos a nuestro 'buffer' (string)[/COLOR]
      Recibidos += serialPort1.ReadExisting();
      [COLOR=Green]// Invocar o llamar al proceso de tramas[/COLOR]
      [COLOR=Blue]this[/COLOR].Invoke([COLOR=Blue]new[/COLOR] EventHandler(Actualizar));
    }
    [COLOR=Green]// Procesar los datos recibidos en el buffer y extraer tramas completas[/COLOR]
    [COLOR=Blue]private[/COLOR] [COLOR=Blue]void[/COLOR] Actualizar([COLOR=Blue]object[/COLOR] s, EventArgs e)
    {
      [COLOR=Green]// Asignar el valor de la trama al textBox[/COLOR]
      richTextBox1.Text = Recibidos;
    }
  }
}
En la variable
Recibidos Recibidos es donde reciben los Bytes en ASCII. Claro que debes ponerlo en su lugar por cada lucesitas que deseas y que lo entiendas.

Código:
[COLOR=blue]private[/COLOR] [COLOR=blue]void[/COLOR] textBox1_TextChanged([COLOR=blue]object[/COLOR] sender, [COLOR=#2b91af]EventArgs[/COLOR] e)
        {
            [COLOR=blue]char[/COLOR][] charNum;
            [COLOR=blue]if[/COLOR] (textBox1.Text.Length > 0)
            {
                [COLOR=blue]string[/COLOR] Str = textBox1.Text;
                charNum = Str.ToCharArray();
                [COLOR=blue]switch[/COLOR] (([COLOR=blue]int[/COLOR])charNum[0])
                {
                    [COLOR=blue]case[/COLOR] 65:    [COLOR=green]// 'A'[/COLOR]
                    [COLOR=blue]case[/COLOR] 66:    [COLOR=green]// 'B'[/COLOR]
                    [COLOR=blue]case[/COLOR] 67:    [COLOR=green]// 'C'[/COLOR]
                    [COLOR=blue]case[/COLOR] 68:    [COLOR=green]// 'D'[/COLOR]
                    [COLOR=blue]case[/COLOR] 69:    [COLOR=green]// 'E'[/COLOR]
                    [COLOR=blue]case[/COLOR] 70:    [COLOR=green]// 'F'[/COLOR]
                        [COLOR=#2b91af]MessageBox[/COLOR].Show([COLOR=#a31515]"Mayuscula"[/COLOR] + charNum[0]);
                        [COLOR=blue]break[/COLOR];
                    [COLOR=blue]case[/COLOR] 97:    [COLOR=green]// 'a'[/COLOR]
                    [COLOR=blue]case[/COLOR] 98:    [COLOR=green]// 'b'[/COLOR]
                    [COLOR=blue]case[/COLOR] 99:    [COLOR=green]// 'c'[/COLOR]
                    [COLOR=blue]case[/COLOR] 100:   [COLOR=green]// 'd'[/COLOR]
                    [COLOR=blue]case[/COLOR] 101:   [COLOR=green]// 'e'[/COLOR]
                    [COLOR=blue]case[/COLOR] 102:   [COLOR=green]// 'f'[/COLOR]
                        [COLOR=#2b91af]MessageBox[/COLOR].Show([COLOR=#a31515]"Minuscula"[/COLOR] + charNum[0]);
                        [COLOR=blue]break[/COLOR];
                }
            }
        }
Me pica mucho la curiosidad tu circuito. Sigo investigando la parte de la programación, ya lo adaptaremos a C#, C++ y VB .net
 
Última edición por un moderador:
Hola meta ten presente que el interfaz que yo hice es el de visual basic 2008,te lo digo porque si ahora
me pones lo de las lucesitas en visual basic.net pues no me va a funcionar o al menoas que me pongas
todo el codigo sin el texbox.gracias hasta ahora
 
Hola meta mira con detalle lo queexplico a continuacion yo te e puesto un pulsador y una luz porque sabiendo como es el codigo de uno se sabe el de todos 1ºPULSADOR ENVIA 000A 1 LUZ RECIBE 000A PARA ENCENDERSE,RECIBE 000a PARA APAGARSE
2ºPULSADOR ENVIA 000B 2º LUZ RECIBE 000B PARA ENCENDERSE,RECIBE 000b PARA APAGARSE
3º PULSADOR ENVIA 000C 3 LUZ RECIBE 000C PARA ENCENDERSE,RECIBE 000c PARA APAGARSE
4º PULSADOR ENVIA 000D 4 LUZ RECIBE 000D PARA ENCENDERSE,RECIBE 000d PARA APAGARSE
5 PULSADOR ENVIA 001A 5 LUZ RECIBE 001A PARA ENCENDERSE ,RECIBE 001a PARA APAGARSE
6 PULSADOR ENVIA 001B 6 LUZ RECIBE 001B PARA ENCENDERSE RECIBE 001b PARA APAGARSE


Ten presente que la lucesita tiene que cambiar con el mensaje que reciba del pic
Esto lo e pensado asi por dos motivos 1 si hay un fallo en la comunicacion la luz no te engaña
2º todos los pic tienen el mismo programa solo hay que cambiar la combinacion de porta,0,1,2
para que los mensajes cada uno se haloje en su sitio por eje pic 1 000+ A,B,C,D PIC 2 001+A,B,C,D
3 PIC 010+,A,B,C,D 4 PIC 110+ A,B,C,D 5 PIC 001+ A,B,C,D, 6 PIC 101+A,B,C,D, 7 PIC 110+A,B,C,D
8 PIC 111+A,B,C,D
Esto es asi porque suponiendo que tu tienes una instalacion con x pic y se estropea uno lo puedes
sustituir por otro porque todos son iguales solo hay que ponerle la direccion adecuada con los
interruptores de porta,0,1,2
hata ahora pepe

Primero lo haré bajo C#, luego lo paso a VB.

En esta parte que dices para entenderte mejor.

1ºPULSADOR ENVIA 000A 1 LUZ RECIBE 000A PARA ENCENDERSE,RECIBE 000a PARA APAGARSE.


Por lo que te entiendo, el pulsador envía algo a la Interfaz Visual Studio del PC por puerto serie que ese algo es 000A. Lo vuelve a enviar desde el PC al PIC16F84A de nuevo, que es el 000A, la luz enciende, si envía 000a la luz del PIC se apaga.

¿Estás diciendo que el mismo pulsador del PIC hace de 000A y 000a?

¿Como si fuera un ON-OFF?

Espero que me entregues por email lo del Proteus, los dos esquemas que me digiste. En cuanto el cambio de configuración de la dirección del PIC, si se puede controlar con otro PIC. Por ahora nos centramos manualmente como estás haciendo.
 
Última edición:
Hola meta si anbos pulsadores hacen lo siguiente:e si pulsas el pulsador del interfaz pc .siempre mandara
000A cuando sicha señal llege al pic y si este esta apagado,se encendera y mandara al pc 000A si por el
contrario el pic esta encendido,se apagara y mandara al pc 000a
el pulsador del pic hace lo mismo,hay que aprobecha que cuando el pc reciba 000A encienda la luz del pulsador
y cuando el pc reciba 000a la luz del pulsador del pc se apague. depueste mado los esquemas hasta
ahora pepe

Claro que hay un lio porque no lo especifico bien la luz del PC recibe 000A para encenderse y 000a para apa-
garse sin enbargo el pic siempre recibe 000A y el se encarga de hacer la inversion
 
Última edición:
Hola meta si anbos pulsadores hacen lo siguiente:e si pulsas el pulsador del interfaz pc .siempre mandara
000A cuando sicha señal llege al pic y si este esta apagado,se encendera y mandara al pc 000A si por el
contrario el pic esta encendido,se apagara y mandara al pc 000a

¿Con el botón desde la Interfaz del PC al PIC siempre envía 000A?


el pulsador del pic hace lo mismo,hay que aprobecha que cuando el pc reciba 000A encienda la luz del pulsador
y cuando el pc reciba 000a la luz del pulsador del pc se apague. depueste mado los esquemas hasta
ahora pepe

Mejor encárgate de la programación del PIC.

Claro que hay un lio porque no lo especifico bien la luz del PC recibe 000A para encenderse y 000a para apa-
garse sin enbargo el pic siempre recibe 000A y el se encarga de hacer la inversion

No te olvides de los dos esquemas.

Otra cosa.
Son 4 byte a enviar al PIC, lo enviaré a tramas el 000A, te pondré un pequeño código.

Haz una prueba, en tal caso, prefiero que te bajes el
Visual C# Express 2010 gratuito. De todas formas también te paso el VB .net.

En el formulario introduces un botón, lo puedes llamar 000A. Su nombre interno es button_000A. Como indica los códigos de abajo, la interfaz desde el PC siempre envía 000A, nunca 000a. El cuadro de texto abajo lo puedes ignorar.


0.01.jpg

C#
Código:
        private void button_000A_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[4];
            mBuffer[0] = 0x0; // Es el número 0.
            mBuffer[1] = 0x0;
            mBuffer[2] = 0x0;
            mBuffer[3] = 0x41; // Es la letra A.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);

            // También puedes enviarlo así:
            // byte[] mBuffer = Encoding.ASCII.GetBytes("000A");
            // serialPort1.Write(mBuffer, 0, mBuffer.Length);

        }
VB .net
Código:
Private Sub button_000A_Click(sender As Object, e As EventArgs)
    Dim mBuffer As Byte() = New Byte(3) {}
    mBuffer(0) = &H0 ' Es el número 0.
    mBuffer(1) = &H0
    mBuffer(2) = &H0
    mBuffer(3) = &H41 ' Es la letra A.
    serialPort1.Write(mBuffer, 0, mBuffer.Length)

    ' También puedes enviarlo así:
    ' byte[] mBuffer = Encoding.ASCII.GetBytes("000A");
    ' serialPort1.Write(mBuffer, 0, mBuffer.Length);

End Sub
 
Última edición:
OK. Puedes usar el SkyDriver del www.hotmail.com o el site de google.

Deja investigar, ya que esta atrde tengo trabajo fuera y no estaré mucho en mi casa. El proyecto es muy interesante.

Le heché un ojo rápido al esquema. Parece que funciona bien. Pulsé las direcciones del PIC 1, la verdad que los Led fucniona igual.

No se qeu hiciste con el formulario que me da fallos, no lo puedo abrir el Form, salen errores.

¿Puedes crearlo desde 0?
Puedes subir el .rar por este foro.
 
Última edición:
Hola META me ha pasado un pequeño problema,tengo un amiguete que es un sabio en esto y me dice¿te pongon el W7 que funciona mejor? en definitiva que en un principio se me ha ido a pique el PC por suerte
se ha podido recuperar pero todos los rero los archibos los he perdido por suerte todos los ASM los imprimo
en papel,lo unico que tengo que hacer es teclear otra vez
Una pregunta, me he bajado otra vez el visual C# y he echo un interfaz de 32 pulsadores,y 32 texbox para
la lucesita (que me imajino que es eso) encima de los pulsadores.El caso es que lo depure y todo bien
apague el ordenador,cuando lo encendi fuy otra vez a cargar el programa y cuando lo cargo desde la carpeta no se habilita la flechita de depuracion osea que no me sale otra vez la pantalla con los 32 pulsadores.como te dije me me compre el libro de visual basic.net de francisco charter.si sabes algun otro
que sea mas para pricipiantes dimelo.gracias pepe
 
Si, es mejor usar el Windows 7, está más optimizado para usar el Visual Studio 2010.

El más fácil dicen que es este, pero es muy caro.

MU00277701.jpg


http://www.anayamultimedia.es/cgigeneral/ficha.pl?id_sello_editorial_web=23&codigo_comercial=2301537

Cuando tenga los ejemplos me los pasa.

Quiero comprarme este

MU00277401.jpg


http://www.anayamultimedia.es/cgigeneral/ficha.pl?id_sello_editorial_web=23&codigo_comercial=2301538

Cuesta mucho más caro y tiene cerca de 300 páginas más y con más ejemplos. Es más completo.

Saludo.
 
Última edición:
Atrás
Arriba