# Comunicación serial con Visual Basic 2008



## pic-man

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!


----------



## 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.


----------



## pic-man

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.


----------



## Meta

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


----------



## pic-man

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


----------



## Meta

Ahora llevo más páginas. Es más largo de lo que creía. ¿Ya te funciona lo que buscabas?


----------



## pic-man

Lo probaré por la mañana que ahorita vengo llegando de la calle y no estoy en condiciones de montar un circuito.


----------



## pic-man

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


----------



## 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.


----------



## pic-man

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.


----------



## 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_Converting-from-decimal-to-binary-and-back.html
http://www.codeproject.com/KB/cs/balamurali_balaji.aspx


----------



## m_mandrake

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


----------



## 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.


----------



## sarjasalc

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


----------



## Meta

Buenas:

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

Saludo.


----------



## Skynet

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.


----------



## Meta

Mira este enlace por si te parece bien.

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

Saludo.


----------



## Skynet

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.


----------



## 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/pic-rs232-puerto-serie-con-pic16f84a-presentation

Saludo.


----------



## Toño

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

Alguna solucion?, de antemano gracias


----------



## Meta

Bájate el proyecto del ejemplo ya compilado y compruébalo, a todo el mundo le funciona.

O vete al administrador y comrpueba los puertos si los usa en otra aplicación o no.


----------



## Toño

La verdad es que lo que quiero en si es comunicarme con el arduino mediante el visual basic, lo que estoy usando en si no es un puerto serie real, si no el convertidor USB/serial que trae el mismo arduino no se si esto tenga algo que ver con que me indique que mi puerto esta cerrado.

PD. el puerto no esta siendo usado en ninguna otra aplicacion


----------



## Toño

Ya pude resolver mi problema, el problema era el nombre del puerto COM, estaba usando por default el COM3, solo lo pase a COM1 y listo...


----------



## Skynet

Que tal colegas. Bueno, primero que nada quiero felicitar a todos los que desarrollaron esta aplicación, es excelente y funciona de maravilla, disculpen la tardanza, pero había estado trabajando y no había podido darles las gracias. 
Para esto, pues... solo me queda hacerles una última pregunta, saben como le podría hacer para elegir el puerto com a utilizar? ya que mi computadora cuenta con dos puertos com, y por default el programa en visual basic direcciona el puerto COM1, pero quisiera que me manejara el puerto COM3, algúna idea. 
Muchas gracias.


----------



## Meta

No recuerdo donde, pero en un lugar de este foro puse un enlace que no recuerdo de como hacer. Te lo detecta automáticamente desde el comboBox y si tiens del COM3 al COM4 virtual también.


----------



## Skynet

Saludos, Meta, acabo de resolver el problema de la siguiente forma: En la ventana de propiedades de SerialPort en visual basic, solo colocas COM3, o el COM que gustes en la parte que dice PortName. Compilas y listo, funciona de maravilla. Muchas gracias a todos. En especial al colega Meta. 
Saludos.


----------



## Meta

El método que digo lo selecciona con un  ComboBox, te había entendido mal.

Este manual es más completo pero de Visual C#.

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

Saludo.


----------



## Skynet

Muchas gracias, una disculpa si no me expliqué bien. Bueno hecharé un vistazo a ese manual, suenta muy interesante. Una vez mas, Gracias.


----------



## timduncan

hola Picman.... una pequeña duda, por lo que observo estas enviando una orden al pic "perfecto" a traves del puerto serial.
Pero no hay que "inicializar el puerto serial primero para poder utilizarlo", te digo por que en esta pagina de MSDN salia que habia q hacer esto primero. estoy en la duda ???
porfavor.
http://blogs.msdn.com/tolong/archive/2006/08/07/690851.aspx
Gracias


----------



## timduncan

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


 
hola Picman.... una pequeña duda, por lo que observo estas enviando una orden al pic "perfecto" a traves del puerto serial.
Pero no hay que "inicializar el puerto serial primero para poder utilizarlo", te digo por que en esta pagina de MSDN salia que habia q hacer esto primero. estoy en la duda ???
porfavor.
http://blogs.msdn.com/tolong/archive...07/690851.aspx
Gracias


----------



## timduncan

compila el programa con el pic conectado.


----------



## Leoglz

Una pregunta, tengo el convertidor de usb a serial , mi computadora no tiene puerto serie ni paralelo, el convertidor trae tambien de serie a paralelo, podria mandar desde visual basic por el puerto serie, y que la salida sea por el puerto paralelo, o lo tengo que enviar directamente en paralelo desde el programa, la compu solo me dectecta el com como serie por eso es mi duda, necesito utilizar el puerto paralelo.


y si vas a usar el puerto serie si es necesario que lo abras, usa el codigo de la pagina que pusiste si funciona

SerialPort1.Open()
SerialPort1.Close()


----------



## Meta

Por supuesto mi muy distinguido amigo.


----------



## sebitronic

Hola, he empezado un proyecto en el cual pretendo conectar un circuito a la PC, el circuito consta de un LM35 en cual leo con un PIC16F876A. El PIC se encarga de leer el sensor, convertir el valor leido en su equivalente en ASCII enviar este resultado seguido por el caracter "-" para anunciar el fin de la transmición, la parte del PIC la domino con gran facilidad, es mas, simule el programa en el ISIS del PROTEUS y me responde bien, el problema viene a la hora de hacer la programacion de la PC. El programa de la PC no responde. Espero que puedan ayudarme. Muy atte. sebitronic 

PD: dejo los programas del micro y la PC.



		Código:
	

; Programa encargado de leer un sensor
;de temperatura LM35 y enviar la 
;informacion a la PC.

	LIST	P=16F876A
	INCLUDE	"P16F876A.INC"

#DEFINE	BIN		20H
#DEFINE 	BCDL		2AH
#DEFINE	BCDH		2BH
#DEFINE	RCBUF	2CH


__CONFIG	_CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF 

		ORG	0X0000
		GOTO		INICIO 

INICIO	MOVLW	B'10010000'
		MOVWF	RCSTA
		MOVLW	B'11000001'
		MOVWF	ADCON0
		BSF		STATUS,RP0
		BCF		OPTION_REG,NOT_RBPU
		MOVLW	H'F0'
		MOVWF	TRISB
		BCF		TRISC,4
		MOVLW	B'00100100'
		MOVWF	TXSTA
		MOVLW	D'129'
		MOVWF	SPBRG
		MOVLW	B'01001111'
		MOVWF	ADCON1
		BCF		STATUS,RP0
		CLRF		PORTA
		CLRF		PORTB
		CLRF		PORTC

LOOP		BSF		ADCON0,GO
L1		BTFSC	ADCON0,GO
		GOTO		L1
		BTFSC	PIR1,RCIF
		CALL		RECEPT
		MOVF		ADRESH,W
		MOVWF	20H
		CALL		L5
		MOVF		22H,W
		MOVWF	TXREG
L2		BTFSS	PIR1,TXIF
		GOTO		L2
		MOVF		21H,W
		MOVWF	TXREG
L3		BTFSS	PIR1,TXIF
		GOTO		L3
		MOVLW	'-'
		MOVWF	TXREG
L4		BTFSS	PIR1,TXIF
		GOTO		L4

		GOTO		LOOP
	
L5      clrf    BCDH
        clrf    BCDL
BCD_HIGH
        movlw   .100
        subwf   BIN,f
        btfss   STATUS,C
        goto    SUMA_100
        incf    BCDH,f
        goto    BCD_HIGH
SUMA_100
        movlw   .100
        addwf   BIN,f
        movlw   0x0F
        movwf   BCDL
BCD_LOW movlw   .10
        subwf   BIN,f
        btfss   STATUS,C
        goto    SUMA_10
        incf    BCDL
        movlw   0x0F
        iorwf   BCDL
        goto    BCD_LOW
SUMA_10 movlw   .10
        addwf   BIN,f
        movlw   0xF0
        andwf   BCDL,f
        movf    BIN,w
        iorwf   BCDL,f
		
		CLRF		22H
		CLRF		21H
		BTFSC	BCDL,0
		BSF		21H,0
		BTFSC	BCDL,1
		BSF		21H,1
		BTFSC	BCDL,2
		BSF		21H,2
		BTFSC	BCDL,3
		BSF		21H,3
		BSF		21H,4
		BSF		21H,5
		BTFSC	BCDL,4
		BSF		22H,0
		BTFSC	BCDL,5
		BSF		22H,1
		BTFSC	BCDL,6
		BSF		22H,2
		BTFSC	BCDL,7
		BSF		22H,3
		BSF		22H,4
		BSF		22H,5

        RETURN

RECEPT	MOVF		RCREG,W
		MOVWF	RCBUF
		MOVLW	'D'
		SUBWF	RCBUF,W
		BTFSC	STATUS,Z
		BSF		PORTC,0
		MOVLW	'S'
		SUBWF	RCBUF,W
		BTFSC	STATUS,Z
		BCF		PORTC,0
		RETURN



END




		Código:
	

Public Class Form1


    Dim aux As Byte
    Dim rcbuf As Byte
    Dim textout As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Text = "LM35 en PC"
        Me.BackColor = Color.Black
        Label1.Text = "00"
        Label2.Text = "Cº"
        Label3.Text = "Power by LM35"
        Label1.ForeColor = Color.Blue
        Label2.ForeColor = Color.Blue
        Label3.ForeColor = Color.White
        Label4.ForeColor = Color.White

    End Sub

    Function ReceiveSerialData() As String

        Using com1 As IO.Ports.SerialPort = _
          My.Computer.Ports.OpenSerialPort("COM1")
            com1.Write("D")
            rcbuf = com1.ReadByte
            Label4.Text = rcbuf
            ' If rcbuf = "-" Then
            'Label1.Text = textout
            'Else
            'textout += rcbuf
            'End If


            If textout > 24 Then
                Label1.ForeColor = Color.Red
            Else
                If textout > 15 Then
                    Label1.ForeColor = Color.Green
                Else
                    Label1.ForeColor = Color.Blue
                End If
            End If
            Label2.ForeColor = Label1.ForeColor
        End Using
    End Function

End Class


----------



## Meta

Hola:



El código está muy bueno del ASM. Si te funciona lo paso a Visual C#. Otra cosa. ¿No es sensillo usar un sensor de temperatura con el protocolo I2C? Cada cez se usa más.

Si puedes es bueno que cuando acabes con el código del ASM escribe detalladamente cada línea de código para poder entender bien el programa.

En código en C# es:


		Código:
	

public class Form1
{
    
    
    byte aux;
    byte rcbuf;
    string textout;
    
    private void  // ERROR: Handles clauses are not supported in C#
Form1_Load(System.Object sender, System.EventArgs e)
    {
        
        this.Text = "LM35 en PC";
        this.BackColor = Color.Black;
        Label1.Text = "00";
        Label2.Text = "Cº";
        Label3.Text = "Power by LM35";
        Label1.ForeColor = Color.Blue;
        Label2.ForeColor = Color.Blue;
        Label3.ForeColor = Color.White;
            
        Label4.ForeColor = Color.White;
    }
    
    public string ReceiveSerialData()
    {
        
        using (IO.Ports.SerialPort com1 = My.Computer.Ports.OpenSerialPort("COM1")) {
            com1.Write("D");
            rcbuf = com1.ReadByte;
            Label4.Text = rcbuf;
            // If rcbuf = "-" Then
            //Label1.Text = textout
            //Else
            //textout += rcbuf
            //End If
            
            
            if (textout > 24) {
                Label1.ForeColor = Color.Red;
            }
            else {
                if (textout > 15) {
                    Label1.ForeColor = Color.Green;
                }
                else {
                    Label1.ForeColor = Color.Blue;
                }
            }
            Label2.ForeColor = Label1.ForeColor;
        }
    }
    
}

Gracias a este enlace.
http://www.developerfusion.com/tools/convert/vb-to-csharp/

*¿Cómo envías los datos del LM35 al PC? ¿Por puerto serie?*

Saludo.


----------



## sebitronic

Muchismas gracias Meta, ya me voy a ver si puedo hacer andar el programa. El problema con lo del sensor por I2C es que en la zona en la que vivo no consigo. Te pido disculpas por lo del programa es que cuando no es muy extenso no suelo ponerle comentarios. Estube leyendo algo sobre un manual que estabas haciendo sobre C, me interesa saber mas sobre ese lenguage ya que mi experiencia en el mismo es prácticamente nula, si me podrias ayudar a aprender mas sobre este lenguaje estare muy agradecido.


----------



## Meta

Buenas:

Ya veo la razón.

¿Eres capáz de enviar algo al puerto serie desde el PIC? 

El manual del Visual C# he explicado paso a paso como hacerlo.

Ver manual puerto serie



		Código:
	

[COLOR=Blue]private[/COLOR] [COLOR=Blue]void[/COLOR] button_b_Click([COLOR=Blue]object[/COLOR] sender, EventArgs e)
        {
            [COLOR=Blue]byte[/COLOR][] mBuffer = [COLOR=Blue]new[/COLOR] [COLOR=Blue]byte[/COLOR][11];
            mBuffer[0] = 0x48; [COLOR=Green]//ASCII letra "H".[/COLOR]
            mBuffer[0] = 0x6F; [COLOR=Green]//ASCII letra "o".[/COLOR]
            mBuffer[0] = 0x6C; [COLOR=Green]//ASCII letra "l".[/COLOR]
            mBuffer[0] = 0x61; [COLOR=Green]//ASCII letra "a".[/COLOR]
            mBuffer[0] = 0x20; [COLOR=Green]//ASCII letra " ".[/COLOR]
            mBuffer[0] = 0x6D; [COLOR=Green]//ASCII letra "m".[/COLOR]
            mBuffer[0] = 0x75; [COLOR=Green]//ASCII letra "u".[/COLOR]
            mBuffer[0] = 0x6E; [COLOR=Green]//ASCII letra "n".[/COLOR]
            mBuffer[0] = 0x64; [COLOR=Green]//ASCII letra "d".[/COLOR]
            mBuffer[0] = 0x6F; [COLOR=Green]//ASCII letra "o".[/COLOR]
            mBuffer[0] = 0x2E; [COLOR=Green]//ASCII letra ".".[/COLOR]
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }


Ya verás que con él aprenderás. Si te gusta más Visual C++/Visual Basic .net tambien lo tengo por ahí ese manual.


----------



## sebitronic

Nuevamente muchisimas gracias. en cuanto termine de leer el manual te digo. Ahora mismo estoy instalando el visual C# (la ultima ves que reformateee no lo volvi a instalar).


----------



## Meta

¿Si estás instalando el Visual C# 2010 Express beta 2 también funcionará que lo estoy probado?

Ya nos avisarás, nosotros esperamos con ansias...

Suerte...


----------



## Dillo0

Man utiliza el ckto integrado MAX232 pretty useful !


----------



## ecotronico

*Hola a todos:*

Estoy comunicando un PC con un PLC por puerto serial RS232, usando el siguiente protocolo MODBUS ASCII: 9600, 7 bit datos, par (even), 1 bit parada, sin control de flujo.
Hasta el momento he logrado accionar un par de salidas del PLC, enviando la trama correspondiente con los siguientes programas:
- comDebug de windmill : http://www.windmill.co.uk/serial.html
- Hercules : http://www.hw-group.com/products/hercules/index_es.html
Cada trama enviada tiene un largo de 17 byte, por ejemplo:
3A 30 32 30 35 30 35 30 31 46 46 30 30 46 34 0D 0A (en hexadecimal, sólo 7 bits)
Pero con visual basic 2008 no me funciona. He configurado el buffer para enviar bytes con toda la trama correcta, pero el PLC no cierra las salidas a relé.
Mi única sospecha es el protocolo, y por esa razón me surge la misma duda que *Oscar16f877*. No estoy seguro si el visual basic 2008 ya viene con la codificación ASCII para 8 bit. ¿cómo hago para configurar el visual basic 2008 en ASCII 7 bit? 

En la página de microsoft sólo encontré esto:
http://msdn.microsoft.com/es-es/library/system.text.encoding.ascii(v=VS.90).aspx
http://msdn.microsoft.com/es-es/library/zs0350fy(v=VS.90).aspx

Cualquier ayuda se agradece....

Por otro lado, me pareció espectacular el manual de *META*, esclarece muchos detalles.
 Por ahí encontre el manual para visual basic 2008, lo resubo junto con un código fuente.
Está muy interesante toda la información del manual, se agradece.
 (NOTA: en el pdf aparece el autor)
http://www.mediafire.com/?4v1fat4fyryyx4a


----------



## lubeck

> ¿cómo hago para configurar el visual basic 2008 en ASCII 7 bit?


mi sugerencia...
-Abres un formulario
-agragas el control mscomm
-en la propiedad settings pones 9600,n,7,1
saludos


----------



## ecotronico

Gracias *lubeck*, pero no fue suficiente con configurar el protocolo de esa manera.
Tengo dudas con los siguientes parámetros:




Aún no se que es lo que está mal configurado.
Yo estoy usando esta función para enviar trama de bytes:
http://msdn.microsoft.com/es-es/library/ms143551(v=VS.90).aspx
Además, en la ayuda de msdn dicen que un byte está compuesto por 8 bits (ya lo sabiamos): 
http://msdn.microsoft.com/es-es/library/e2ayt412(v=VS.90).aspx
¿pero qué pasa cuando quiero enviar datos de 7bits ?

¿Alguien tiene idea de que puede estar sucediendo?


----------



## lubeck

si gustas intenta bajar el writebuffer a 17 que es el largo de tu trama...
pregunta la comunicacion del plc es bidireccion al o solo se le envian los datos???


----------



## ByAxel

*metalmetropolis* si deseas ver que es lo que realmente envías desde el Visual te sugiero esto:
Serial Port Monitor, a cambiado respecto al que usaba antes pero sirve... Escoges puerto de comunicaciones y el modo "Raw Data view". Ese programa no ocupa el puerto solo lo monitoriza.


----------



## ecotronico

Agradecido de sus respuestas:

Reescribi todo el código y ahora puedo lograr que se cierre el contacto del PLC. Eliminé el serialport que usaba y puse otro nuevo. Sólo modifiqué lo referente a: 9600, 7 data_bit, even_parity, 1 stop_bit.

1- La comunicación es "ida y vuelta". Yo le envío una trama al PLC, y luego me responde con otra trama.
2- Me ha servido bastante el serial port monitor. Con él me di cuenta de un detalle: la recepción en el puerto serial sólo considera el primer byte y no toda la trama completa. Este problema ya lo corregi revisando el manual de visual basic.


----------



## Meta

Por si se han olvidado.
_ https://www.forosdeelectronica.com/posts/192137/ _
Saludo.


----------



## Depepees

Nuevo tema
                 Hola soy nuevo en esto de visual basic hice un programa que publico metaconta de
visual basic y pic16f84 el cual me funcina bien el pic lo tengo programado como conmutador,osea
si esta encendido se apaga y alrebès pero me gustaria en vez salir el mensaje en el texbox pudiera señalizarse de otra forma.Por ejem cuando se encienda un puerto me mande "T" y cuando
se apague el mismo me mande "t" aprobechar esa sircunstancia para por ejem se encienda el mi_
smo pulsasor del interfaz. En el micro no tengo problemas lo que estoy verde es en visual_basic
si alguna persona pudiera ayudarme lo agradezco.gracias PEPE


----------



## Meta

Me alegro que hayas usado el manual.

Si se peude ahcer lo que dices y estoy preparando otra versión para lo que cuentas.

¿Te refieres que detecte en el Visual Basic .net la letra, no en textos?


----------



## Depepees

Hola Meta,procurare explicarme mejo.Como e dicho le e puesto cuatro pulsadores el cual puede
apagarse y encenderse desde el pic ò desde el pc el pic  esta instalado a gran distancia lo cual 
 no lo veo fisicamente desde el pc entonces que ocurre, si tu me pulsas en el pic varias veces
 en el mismo port en el texbox solo se ve lo ultimo pulsado.(eso me ocurre tambien en hiperterminal) por el cual yo e programado el pic para que cuando se pulse desde el pc o desde
el micro si esta apagado se encienda y alrevès.el micro cada vez que cambia me manda un mensaje en vez de decime encendido me manda "T" si es apagado me manda "t" asi igual com
b,l,a lo que quiero que ocurra,bien poniendo un piloto encima del pulsador ò bien en el mismo
pulsador, al recibir A se encienda el piloto correspondiente.Cuando pulse a se apague y asis con 
los pulsadores restantes yo e visto algo similar echo en delfi por lo cual pienso que no es demasi_
ado complicado.gracias por iteresarte en el proyecto si en algo te puedo ayudar dimelo.PEPE


----------



## Meta

Hola:

Aaaaaahhhhhhhhh. ¿Quieres hacerlo cerca de los botones del VB .net?

Hice algo parecido pero con colores. Quizás lo entiendas por aquí.
http://electronica-pic.blogspot.com/2010/05/probando-interfaz-picrs232-v2-puerto.html

Saludo.


----------



## Depepees

Hola Meta e visto el interfaz y es algo parecido a lo que quiero hacer,en mi caso no hace falta
boton onn off dado que el micro hace la inversion.La duda que me surge en tu progm es si los
pilotos relès se encienden ò apagan cuando pulsas on ò off o cuando reciben el mensaje desde
el pic si es esto ultimo es perfecto para lo que quiero hace,lo qu no e visto es donde bajar el
codigo en visual basic.Por cierto e visto los codigos ASM y son parecido al mio dado que es sa_
cado del mismo libro.gracias PEPE


----------



## Meta

Lo que he logrado es un On-Off de cada relé que es lo que me interesa en la interfaz Visual Basic. El programa si hace lo del On-Off tanto del Visual del ejemplo que te puse. En el asm lo puedes hacer que lo he hecho. La parte que dices en el LCD, lo he modificado para el siguiente manual y voy a montar el equipo completo.

Mejor que en el LCD funcione así, que en una pantalla te muestre independientemente cada salida.
Ver el archivo adjunto 22720_ https://www.forosdeelectronica.com/posts/195539/ _
Volveré hacer el prototipo.
Ver el archivo adjunto 29408


----------



## Depepees

Hola META e estado obserbando el interfaz y me doy cuenta que pulsando on se enciende off
apaga esto sin tener nada encufado en RS232 locual quiere decir que la lucesita la gobierna los
polsadores on off.  En mi caso concreto no es esto lo que quiero hacer,yo voy a trabajar con
RS485 y como dije no veo fisicamente el micro.En tu programa si hay un error en la comunicacion
entre pc y pic el interfaz nos estaria engañando.
Lo que yo te pedia es que cuando en pic nos mande al  PC el mendaje "Rele 1 ON  ò Rele1 off entonces es cuando cambie de estado la lucesita.Como te dije hice el interfaz en visual basic
el que tiene la tecla de parada lo que me faltaria es el codigo para ponerle la luz y gobernarla
Gracias por todo tu tiempo PEPE


----------



## Meta

Ammmmmm, si se puede hacer, lo qu eno lo he hecho así porque lo haré controlando por internet y peue haber errores envío de datos por mala conexión, pero se puede hacer.


----------



## Depepees

Hola Meta paso a explicarte  una cosa que se me paso por alto.Como te dije yo estoy usando
el prorama RS232_11 con algunas variaciones para encender y apagar luces a cierta distancia
como te dije y quiero que quede claro las luces tambien pueden apagarse y encenderse desde
el micro por eso es inportante que la lucesita del interfaz cambie solo con el mensaje del micro.
Por otra parte y esto es lo que se me paso en otro programa en ASM  tengo echa una mezcla
de RS232_10 y 11. y lo utilizo como "ALARMA" por ejem cuando pulso ò despulso (segun tipo de
alarma) me manda un mensaje este mensaje asta ahora lo recibe el Hiperterminal y me dice  la
puerta que se ha abierto pero tambien tego junto al ordenador (teniendo en cuenta que dicha
tuerta tu no la ves fisicamente) otro micro el cual se enciende una luz y suena un pito indicandome que se a activado una alarma,simleo el hiperterminal se de que puerta se trata pero
logicamente es mucro mejor si en el interfaz se te enciende una luz encima de un numero
Gracias meta hasta otra.PEPE


----------



## Meta

De eso se trata, al leer cierto caracter que conoce Visual Basic .net, haces lo que dices. Por cierto. Llevo tiempo intentado hacer una mezcla del RS232_10 y 11 y nunca me ha salido al mismo tiempo. Lo he intentado con el 16F887 y el 18F4550 en asm.

¿Te ha salido?

En cuanto al mensaje, envía un byte y usas un if else.


----------



## Depepees

Hola meta la mezcla de rs_10_11 lo e echo pero con algunas dificultades el rs_10 te lee el estado
de las entradas y los posiciona cada uno en su sitio en este ultimo caso usando pulsadores que
me invertian el estado de apagado a encendido y....... no me funcionaba bien por ejen me lellese
en vez el estado de las entradas en de las salidas nunca consegui por ese metodo posicionar
el estado de las salidas con cada una de ellas la forma que e conseguido es individualmente que
a fin de cuentas es lo que me interesa.si hay algo que tu creas te puedo ayudar dio.
Gracias pepe


----------



## Meta

Buenas:

Ya decía que como lo habías conseguido con el tiempo que me llevé y tenía hasta desbordamiento de pila con el 18F4550 que son de 31 niveles. Por estos foro tengo el tema creado y nadie sabe solucionarlo porque cuesta.

La otra manera que se me ocurre es usar dos microcontroladores, cada uno con su LCD, uno para 8 entradas digitales y otro para 8 salidas digitales.

La cuestión es. ¿Cómo lo hacemos?

En sentido de usar dos pic en el mismo puerto serie. No he posido hacerlo de manera que me fucnione bien. La prueba que no he hecho es usar un CD4016 o similar en las Tx y Rx del RS232 para conmutar cuando sea necesario o cuando detecte una entreda o salida digital. Se usarán PIC16F886 o el PIC18F2550 en asm.

En cuanto al detectar una letra, más bien detectar valores de la tabla ASCII haré pruebas por mi cuenta ya que parece muy importante para muchos y no lo he explicado. Cuando lo logre te aviso, pero te necesito a ti o al grupo del foro para hacer pruebas ya que no tengo el montaje hecho en la protoboard, debo comprar los componentes en el futuro  ya que tengo intenciones de hacerlo funcionar con 8 Entradas digitales y 8 salidas a relés como mínimo.

Saludo.


----------



## Depepees

Hola Meta ,cuando me referi a  hace una mezcla entre el rs10-y11 es de forma firurada ya que 
como dije anteriormente "si leo las salidas no se puden acomodar en su lugar" por otra parte no
es inpotante ya que estamos ablando de comunicaciones y en comunicaciones van de dato a dato,De todas formas no te e entendido bien cuando me ablas del886 y 2250  por lo menos el 1º
tiene la misma estructura que el 16f84.En cuanto me dices a detecta la letra doy por supuesto
que el valor es ASCII pero yo me explico asi porque se supone que es asi.
Del mensaje que me mandaste antes antes en el que  "if else" te dire que yo e empezado con esto de visual basic hace 4 dias que con eso no hago nada.Hice tu programa con bastantes di_
ficultades pero necesito saber por ejem la luz rroja que es y cual es el texto. de todas formas 
tu pregunta porque yo e tenido problimas con micros dando por supuesto que el prama,ASM  estaba bien por eso no hay que fiase mucho ya que a mi me a funcionado bien un micro y otro
no:Te pongo un ejenplo cuando usas las "INTERRUPCIONES" y comunicaciones en el pic16f628 no
funcionan vien ya que los dos utilizan el PORT_B y cuando actiba la detection de cambio de estado del port_b no fuciona ya que las comunicaciones vienen prefijadas en el mismo port_b
Yo lo que te agradeceria es que me mandes el codigo para poner la lucesita y el codigo 

de todas gracias pepe


----------



## Meta

El manual que leíste de Visual Basic .net es un versión reducida del C# que también hice. Se recomienda leer el primero de C#.

http://electronica-pic.blogspot.com/2008/11/electrnica-pic.html

Aún no he hecho eso de que te detecte las luces rojas desde el PIC, sólo desde la interfaz.

En cuanto al PIC16F y PIC18F me refiero que adapté el código en asm del 16F84A al 16F887 y al 18F4550.


----------



## Depepees

Hola META en las espicaciones de antes y en programa que me propongo hace era para encender
y apagar luces ò cuarpuier cosa desde el ordenador y desde el micro.Cuando te dije que habia
hecho una mezcla del rs_10 y 11 me referia a detertar una entrada tal y como el rs10 por lo tanto esa configuracion puede serbir como sistema de alarma ya que al detectarte por ejem una
puerta que se abre te lo indicaria en el interfaz tambien hice otro programita para el micro que
iria instalado junto al ordenador que al recibir el mensaje el mensaje del micro de la puerta activase un pito.pero claro sigo en las mismas e mirado en varios libros y no veo nada (mas vien 
quiero decir que no se verlo) doy por supuesto que lo explicara pero con palabras que yo por ahora no entiendo.seguiremos buscando gracias PEPE


----------



## Meta

Hola:

Esa idea es la que quiero hacer pero no me funcionaba ni a la de tres hace tiempo. Es decir, las dos cosas al mismo tiempo, al menos en el PIC16F887 de 40 pines.

Por ahora lo he dejado estancado sólo que funcione como salida o sólo como entrada. No me sale bien las dos cosas.

En el LCD 20x4, debe aparecer los números de los relés. Los 0 y 1 son los datos en este caso de salida. No me sale lo de entrada y que funcione. También quiero hacer la mezcla del 10 y 11, cosa que no me ha salido todavía.







Ver zoom

En mi caso se me hace corto un PIC de 40 pines, quiero lo justo para hacer funcionar:
*
- 8 Entradas digitales. (Pulsadores).
- 8 Salidas digitales a relés.
- Salidas digitales mediante ooptoacopladores si sobran.
- Algunas entradas analógicas si es posible.
- LCD 20x4.
- Interfaz hecho con los tres lenguajes de Visual Studio .net Express 2010. Puede que hasta con VB 6 por puerto serie RS232.
- Opción de conectar RS232 por radio frecuencia, es lo mismo pero sin cables.
- Ya se me ocurrirá más cosas.*

Lo mínimo de lo mínimo más mínimo que deseo si la cosa se me complica, es usar 8 entradas y 8 salidas digitales controlado con botones como dices y control por Visual Studio.

Saludo.


----------



## Depepees

Hola META ahora me pongo a hacer un progama que haga eso que dices espero sea ese despues me dices
gracias pepe

Hola META en cuanto dices 8 entradas digitales (pulsadores) no funciona bien dado que solo dispone de 4
interrupciones de porb4-a-7 y para que funcione bien con pulsadores tiene que ser por interrupciones ahora
me pongo a hacer algo pepe

Hola Heta este programa es el que utilizo para gobernar las luces desde el ordenador y desde el micro unicamentene cabiado los mensajes que el pic manda al PC donde dice "A" decia 
cuarto_1 encendido.
despues me pongo para hacer el 10-11 asta luego pepe



;*********************************RS232_INICIO-CLAVE.asm **************************************
;Sistema de govierno desde el ordenador o desde el mismo puesto ademas utiliza claves para poner asta 8 micros con las mismas siglas A,B,C,D solo cambia que antes de la letra hay que
poner la direccion "000A" "000B" "000C" "000D" para el 1º micro para el2º "001A" "001B y asi 
hasta los ocho por supuesto en binario



;	==================================================================.
;
; ZONA DE DATOS **********************************************************************

	LIST		P=16F84
	INCLUDE		<P16F84.INC>
	   H'3FF1'	

	CBLOCK   0x0C		
	TeclaPulsada					; Va a guardar el contenido de la tecla pulsada.
	MensajeApuntado					; Va a guarda la dirección del mensaje apuntado.
	ENDC


#DEFINE  Pulsa4             PORTB,7
#DEFINE  Pulsa3             PORTB,6
#DEFINE  Pulsa2             PORTB,5
#DEFINE  Pulsa1             PORTB,4
#DEFINE  SalidaAdelante		PORTB,3	; Define dónde se sitúan las salidas.
#DEFINE  SalidaAtras		PORTB,2
#DEFINE  SalidaIzquierda	PORTB,1
#DEFINE  SalidaDerecha		PORTB,0

                    				; Código de la tecla espaciadora, (hay un espacio,
									; tened cuidado al teclear el programa).
; ZONA DE CÓDIGOS ********************************************************************

	ORG	0
    goto  Inicio
    ORG 4
    GOTO ser
Inicio

	call	RS232_Inicializa
	bsf		STATUS,RP0				; Configura como salidas las 4 líneas del
	bcf		SalidaAdelante			; del Puerto B respetando la configuración del
	bcf		SalidaAtras				; resto de las líneas.
	bcf		SalidaIzquierda
	bcf		SalidaDerecha
    bsf     Pulsa1
    bsf     Pulsa2
    bsf     Pulsa3
    bsf     Pulsa4
    bcf     OPTION_REG,NOT_RBPU
	bcf		STATUS,RP0
    movlw   b'10001000'
    movwf   INTCON
	clrf    PORTB      	         					; En principio todas las salidas deben estar 
Principal							; apagadas.
	call	RS232_LeeDato			; Espera a recibir un carácter.
	call	TesteaTeclado
	goto	Principal

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
	addwf	PCL,F

MensajeAdelante
	DT "A ", 0x00                              ; Salida portb3 encendido
MensajeAdelante_no
    DT "a",   0X00                              ;Salida portb3 apagado
MensajeAtras
	DT "B", 0x00                                ;Salida Portb2 encendido
MensajeAtras_no
    DT "b",   0X00                              ;Salida portb2 apagado
MensajeIzquierda
	DT "C", 0x00                                ;Salida portb1 encendido
MensajeIzquierda_no                             ;Salida portb1 apagado
    DT "c",   0X00
MensajeDerecha                                  ;Salida portb0 encendido
	DT "D", 0x00
MensajeDerecha_no
    DT "d",   0X00                              ;Salida portb apagago

; Subrutina "TesteaTeclado" -------------------------------------------------------------
;
; Testea el teclado y actúa en consecuencia.








TesteaTeclado 

    TECLA_0 EQU '0'
    TECLA_1 EQU '1'

    btfsc   PORTA,0
    goto    UNO


    movwf   TeclaPulsada
    xorlw   TECLA_0
    btfsc   STATUS,Z
    goto    REG_1
    goto    FIN

UNO     
    movwf   TeclaPulsada
    xorlw   TECLA_1
    BTFSC   STATUS,Z
    goto    REG_1
    goto    FIN
REG_1
    btfsc   PORTA,1
    goto    UNO_1

    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_0
    btfsc   STATUS,Z
    goto    REG_2
    goto    FIN
UNO_1
    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_1
    btfsc   STATUS,Z
    goto    REG_2
    goto    FIN

REG_2
    btfsc   PORTA,2
    goto    UNO_2

    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_0
    btfsc   STATUS,Z
    goto    empieza
    goto    FIN
UNO_2
    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_1
    btfsc   STATUS,Z
    goto    empieza
    goto    FIN 




empieza

TECLA_ADELANTE  EQU  'A'
TECLA_ATRAS     EQU  'B'
TECLA_IZQ       EQU  'C'
TECLA_DER       EQU  'D'

    call    RS232_LeeDato
	movwf	TeclaPulsada		
	xorlw	TECLA_ADELANTE		
	btfsc	STATUS,Z
	goto	Adelante		
;
	movf	TeclaPulsada,W		
	xorlw	TECLA_ATRAS			
	btfsc	STATUS,Z
	goto	Atras				
;
	movf	TeclaPulsada,W		
	xorlw	TECLA_IZQ			
	btfsc	STATUS,Z
	goto	Izquierda			
;
	movf	TeclaPulsada,W		
	xorlw	TECLA_DER			
	btfsc	STATUS,Z
	goto	Derecha				

ser
    btfsc   Pulsa4
    goto    fin3
    call    Retardo_20ms
    btfsc   Pulsa4
    goto    fin3
    call    Retardo_20ms
Adelante
    btfsc   SalidaAdelante
    goto    uno
    bsf     SalidaAdelante
    movlw   MensajeAdelante
    goto    Visualiza
uno
    bcf     SalidaAdelante
    movlw   MensajeAdelante_no
    goto    Visualiza
fin3

    btfsc   Pulsa3
    goto    fin2
    call    Retardo_20ms
    btfsc   Pulsa3
    goto    fin2
    call    Retardo_20ms
Atras
    btfsc   SalidaAtras
    goto    dos
    bsf     SalidaAtras
    movlw   MensajeAtras
    goto    Visualiza
dos
    bcf     SalidaAtras
    movlw   MensajeAtras_no
    goto    Visualiza
fin2
    btfsc   Pulsa2
    goto    fin1
    call    Retardo_20ms
    btfsc   Pulsa2
    goto    fin1
    call    Retardo_20ms
Izquierda
    btfsc   SalidaIzquierda
    goto    tres
    bsf     SalidaIzquierda
    movlw   MensajeIzquierda
    goto    Visualiza
tres
    bcf     SalidaIzquierda
    movlw   MensajeIzquierda_no
    goto    Visualiza
fin1
    btfsc   Pulsa1
    goto    final
    call    Retardo_20ms
    btfsc   Pulsa1
    goto    final
    call    Retardo_20ms
Derecha
     btfsc  SalidaDerecha
     goto   cuatro
     bsf    SalidaDerecha
     movlw  MensajeDerecha
     goto   Visualiza
cuatro
     bcf    SalidaDerecha
     movlw  MensajeDerecha_no
     goto   Visualiza
FIN

final
     bcf    INTCON,RBIF
     retfie

; Según el estado de las salidas visualiza el estado del sistema en el visualizador LCD y en
; el monitor del ordenador.

Visualiza
	movwf	MensajeApuntado			; Guarda la posición del mensaje.

	call	RS232_LineasBlanco		; Borra la pantalla del ordenador.
	movf	MensajeApuntado,W
	call	RS232_Mensaje			; Lo visualiza en el HyperTerminal.
	call	RS232_LineasBlanco
    bcf     INTCON,RBIF
    retfie



	INCLUDE  <RS232.INC>
	INCLUDE  <RS232MEN.INC>

	INCLUDE  <RETARDOS.INC>
	END


----------



## Meta

Hola:

Le echaré un ojo al tu código, mientras le echas el mio. de momento es con un PIC16F887 y también tengo hecho con el 18F4550 en asm. El mio no me sale usar entradas y salidas almismo iempo con el RS232. Justo abajo puedes descargar el código fuente y simulación con el Proteus.

Si vas a usar PIC de 18 pines es muy poquito.





Para eso usas un conversor de bus para tener más pines. Por ejemplo, este integrado puedes conectarle por lo menos 8 y cada uno tiene 8 entradas o salidas digitales por cada integrado.

En el capítulo 6, página 409 está ese integrado llmado PCF8574 que puede ser de ayuda.








Si no hace falte mejor que mejor, ya que sería menos engorroso.




Como vez la imagen de arriba, llevo desde el 2008 con este proyecto, por falta de presupuesto no he hecho gran cosa sino modificaciones para mejorarlo. Por ahora en aquella época preparé un manual sobre montar un servidor Web Apache...

http://electronica-pic.blogspot.com/2009/06/servidor-casero-apache-php-mysql.html

...para que en el futuro haga el segundo manual sobre este proyecto y como conectarlo a Internet el PIC. Por aquí puedes bajar un tutorial de las pruebas que hacía, en PDF.
_ https://www.forosdeelectronica.com/posts/242177/ _
Podemos hacer algo como esto:




Fuente:
http://wiki.rocrail.net/doku.php?id=phg-new_fiddle_yard&DokuWiki=





Edito:
Puede que te sirva de interés.





http://wiki.s1mp3.org/Debug_interface


----------



## Meta

Más iformación por si acaso.

http://electronicapractica.crearblo...ontroladores/arduino/pcf8574-expansor-remoto/


----------



## Depepees

hala META en estos dias e estado muy ocupado y  no e mirado con detalle tu programa de todas
formas este que ultimo que envie funciona bien.Conrespecto a lo que yo necesitaba desde el
principio que es que la luz del pulsador se encienda o apague solo cuando recibe el dato desde
el micro te dire que no he prosperado nada me he conprado el libro de Francisco C harter de 
programacion en visual basic.net y nada cada vez tengo mas claro que tengo que pasar por una
academia claro que el problema es el tiempo.Por otra parte y no lo puse desde el principio para
no  henrredar mas la cosa es que a cada pulsador ponerle un relog para que cada punto se enci_
enda y apague a una hora determinada de esa foma tendria mas utilidad,por ejem control de rie
go,yo seguire estudiando algun dia espero prosperar.gracias PEPE


----------



## Depepees

Hola META e miradom tu programa y te dire que para que funcione indistintamente desde el micro
como desde el ordenador en vez de poner interruptores tienes que poner pulsadores el programa
que puse funciona bien.Lo que pasa es que no esta terminado totalmente dado que para que se
active un pin del micro hay que embiar 001A 001B 001C 001D pero lo que no tengo terminado es
la respuesta del micro que el contesta A,a B,b C,c D,d cuando tendria que ser 001A,001a,001B,
001b y asis los 4 pins en micro el esquema electrico es Portb 4-7 pulsadoder (entadas) Portb 0-3
salidas Led's porta 0-2 interructores para la direccion port 3-4 comunicacion te no e puesto asi
porque no allo la forma de copiar en proteus. hasta otra PEPE


----------



## Meta

Hola:

Compré el libro también de charte de Visual C# 2005 y solo aprendi hacer tonterías sin aprender no comprender programación.






Me metí en un curso de Java que acaba de emepzar y por ahora no tengo idea. No se si daremos Visual Basic el próximo año, pero nos contó el profesor que daremos Visual Studio .net sin decir lenguajes. Si, mejor apuntarse a academias para aprender a programar. Por ahora nos están reventando con Java orientado a objetos, se parece muchísimo al C# y me alegra, así me adapo rápido, incluso aprender C para los PIC18F que no me he puesto, cosa que haré cuando acabe los dos años de curso.

De todas maneras me buscaré la vida para hacer lo que dices. Cuando envías un byte o un caracter ASCII, en Hex, Visual Studio sea capaz de detectarlo. Tu código funciona bien, ya es un paso.

Al menos quiero lograr con un PIC16F887 de 40 pines 8 entradas digitales y 8 salidas a relés. Si sobra algunas serán salidas digitales. Hay que examinar bien. Si logras hacer con el 16F887 lo que digo, con LCD incluido por supuesto, me encargaré de hacer la Interfaz y lo que me pides.

_Dime que carácter en ASCII o HEX quier que detecte lo que pides, parece que son por lo menos unos 8. Me encargaré hacer el código en C# 2010 y buscándome la vida en Visual Basic 2010 que es el que tengo instalado._ Cuando me lo digas, empezaré a codear e investigar.

Saludo.


----------



## Depepees

Hola META el asunto es el siguienteoner 8 microcontroladores de 4 entrada-salida todos tienen
el mismo prog enASM,cambian los interruptores de direccion RA0 RA1 RA2 que por ejem el 1 los
interrup deria 000 ,el 2  001 y asi los 8 esto tiene la ventaja que a la hora de que se estropee
un micro se cambia por otro igual pero cambiando a su direccion. por otra parte te dije que el
programa no esta terminado pues si las direcciones de entrada estan bien no las de salida que
produrare hacerla mañana de lodas formas te pongo los datos que tiene que enviar y recibir el
interfaz.para el 1º pic el pulsador debe enviar 1º-pulsador 000A 2ºpulsador 000B 3pulsador 000C
4pulsador 000D  2ºpic 5 pulsador 001A 6ºpul 001B 7ºpul 001C, 8ºpul 001D  3ºpic  9pul 010A
10pul 010B 11pul 010C 12pul 010D 4ºpic 13ºpul 011A  14ºpul 011B 15pul 011C 16 pul 011D
5ºpic 17pul 100A 18pul 100B 19pul 100C 20pul 100D 6ºpic 21pul 101A 22pul 101B 23pul 101C
24pul 101D 7ºpic 25pul 110A 26pul 110B 27pul 110C 28 pul 110D 8ºpic 29pul 111A 30pul 111B
31pul 111C 32 pul 111D los pulsadores de la interfaz mandan lo que e puesto el micro se encarga deapagar y encende y aqui apunto lo que me falta del programa por eje si se enciende el 1º pic el pic mandara 000A el cual dice que esta encendido 000a que esta apagado y cada
pinmandara su direccion con su situacion de apag ò encen el 5pic pulsador 18 te mandara
100B encendido 100b apagado mañana sin falta termino el ASM y posiblemente lo entenderas 
mejor gracias por tu tiempo PEPE

se me olvido todo se transmite en ascii gracias


----------



## Meta

Hola:

Por lo que te entiendo, es que tienes un PIC maestro que controla la dirección de los 8 otros PIC esclavos. Puedes controlarlos desde RS232, claro que si. 

Si lo dicho arriba es como dices, ¿cómo pretendes manejar las entradas de los PIC esclavos mediantes RS232?

Para eso usas varios PCF8574 que también debes indicar las direcciones de cada dispositivo. Es verdad que puedes comuniar un PIC on otro PIC mediante RS232, pero no es como un I2C, SPI, etc...

El PIC 1º tiene 4 pulsadores como comentas. ¿No crees que debe tener 8 pulsadores cada PIC ya que supuestamente funciona como encendido y apagado (ON/OFF)?
Cuando consigas los 8 pulsadores del ON-OFF, ya tienes lo que buscas del A,a B,b C,c D,d.

Lo que buscas, es algo parecido a esto, pero en puerto serie.





Por cada llamada del PIC sería algo como esto que puse en C#:


		Código:
	

        public void pic1_letra_A()
        {
            serialPort1.Open();
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x41; //ASCII letra "A".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            serialPort1.Close();
        }

En Visual Basic 2010:


		Código:
	

Public Sub pic1_letra_A()
    serialPort1.Open()
    Dim mBuffer As Byte() = New Byte(0) {}
    mBuffer(0) = &H41 'ASCII letra "A".
    serialPort1.Write(mBuffer, 0, mBuffer.Length)
    serialPort1.Close()
End Sub


Saludo.


----------



## Depepees

;*********************************RS232_INICIO-CLAVE.asm **************************************
;Sistema de gobierno desde el ordenador o desde el mismo puesto
;Joè Benjumea,15-1-2010
;Para que se enciendan ò apagen las luces en el hiperteminal hay que poner
A;,B,C,D Precedido de la direccion que tiene que ser igual que porta,0 porta,1 porta,2
;	==================================================================.
;
; ZONA DE DATOS **********************************************************************

	LIST		P=16F84A
	INCLUDE		<P16F84A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

	CBLOCK   0x0C		
	TeclaPulsada					; Va a guardar el contenido de la tecla pulsada.
	MensajeApuntado					; Va a guarda la dirección del mensaje apuntado.
	ENDC


#DEFINE  Pulsa4             PORTB,7 ;ebtrada4
#DEFINE  Pulsa3             PORTB,6 ;entrada3
#DEFINE  Pulsa2             PORTB,5 ;entrada2
#DEFINE  Pulsa1             PORTB,4 ;entrada1
#DEFINE  SalidaAdelante		PORTB,3	;salida4
#DEFINE  SalidaAtras		PORTB,2 ;salida3
#DEFINE  SalidaIzquierda	PORTB,1 ;salida2
#DEFINE  SalidaDerecha		PORTB,0 ;salida1
#DEFINE  Clave_0            PORTA,0 ;entrada_clave
#DEFINE  Clave_1            PORTA,1 ;entrada_clave
#DEFINE  Clave_2            PORTA,2 ;entrada_clave



; ZONA DE CÓDIGOS ********************************************************************

	ORG	0
    goto  Inicio
    ORG 4
    goto  Interrupcion
Inicio

	call	RS232_Inicializa
	bsf		STATUS,RP0			
	bcf		SalidaAdelante			
	bcf		SalidaAtras			
	bcf		SalidaIzquierda
	bcf		SalidaDerecha
    bsf     Pulsa1
    bsf     Pulsa2
    bsf     Pulsa3
    bsf     Pulsa4
    bsf     Clave_0
    bsf     Clave_1
    bsf     Clave_2
    bcf     OPTION_REG,NOT_RBPU
	bcf		STATUS,RP0
    movlw   b'10001000'
    movwf   INTCON
	clrf    PORTB      	         					; En principio todas las salidas deben estar 
Principal							; apagadas.
	call	RS232_LeeDato			; Espera a recibir un carácter.
	call	TesteaTeclado
	goto	Principal



TesteaTeclado 

    TECLA_0 EQU '0'
    TECLA_1 EQU '1'

    btfsc   Clave_0
    goto    UNO


    movwf   TeclaPulsada
    xorlw   TECLA_0
    btfsc   STATUS,Z
    goto    REG_1
    goto    FIN

UNO     
    movwf   TeclaPulsada
    xorlw   TECLA_1
    BTFSC   STATUS,Z
    goto    REG_1
    goto    FIN
REG_1
    btfsc   Clave_1
    goto    UNO_1

    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_0
    btfsc   STATUS,Z
    goto    REG_2
    goto    FIN
UNO_1
    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_1
    btfsc   STATUS,Z
    goto    REG_2
    goto    FIN

REG_2
    btfsc   Clave_2
    goto    UNO_2

    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_0
    btfsc   STATUS,Z
    goto    empieza
    goto    FIN
UNO_2
    call    RS232_LeeDato
    movwf   TeclaPulsada
    xorlw   TECLA_1
    btfsc   STATUS,Z
    goto    empieza
    goto    FIN 




empieza

TECLA_ADELANTE  EQU  'A'
TECLA_ATRAS     EQU  'B'
TECLA_IZQ       EQU  'C'
TECLA_DER       EQU  'D'

    call    RS232_LeeDato
	movwf	TeclaPulsada			; Guarda el contenido de la tecla pulsada.
	xorlw	TECLA_ADELANTE			; ¿Es la tecla del movimiento hacia adelante?
	btfsc	STATUS,Z
	goto	Adelante				; Sí, se desea movimiento hacia adelante.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_ATRAS				; ¿Es la tecla del movimiento hacia atrás?
	btfsc	STATUS,Z
	goto	Atras					; Sí, se desea movimiento hacia atrás.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_IZQ				; ¿Es la tecla del movimiento hacia la izquierda?
	btfsc	STATUS,Z
	goto	Izquierda				; Sí, se desea movimiento hacia la izquierda.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_DER				; ¿Es tecla del movimiento hacia la derecha?
	btfsc	STATUS,Z
	goto	Derecha					; Sí, se desea movimiento hacia la derecha.

Interrupcion
 btfsc   Pulsa4
    goto    fin3
    call    Retardo_20ms
    btfsc   Pulsa4
    goto    fin3
    call    Retardo_20ms
Adelante
    btfsc   SalidaAdelante
    goto    uno
    bsf     SalidaAdelante
    goto    Visualiza_A
uno
    bcf     SalidaAdelante
    goto    Visualiza_a
fin3

    btfsc   Pulsa3
    goto    fin2
    call    Retardo_20ms
    btfsc   Pulsa3
    goto    fin2
    call    Retardo_20ms
Atras
    btfsc   SalidaAtras
    goto    dos
    bsf     SalidaAtras
    goto    Visualiza_B
dos
    bcf     SalidaAtras
    goto    Visualiza_b
fin2
    btfsc   Pulsa2
    goto    fin1
    call    Retardo_20ms
    btfsc   Pulsa2
    goto    fin1
    call    Retardo_20ms
Izquierda
    btfsc   SalidaIzquierda
    goto    tres
    bsf     SalidaIzquierda
    goto    Visualiza_C
tres
    bcf     SalidaIzquierda
    goto    Visualiza_c
fin1
    btfsc   Pulsa1
    goto    final
    call    Retardo_20ms
    btfsc   Pulsa1
    goto    final
    call    Retardo_20ms
Derecha
     btfsc  SalidaDerecha
     goto   cuatro
     bsf    SalidaDerecha
     goto   Visualiza_D
cuatro
     bcf    SalidaDerecha
     goto   Visualiza_d


Visualiza_A

     btfsc  Clave_0         ;  Dela 216 a 249 envia al PC su direccion y lo que hizo
     goto   Es_uno          ;  encender salida_1
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1      
Es_uno
     movlw  '1'
     call   RS232_EnviaDato

Claver_1
     btfsc  Clave_1
     goto   Es_uno_1
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2
Es_uno_1
     movlw  '1'
     call   RS232_EnviaDato

Claver_2
     btfsc  Clave_2
     goto   Es_uno_1_1
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_A
Es_uno_1_1
     movlw  '1'
     call   RS232_EnviaDato
Ala_A
     movlw  'A'
     call   RS232_EnviaDato
     goto   FIN



Visualiza_a

     btfsc  Clave_0         ;  Dela 253 a 286 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis         ;  apagar salida_1
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis     
Es_uno_bis
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis
     btfsc  Clave_1
     goto   Es_uno_1_bis
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis
Es_uno_1_bis
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis
     btfsc  Clave_2
     goto   Es_uno_1_1_bis
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_a
Es_uno_1_1_bis
     movlw  '1'
     call   RS232_EnviaDato
Ala_a
     movlw  'a'
     call   RS232_EnviaDato
     goto   FIN


Visualiza_B

     btfsc  Clave_0         ;  Dela 290 a 322 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis1         ;  encender salida_2
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis1     
Es_uno_bis1
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis1
     btfsc  Clave_1
     goto   Es_uno_1_bis1
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis1
Es_uno_1_bis1
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis1
     btfsc  Clave_2
     goto   Es_uno_1_1_bis1
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_B
Es_uno_1_1_bis1
     movlw  '1'
     call   RS232_EnviaDato
Ala_B
     movlw  'B'
     call   RS232_EnviaDato
     goto   FIN



Visualiza_b

     btfsc  Clave_0         ;  Dela 326 a 359 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis2         ;  apagar salida_2
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis2     
Es_uno_bis2
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis2
     btfsc  Clave_1
     goto   Es_uno_1_bis2
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis2
Es_uno_1_bis2
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis2
     btfsc  Clave_2
     goto   Es_uno_1_1_bis2
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_b
Es_uno_1_1_bis2
     movlw  '1'
     call   RS232_EnviaDato
Ala_b
     movlw  'b'
     call   RS232_EnviaDato
     goto   FIN


Visualiza_C

     btfsc  Clave_0         ;  Dela 362 a 395 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis3         ;  encender salida_3
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis3     
Es_uno_bis3
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis3
     btfsc  Clave_1
     goto   Es_uno_1_bis3
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis3
Es_uno_1_bis3
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis3
     btfsc  Clave_2
     goto   Es_uno_1_1_bis3
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_C
Es_uno_1_1_bis3
     movlw  '1'
     call   RS232_EnviaDato
Ala_C
     movlw  'C'
     call   RS232_EnviaDato
     goto   FIN


Visualiza_c

     btfsc  Clave_0         ;  Dela 398 a 431 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis4         ;  apagar salida_3
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis4     
Es_uno_bis4
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis4
     btfsc  Clave_1
     goto   Es_uno_1_bis4
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis4
Es_uno_1_bis4
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis4
     btfsc  Clave_2
     goto   Es_uno_1_1_bis4
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_c
Es_uno_1_1_bis4
     movlw  '1'
     call   RS232_EnviaDato
Ala_c
     movlw  'c'
     call   RS232_EnviaDato
     goto   FIN


Visualiza_D

     btfsc  Clave_0         ;  Dela 434a 467 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis5         ;  enciende salida_4
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis5     
Es_uno_bis5
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis5
     btfsc  Clave_1
     goto   Es_uno_1_bis5
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis5
Es_uno_1_bis5
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis5
     btfsc  Clave_2
     goto   Es_uno_1_1_bis5
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_D
Es_uno_1_1_bis5
     movlw  '1'
     call   RS232_EnviaDato
Ala_D
     movlw  'D'
     call   RS232_EnviaDato
     goto   FIN

Visualiza_d

     btfsc  Clave_0         ;  Dela 471 a 503 envia al PC su direccion y lo que hizo
     goto   Es_uno_bis6         ;  apagar salida_4
     movlw  '0'             ;
     call   RS232_EnviaDato ;
     goto   Claver_1_bis6     
Es_uno_bis6
     movlw  '1'
     call   RS232_EnviaDato

Claver_1_bis6
     btfsc  Clave_1
     goto   Es_uno_1_bis6
     movlw  '0'
     call   RS232_EnviaDato
     goto   Claver_2_bis6
Es_uno_1_bis6
     movlw  '1'
     call   RS232_EnviaDato

Claver_2_bis6
     btfsc  Clave_2
     goto   Es_uno_1_1_bis6
     movlw  '0'
     call   RS232_EnviaDato
     goto   Ala_d
Es_uno_1_1_bis6
     movlw  '1'
     call   RS232_EnviaDato
Ala_d
     movlw  'd'
     call   RS232_EnviaDato



FIN

final
     bcf    INTCON,RBIF
     retfie




	INCLUDE  <RS232.INC>
	INCLUDE  <RETARDOS.INC>
	END

Hola meta cuando me digiste si funcionaba con pic maestro 8 esclavos se puede y de echo lo hice para ex
perimentar este programa esta completo.pruebalo en el iperterminal ten presente los interructores de porta,0 porta,1 porta,2 simlos tres estan cerrados la direc es 000 seguido de A,B,C,D. yo lo he probado en
proteus y con terminal virtual fuciona bien te pongo los pins porque no allo como copiar y pegar en proteus
PORTA,0 a 3 Interruptores de direccion PORTB 0 a 3 RELES PORTB 4 a 7 Pulsadores porta 3 a4 comunicacion
ojealo por favor gracias pepe


----------



## Meta

¿Cómo los conectaste sin el CD4016 o el CD4066?

Suponiendo que eson estos esquemas que vamos hacer. Recuerda que en mi caso usaré un 16F887, como en este momento estamos en tu caso, usaremos el 16F84A.

Como salidas digitales.






Como entrada digitales.





HyperTerminal virtual del Proteus:





Fuente:
http://www.pic16f84a.org/index.php?...w=article&id=66&Itemid=87#Proteus_Capitulo_20

Haré pruebas simuladas con tu código y te aviso.


----------



## Depepees

Hola META este ultimo programa que te e puesto esta pensado para que funcione con el interfaz
que pusiste de los cuatro botones a mi me funciona bien pero este esta pensado para que funci_
one con una lucesita encima del los pulsadores y como todos los datos en embia el micro al pc
son distintos aprobeclar dicha circunstancia para apagar y encender cada una de las lucesita
yo no se cual es ojeto tuyo de usar el 16f887 cuando este esta funcionando a la perfecion
por otra parte te dire y en esto tengo esperiencia que no hace falta que el micro gobierne mas
de 4 puertas dado que la instalacion electrica que rodea al micro seria engorroso,seria mas cos_
tosa la instalacion electrica que la colocacion de otro micro separado.Por otra parte estoy pro_
bando con el 16f88 y 16f628 para usar elrelog interno y asi dos dos pines mas los utilizo como
interruptores para la direccion que asi se podria usar hasta 32 micro que es el maximo que se 
puede con RS485 te recuerdo que los pines del micro para que lo hagas en proteus PORTA,0 POR
TA,1 PORTA,2 tres nterructores a masa y y 3 resistencias de 10K a 5v de PORTB,4 a 7 ,4 pulsadores sin resistecias dados que estan accivadas la resitencias internas portb,0 a 3  4 reles
y porta 3 y 4 comunicacion. por otra parte a mesnos que yo lo halla interpretado mal no se para
que quieres husar el 16f887 cuando y (si tenemos el mismo ojetivo) este funciona vien de todas  formas esplicamelo con detalle haber de que forma puedo ayudar gracias pepe


----------



## Meta

Queiro usar el 16F887 que lo he adaptado a través del 16F84A y funciona. Mi idea es usar 8 entradas digitales y 8 salidas a base de relés. Ese es el motivo.


----------



## Depepees

;Hola META e estado mirando e echo este pero fijate que cosa mas rara estan activadas las
;restistencias pull-Up y sin embargo el poerto b estando abierto los interruptores cada uno 
:de las entradas tendrian que estar de color rojo en el simulador la cosa es que solo estan en
;rojo el portb7 y el port b 6 los demas no funcionan bien de todas formas te lo e puesto por_
que tu sabes que aveces tienes un error y por mucho que lo mires no lo ves  de todas formas
; seguire mirando haber si lo arreglo hasta ahora pepe
;           
;	===================================================================
;	 
;	 
; 	 
;

	LIST		P=16F887
	INCLUDE		<P16F887.INC>


	CBLOCK	0x0C
	ENDC

ENTER			EQU	.13			; Código de tecla "Enter" o "Retorno de Carro".
CAMBIO_LINEA	EQU	.10			; Código para el cambio de línea.

#DEFINE  Entrada0  PORTB,0		; Define dónde se sitúan las entradas.
#DEFINE  Entrada1  PORTB,1
#DEFINE  Entrada2  PORTB,2
#DEFINE  Entrada3  PORTB,3
#DEFINE  Entrada4  PORTB,4
#DEFINE  Entrada5  PORTB,5
#DEFINE  Entrada6  PORTB,6
#DEFINE  Entrada7  PORTB,7
#DEFINE  Salida0   PORTC,0
#DEFINE  Salida1   PORTC,1
#DEFINE  Salida2   PORTC,2
#DEFINE  Salida3   PORTC,3
#DEFINE  Salida4   PORTC,4
#DEFINE  Salida5   PORTC,5
#DEFINE  Salida6   PORTC,6
#DEFINE  Salida7   PORTC,7

; ZONA DE CODIGOS ********************************************************************

	ORG	0
	goto	Inicio
	ORG	4							; Aquí se sitúa el vector de interrupción para 
	goto	LeeEntradasVisualiza	; atender las subrutinas de interrupción.

Mensajes							; Los mensajes no deben sobrepasar las 256 
	addwf	PCL,F					; primeras posiciones de memoria de programa.
MensajeEntradas
	DT ENTER, CAMBIO_LINEA
	DT "Entrada7    Entrada6    Entrada5   Entrada4    Entrada3      Entrada2        Entrada1            Entrada0 "
	DT ENTER, CAMBIO_LINEA
	DT "--------   ---------   ---------  ---------   ---------    ---------     --------        -------- "
	DT ENTER, CAMBIO_LINEA, 0x00
MensajeAbierto
	DT  "Abierto     ", 0x00
MensajeCerrado
	DT " Cerrado     ", 0x00

Inicio
	call	RS232_Inicializa
	bsf		STATUS,RP0				; Configura como entrada las 4 líneas correspondientes
	bsf		Entrada0				; del Puerto B respetando la configuración del
	bsf		Entrada1				; resto de las líneas.
	bsf		Entrada2
	bsf		Entrada3
    bsf     Entrada4
    bsf     Entrada5
    bsf     Entrada6
    bsf     Entrada7
    bcf     Salida0
    bcf     Salida1
    bcf     Salida2
    bcf     Salida3
    bcf     Salida4
    bcf     Salida5
    bcf     Salida6
    bcf     Salida7
	bcf		OPTION_REG,NOT_RBPU		; Activa las resistencias de Pull-Up del Puerto B.	
	bcf		STATUS,RP0
	call	RS232_LineasBlanco		; Visualiza unas cuantas líneas en blanco
	call	RS232_LineasBlanco		; para limpiar la pantalla.
	call	LeeEntradasVisualiza	; Lee las entradas y visualiza por primera vez.
	movlw	b'10001000'				; Habilita la interrupción RBI y la general.
	movwf	INTCON
  ;  clrf    PORTC
    CLRF    PORTB
Principal
	sleep							; Espera en modo de bajo consumo que se
	goto	Principal				; modifique una entrada.

; Subrutina de Servicio a la Interrupcion" ----------------------------------------------
;
; Lee el estado de las entradas y las monitoriza en la pantalla del HyperTerminal.

LeeEntradasVisualiza
	call	RS232_LineasBlanco	
	movlw	MensajeEntradas			; Nombre de las entradas.
	call	RS232_Mensaje			; Lo visualiza en el ordenador.
LeeEntrada7
	btfss	Entrada7				; ¿Entrada = 1?, ¿Entrada = Abierta?alida
	goto 	Entrada7Cerrado
    bcf     Salida7 		; No, está cerrada.
	call	VisualizaAbierto
	goto	LeeEntrada6
Entrada7Cerrado
    bsf     Salida7
	call	VisualizaCerrado
LeeEntrada6
	btfss	Entrada6				; Se repite el procedimiento para las
	goto 	Entrada6Cerrado
    bcf     Salida6          		; demás entradas.
	call	VisualizaAbierto
	goto	LeeEntrada5
Entrada6Cerrado
     bsf    Salida6
	call	VisualizaCerrado
LeeEntrada5
	btfss	Entrada5	
	goto 	Entrada5Cerrado
    bcf     Salida5 
	call	VisualizaAbierto
	goto	LeeEntrada4
Entrada5Cerrado
    bsf     Salida5
	call	VisualizaCerrado
LeeEntrada4
	btfss	Entrada4
	goto 	Entrada4Cerrado
    bcf     Salida4
	call	VisualizaAbierto
	goto	LeeEntrada3
Entrada4Cerrado
    bsf     Salida4
	call	VisualizaCerrado
LeeEntrada3
    btfss   Entrada3
    goto    Entrada3Cerrado
    bcf     Salida3
    call    VisualizaAbierto
    goto    LeeEntrada2
Entrada3Cerrado
    bsf     Salida3
    call    VisualizaCerrado
LeeEntrada2
    btfss   Entrada2
    Goto    Entrada2Cerrado
    bcf     Salida2
    call    VisualizaAbierto
    goto    LeeEntrada1
Entrada2Cerrado
    bsf     Salida2
    call    VisualizaCerrado
LeeEntrada1
    btfss   Entrada1
    goto    Entrada1Cerrado
    bcf     Salida1
    call    VisualizaAbierto
    goto    LeeEntrada0
Entrada1Cerrado
    bsf     Salida1
    call    VisualizaCerrado
LeeEntrada0
    btfss   Entrada0
    goto    Entrada0Cerrado
    bcf     Salida0
    call    VisualizaAbierto
    goto    FinVisualiza
Entrada0Cerrado
    bsf     Salida0
    call    VisualizaCerrado

FinVisualiza
	call	RS232_LineasBlanco
	bcf		INTCON,RBIF				; Limpia el flag de reconocimiento de la
	retfie							; interrupción.
;
VisualizaAbierto
	movlw	MensajeAbierto			; Visualiza el mensaje "Abierto"
	call	RS232_Mensaje			; en el HyperTerminal.
	return
VisualizaCerrado
	movlw	MensajeCerrado			; Visualiza el mensaje "Cerrado"
	call	RS232_Mensaje			; en el HyperTerminal.
	return

	INCLUDE  <RS232.INC>
	INCLUDE  <RS232MEN.INC>
	INCLUDE  <RETARDOS.INC>
	END

;	===================================================================

;	===================================================================


----------



## Meta

Lo miraré.

El mío está aquí un ejemplo.

Descargar

Saludo.


----------



## Depepees

Hola META ante de enviar el programa anterior con el 16f887 estado mirando el data seet y no se
porque me a parecido que tenia en el registro intcon todo el puertob como interrupciones por
otro lado e mirado un libro que tengo de los16f87x  veo que solo tiene de interrupciones de portb
4 a portb7. yo creo que la solucion esta en elejir un pic que tengan 8 interrupciones si es que
lo hay de todas formas segure investigando haber que puedo aportar hasta ahora pepe

Hola mete e estado mirando tu programa y vei que las interrupciones las tienes con ; por  otra parte e
estado mirando un tutorial el cual dice que las interrupciones del 16f887 ademas de registro intcon tambien
hay que habilitar unos bit llamados (IOCB) seguido del nº de pin por ejen iocb4 que habilita el portb4 esta
escrito en c y no o entiemdo bien pero algo sobre eso hay hasta ahora pepe


----------



## Meta

Hola:

La Hoja de datos.
PIC16F887

Aquí la migración del 16F877A al 16F887.
http://www.microchip.com.ar/rs2009/soporte/clases/Migracion_877_a_887.pdf

Hay que mirar más a fondo lo que dijiste.

El código de lo que dijiste en C#.


		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];
                }
            }
        }

Código en Visual Basic 2010.


		Código:
	

Private Sub textBox1_TextChanged(sender As Object, e As EventArgs)
    Dim charNum As Char()
    If textBox1.Text.Length > 0 Then
        Dim Str As String = textBox1.Text
        charNum = Str.ToCharArray()
        Select Case AscW(charNum(0))
            ' 'A'
            ' 'B'
            ' 'C'
            ' 'D'
            ' 'E'
            Case 65, 66, 67, 68, 69, 70
                ' 'F'
                MessageBox.Show("Mayuscula" & charNum(0))
                Exit Select
            ' 'a'
            ' 'b'
            ' 'c'
            ' 'd'
            ' 'e'
            Case 97, 98, 99, 100, 101, 102
                ' 'f'
                MessageBox.Show("Minuscula" & charNum(0))
                Exit Select
        End Select
    End If
End Sub


----------



## Depepees

Hola META e estado hacien pruebas y e puesto el ultimo programa en un un pin 16f876 y fuciona
medi bien el caso es de porb4 a 7 funciona bien el resto de portb,0 a 3 solo se actualiza cuando
cambias una interrucion osea portb 4 a 7 y se actuliza tudo e puesto todo el portb interruptores
y el port c salida relè con esto llego a la conclusion que el programa funciona bien solo hay que
trasladarlo a un pic de 8 interrucciones.El 16f887 me e fijado bien y tiene 8 interrupcione pero
tambien hay que mirar otros rejistros dado que el portb tanbien funciona como entradas analo_
gicas aunque hay que mirar biel el registro ICBO Y IOCB e estado probando pero no e dado con la tecla de lo que estoy seguro es que hay que configurar bien las interrupciones.por otra parte ya
te dire como me va con esto ultimo que me as puesto,asta ahora 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
si ojeas el 2º programa o lo simulas en proteus lo veras claro es muy inportante lo de la luz por_
que independientemente que el pic funcionas desde los dos sitio lo tengo intalado a mucha
distancia y no lo veo fisicamente gracias por tu tiempo hata otra pepe


----------



## Meta

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.


----------



## Depepees

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


----------



## Meta

Ahora te hago un ejemplo.


----------



## Meta

Depepees dijo:


> 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.







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.


----------



## Depepees

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


----------



## Meta

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.


----------



## Depepees

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


----------



## Meta

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/ _


----------



## Depepees

Hola META si ese es el codigo.


----------



## Meta

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.


----------



## Depepees

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


----------



## Meta

Buenas:






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


----------



## Depepees

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


----------



## Meta

Depepees dijo:


> 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.


----------



## Depepees

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


----------



## Meta

Depepees dijo:


> 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.* 



*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


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232-port serie.rar
http://www.fileupyours.com/view/303869/WindowsFormsApplication1.zip

no he conseguido enviarlos por mail, los he subido a fileupyours, te servirá igual.

Hola meta si abre el circuito de 3 pic pon el 1º pic con los tres interruptores abiertos el2 pic con los 3
interruptores cerrados y el siguiente como te parezca,pero que todas sean distintas y apertale a los
pulsadores veras que pronto entiendes el asunto hata ahora pepe


----------



## Meta

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.


----------



## Depepees

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


----------



## Meta

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.






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






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.


----------



## Depepees

http://www.fileupyours.com/view/303869/INTERFAZ.rar


----------



## Meta

Depepees dijo:


> http://www.fileupyours.com/view/303869/INTERFAZ.rar



No me haz dado el proyecto completo.


----------



## Depepees

Hola META ,e¡El proyecto completo de momento  pienso que es asis,dime hace falta gracias pepe


----------



## Meta

Lo que falta es que no me haz dado el proyecto completo del programa.


----------



## Depepees

Hola META, El proyecto completo es no que no se hacer.Se hacer lo de los pulsadores pero nada mas.
Hasta ahorapepe

Hola META, como lo de transmitir los datos creo que esta claro lo que hace falta es e encendido y apagado
de la (luz) que yo he puesto un texbox,pero no se si es eso dado que tu en uno tienes puesto una bombillita
 yo por poner pongo lo que haga falta,pero es que no se que tengo que poner hata ahora pepe


----------



## Meta

Deja mirar bien y te comento.

Al menos envíame el proyecto completo, sólo me diste códigos. No se peude ver la Interfaz. Mira en mis Documentos y entra en la carpeta Visual C# 2010, luego entras en otra carpeta llamada Project y lo puedes localizar.


----------



## Depepees

Hola META he echo lo que dices  habro project y en windowsFormsApplication1 cuando le pico se me abre 
el interfaz entonces e copiado esa carpeta, para enviartela pero cuando le pico desde la carpeta que copiado no se abre el interfaz e intentado copiar toda la carpeta project pero no me deja hasta ahora pepe


----------



## Meta

Cuando comprimas el proyecto, no te olvides de cerrar el Visual C# primero, luego vete a la carpeta Project, localizas el proyecto y lo copias.


----------



## Depepees

http://www.fileupyours.com/view/303869/INTERFAZ  project.rar
http://www.fileupyours.com/view/303869/TERMOSTATO-RS232.rar


----------



## Depepees

http://www.fileupyours.com/view/303869/TERMO-1-LM35-1BIS.DSN

http://www.fileupyours.com/view/303869/RS232-port serie-3.DSN


----------



## Meta

Un consejo.

Céntrate en un sólo proyecto, ya llegarán los demás, porque sino no acabas nunca y lo se por experiencia. No tengas prisa.







Zoom.
http://www.subeimagenes.com/img/sin-titulo-1-25757.jpg

Ahora entiendo más o menos lo que hicieste sobre el MAX232. En cuanto a los pulsadores de los PIC, pon sus resistencias como haz puesto.

Ya entiendo algo


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232_port serie.HEX

Hola META,disculpame porque estoy  un poco atontado cuando te he mandado los dibujos del proteus no
he caido en cuenta que no  es como el MPLAB que cojes un texto lo pegas lo guarda y lo ensamblas en
proteus creo que segun que cosas no se puede. te he mandato el se serial por en hex supongo que ahora
lo veras mas claro gracias hata ahora pepe


----------



## Meta

Hola de nuevo:

Estoy aquí otra vez.

El enalce http://www.fileupyours.com/view/303869/RS232_port%20serie.HEX no me funciona.

En cuanto al esquema que haz hecho
http://www.subeimagenes.com/img/sin-titulo-1-25757.jpg
puedes cambiar de configuración manualmente. Con ello te hago una pregunta. ¿No puedes cambiarlo con otro PIC16F84A automáticamente usando sólo un pulsador por cada PIC esclavo?

Prefiero hacer prueba de la Interfaz con un ON y OFF independiente. Algo parecido abajo.
Ver el archivo adjunto 26911

Saludo.


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232 port serie.HEX

Hola META te e puesto otra vez el hex, lo he probado y me funciona bien de todas formas es
el 2º asm:Meta me da la inpresion que aun no me has entendido bien.los interruptores son para
que cada pic tenga su direccion si yo tengo una instalacion con X pic y se estropea uno lo
cambio por otro dado que todos tienen el mismo programa,solo tengo que porner su direccion
con los interruptores pienso que si pruebas el circuito lo entenderas bien.gracias pepe

yo he probado ese interfaz que tienes puesto y lo gonfigure off-0n A off-onB off-onC off-onD y funciona
bien estarian sobrando los 4 off y que cada pulsador ponga off/on.Ah cundo digo funciona es fisicamente
hasta ahora


----------



## Meta

Lo he probado y funciona.

Pusiste esto:


> Hola META te recuerdo los datos a enviar y recibir
> 
> 
> 1º gupo de pulsadores 000A,000B,000C 000D  DATOS PARA ENVIAR
> 2  GRUPO      ""      001A,001B,001C,001D
> 3º GRUPO              010A,010B,010C,010D
> 4  GUPO               011A,011B,011C,011D
> 5  GRUPO              100A,100B,100C,100D
> 6º GRUPO              101A,101B,101C,101D
> 7º GRUPO              110A,110B,110C,110D
> 8º GRUPO              111A,111B,111C,111D
> 
> NOTA. Yo he puesto para la lucesita texbox porque me  parece que es eso
> 
> Para encenderse = recibe los mismos datos que embia los pulsadores
> 
> para apagarse  =  recibe los mismos datos en miniscula =000a



Desde la Interfaz quiere que ponga los datos arriba para enviar que son en mayúscula. ¿Verdad?
¿Son en realidad ON?

Exacto, el textBox son las lucesitas que te dicen exactamente con textos lo que son, activado o desactivado, apagado o encendido. Es una forma de ver las cosas.


----------



## Depepees

Si todo los puldadores embian en mayuscula


----------



## Meta

Ok.

Voy hacer pruebas, no te desanimes.

Por lo qu eme he dado cuenta quieres que envíe al PIC 4 byte. ¿El PIC te hará caso realmente?

Dices que hay que enviar por ejemplo 000A que es esta combinación:


		Código:
	

            mBuffer[0] = 0x0; // Es el número 0.
            mBuffer[1] = 0x0;
            mBuffer[2] = 0x0;
            mBuffer[3] = 0x41; // Es la letra A.


¿El PIC te reconoce los 4 tramas de byte recibido?

En el ejemplo del libro solo reconoce una trama de byte. Te advierto por si acaso.


----------



## Depepees

META he visto que lo has probado pues te daras cuenta que si reconoce los 4 bit.Lee el 2º ASM


----------



## Meta

Hola de nuevo:

He puesto un código sencillo sobre el envío de botones, no he tocado para nada los textBox que cada uno de ello debe ser reconocido que ya haré más adelante.



		Código:
	

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO.Ports; // No olvidar aquí.

// http://social.msdn.microsoft.com/Forums/es-es/devcommes/thread/c0d40d0d-f867-4afc-8772-ffa51c432f9c

namespace Puerto_Serie
{
    public partial class Form1 : Form
    {
        // Utilizaremos un string como buffer de recepcion
        string Recibidos;

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

        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);
        }

        private void button_000B_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] = 0x42; // Es la letra B.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_000C_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] = 0x43; // Es la letra C.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_000D_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] = 0x44; // Es la letra D.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

    }
}







Prueba esta parte y me cuentas si funciona. Hay que diseñar bien la Interfaz.


----------



## Depepees

teclea ten el terminal 000A  111A y te daras cuenta

eso que has puesto esta bien es lo de los puldadores pero falta el cambio de color de los texbox


----------



## Meta

En los textBox quieres que se cambie los colores. ¿Puedes decirme qué colores deseas?

¿Por ahora quieres algo así?







Zoom.
http://www.subeimagenes.com/img/pic-26589.jpg

Saludo.


----------



## Depepees

Pues parecido al termical que esta arriba que cuando esta encendido rojo y apagado blanco ò menos rojo


----------



## Meta

¿Algo así?






Zoom
http://www.subeimagenes.com/img/pic-26594.jpg


----------



## Depepees

META eres un ANGEL perfecto


----------



## Meta

Una pregunta:
¿Al enviar el botón de esta Interfaz de Visual C#, Qué se enciende el textBox?


----------



## Depepees

No el texbox debe encenderse y apagarse con los datos que recibe del pic


----------



## Meta

Entonces hay que usar algo como esto.

http://msdn.microsoft.com/es-es/library/06tc147t(VS.80).aspx

Para dejar las cosas más claras. ¿Tiene que reconocer esto 000A y 000a?


----------



## Depepees

Correcto cada texbox recibe del pic la misma clave que tiene su respectivo pulsador para encenderse
y en miniscula para apagarse


----------



## Meta

No tengo idea de como hacerlo con los 4 bytes, así que preguntaré por aquí a ver si encuentro ayuda.

http://social.msdn.microsoft.com/Forums/es-es/devcommes/thread/fa4a63dc-3719-486f-b1fd-39065bc96acf

Una curiosidad, me he dado cuenta que cada PIC que tienes, hace lo mismo aunque cambies de congiguración. Puede haber tres PIC que suelte la misma información. ¿Qué snetido tiene?

Saludo.


----------



## Depepees

Si te fijas bien ningun pic manda la misma informacion si los interruptures estan cerrados manda 000 X
si los pulsadores estan habiertos envian 111 X y cada puerta manda su A,a B,b C,c D,d osea ningun pic
manda la misma informacion.Se entiende que ningun pic tendra la misma direccion

y es por eso que cada grupo de datos tiene que alojarse en el texbox que le corresponda

si no se hace asis si tengo 8 ò 20 pic tendria que hacerle un programa para cada uno y de esta manera
puedes ponerlo en cualquier direccion


----------



## Meta

Hola:

He comprobado que si pongo la misma dirección a todos los PIC, muestran la misma información. Me refería a eso. Así que si haces un circuito impreso, lo dejará la configuración fija ¿o pondrás microinterruptores?

Está bien tu idea. Me parece poco 4 pulsadores a enviar, no serámejor usar 8 con un PIC16F886 o 16 pulsadores con el PIC16F887. Es una sugerencia. Se podrá adaptar el código del 16F84A a otros PIC que digo.  

Usar muchos PIC pequeños pudiendo usar lo mismo para PIC más grandes te ahorra mucho dinero y componentes. Es otra sugerencia. 

Se que usando dos PIC con el mismo oscilador te funciona, lo que no se si funcionará para más PIC. Mejor usar un PIC con oscilador interno para ahorrar componentes, dinero y PCB más pequeño. Puedes usar el PIC16F628A por su precio, 16F88 también tiene oscilador interno a hasta 8 MHz pero es más caro, incluso puedes usar el 16F886/887 con su oscilador también interno.

Me da la impresión que usarás en el futuro más de 20 PIC16F84A. 

Saludo.


----------



## Depepees

Si ves que tienes mucha complejedad de momento  podemos hacerlo asi
1ºPIC  A,B,C,D encenderse a,b,c,d, apagarse
2ºPIC  E,F,G,H encenderse e,f,g,h   apagarse
3ºPIC  I,J,K,L   encenderse i,j,k,l    apagarse
4ºPIC  M,N,O,P encenderse m,n,o,p apagarse
5ºpic  Q,R,S,T encenderse q,r,s,t   apagarse
6º PIC U,V,W,X encendido u,v,w,x  apagarse
7º pic 1,2,3,4   encenderse 5,6,7,8 apagarse

Como tu dices que asis lo puedes hacer pues hazlo, y haber si consegimos hacerlo con los 4 bites
de esta forma si tienes instalados 20 pic tendrias que tener 20 repuestos de todas formas y para
y cojiendo esperiencia azlo como te parezca segun lo agas tu hare el asm del pic


----------



## Meta

Intento comprender. Voy hacerlo como dices, al menos intentarlo.

Puedo enviar los 4 bytes. ¿Tus PIc son capaces de detectar 010c? Son 4 bytes. Ahí está la cuestión.

Te veo demasiado empeñado con el 16F84A.

Saludo.


----------



## Depepees

De lo que dices del 628 tienes razon pero no lo del 16f887 porque este tipo es esencialmente
para encender y apagar luces por ejem de un dolegio,entonces la intalacion electrica para
gobernar 8 aulas seria mas costosa que poner 2 aparatos de 4 puestos porque tendrian que
ir y venir desde el aparato a los pulsadores y bombillas de cada aula

Si lo detecta, teclea en el proteus en el terminal virtual y lo veras como tienes 3 pic tienes que teclear
lo mismo que pongas en PORTA,0 PORTA,1 PORTA,2

Si con microinterruptores


----------



## Meta

Depepees dijo:


> Si con microinterruptores



Sin microinterruptores será. Entonces lo dejarás fijo sin cambiarlo.

Otra cosa por curiosidad y para aprender. ¿Por qué dos MAX232?


----------



## Depepees

Por otra parte he estado investigango con el 3º ASM que  puse que es para el 16f887 que se que tiene 8
interrupciones,pero hasta el momento no hallo como cofigurar las interrupciones

Claro si haces este ultimo de mandar y recibir un solo caracter no hace falta los microinterructores


----------



## Meta

¿Por qué dos MAX232?

Sólo puedes usar en este caso 8 PIC, no más.

Puedes usar el MAX233 para ahorrar condensadores.


----------



## Depepees

Lo de 2 RS232 es porque se entiende que el terminal la salida es TTL cuando lo aga en realidad hay primero
la salida del pc que es RS232 pasarla a TTL y de TTL a RS485

Una vez la señal convertida a RS485 se pueden poner en paralelo hasta 31 aparatos + el pc 32


----------



## Meta

Se el motivo del MAX232, lo qu eno se para qué quieres dos MAX232. En cuanto al RS485 es totalmente diferente.


----------



## Depepees

creo que lo intente en el proteus de otra forma con un solo RS232 y tenia problemas


----------



## Meta

¿Crees?
No estás seguro. 

Ya me hecho en la cama que es tarde. Hasta otra campeón. Deja ver si hay respuesta.


----------



## Depepees

Hay otro chaval que me da las gracias esta en este mismo foro pero en otra pagina por lo visto ha sacado
provecho de lo que  hemos puesto hasta ahora pepe


----------



## Meta

Siempre habrá gente que sacará provecho. Eso si, investiga que los MAX232 sólo basta 1, no dos. Y cada MAX232, tiene para dos PIC intependientemente.


----------



## Meta

Por curiosidad en tu código.
_ https://www.forosdeelectronica.com/posts/464938/ _
No entiendo mucho pero quiero saber con un simple ejemplo de los pulsadores, no los interruptores de configuración.

Al pulsar un botón que envía 000A o 000a. El Led del PIC se enciende con un pulsador y si lo vuelves a pulsar se apaga.

¿Puedes hacer un pequeño ejemplo básico?
No es lo mismo que usarlo modo interruptor.


----------



## Depepees

Hola META acabo de llegar a  casa y ahora te are un ejemplo primeramente tenemos que ponernos de acuerdo cuando decimos pulsadores ha que pulsadores nos referimos desde ahora en adelante les llamaremos pulsa-pic cuando0 nos referimos al pulsador del pic y pulsa-Inter cuando nos referimos al pulsador de interfaz (human machine).Como esta echo el ASM que estamos usando si tu aprietas el pulsa-pic ò el pulsa-Inter  no encienden ò apagan lo que hace es invertir la situacion que le precede osea si esta
encendido se apaga y si esta apagado se enciende ahora te are  un pequeño ejem con los comentarios y lo entenderas hata ahora pepe

http://www.fileupyours.com/view/303869/RS232_port serie.asm

Ahora te mando el hex que he intentando ponerlos juntos pero no me entra te he puesto un solo puldador
sin clave osea solo A para que encienda y apague desde el pulsa-pic y desde el pulsa-Inter.Dime como va el
asunto de los 4 bites.no se que le pasa al fileupyours que no me deje de momento mandar nada sera que
como es gratis habra que esperar unos minutos

http://http://www.fileupyours.com/v...eupyours.com/view/303869/RS232_port serie.asm

http://www.fileupyours.com/view/303869/RS232_port serie.HEX

El 1º asm tieme agunas cosas que ho estan bien mira el 2 cosas de las prisas


----------



## Meta

Gracias. El 2º no lo puedo ver, no se puede descargar.


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232_port serie.asm

Haber ahora si va bien si no dilo


----------



## Meta

No va bien, puedes comprimirlo en .zip o .rar el .asm y subirlo directamente desde el foro.


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232_port serie.rar

te he mandado el asm que esta bien  el hex supongo que esta bien,si no habra que esperar un poco porque
otra vez no me deje

He probado el hez y esta bien, ten presente que solo funciona un pulsador el portb,7 y en el termimal la A


----------



## Meta

Ahora mismo voy hacer dos exámenes de Java. Luego entro aquí otra vez. El enlace si me funcionó, gracias.


----------



## Depepees

Hola meta que tal va con los 4 bites


----------



## Meta

Por ahora nadie responde. Voy a seguir diciendo sugerencias en otro hilo a ver que pasa.

http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/1a54074c-c451-471a-8ea1-d1bb9e85db11

Se empieza por algo, deja ver si esta vez responden poco a poco.

Han respondido con este enlace.

En español
http://msdn.microsoft.com/es-es/library/system.collections.bitarray.aspx

Hay que experimentar.


----------



## Depepees

Hola META que tal, doy por supuesto que no tienes novedades sobre los 4 bite.El otro dia te
Pase el programa de el termostato te ruego ya que ahora estamos en "estamby" le heches un
vistazo,porque eso tambien puede ir integrado en el intefaz.
Tengo otras cosas para el interfaz,pero no te lo he dicho porque pienso que tu eres una persona
muy ocupada y no he querido bonbardearte.Pero son cosas sumamente interesante.,
cuando quieras te las especifico. Hasta ahora pepe


----------



## Meta

A su debido momento amigo. Vamos partes por partes.

Ahora si han respondido, falta más información y pruebas.


----------



## Depepees

http://www.fileupyours.com/view/303869/interrup 16f887.rar

Hola META  mira ese tutorial haber que puedes sacar


----------



## Depepees

http://www.fileupyours.com/view/303869/Meta-887.rar


----------



## Depepees

Hola Meta, tengo novedades:se puede hacer con un solo dato,es mejor hacerlo con los 4 bites pero si ves
que te causa problemas lo hacemos con 1 bite ahora me pongo hacer el asm hata luego pepe


----------



## Meta

Lo prefiero más.


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232_PortSerie_16.rar

Hola META,mira esto haber que te parece pepe

Hola META , en el proteus hay unos transsitores y un rele no le hagas caso se los habia borrado pero
no me di cuenta de guardarlos


----------



## Depepees

6http://www.fileupyours.com/view/303869/RS232_PortSerie_1.rar

Hola META este ultimo si esta listo,dime que te parece.hasta ahora pepe

http://www.fileupyours.com/view/303869/RS232_PortSerie_16.rar


----------



## Depepees

http://www.fileupyours.com/view/303869/PORT SERIE 32-88.zip

hola META aqui esta el de 32 pulsa con el 88 hasta ahora


----------



## Meta

No se descarga nada. ¿Caducó?


----------



## Depepees

Hola META estoy intentando mandartelo otra vez pero no me deja el fileup. de todas maneras paso ha decirte lo sigiente el otro ordenador que tenia se me ha estropeado,que donde tenia instalado el proteus 7.5
ahora estoy tabajando con otro ordenador que tengo intalado el proteus 6.9.Por si no se te habre el isis te
pongo como estan conectado el pic 16f88 PORTB,7 PULSADOR PORTB,6 SALIDA RELE PORTA0,1,2,3,4 ENTRADA DE INTERRUPTORES DE DIRECCION PORTA,6 SALIDA USAR Y PORTA,7 ENTRADA USAR.
A

Ahora miro haber si me deja para poner el asm. de todas formas ten presente  que si que es de 32 pulsadores y A ewnciende a apaga y asi susesibamente  b,c,d,e.hata ahora

2032-88.http://www.fileupyours.com/view/303869/PORT SERIE%zip


----------



## Meta

Puedes subir el archivo por site google, yo lo hago. tAmbién con el entras con el SkyDrive del www.hotmail.com que puedes encontrar en las opciones.

http://cid-083b3ddac7f60cad.skydrive.live.com/home.aspx?sa=747092246

Saludo.


----------



## Depepees

;*****************************RS485-P16.asm **************************************
;Sistema de gobierno desde el ordenador o desde el mismo puesto
;Joè Benjumea,4-4-2011
;Con este programa se puede comunicar con el ordenador 32 aparatos
; asignandole a cada uno su direccion.La direccion se toma de los 5 
;bit de menos peso de portA
;	==================================================================.
;
; ZONA DE DATOS **********************************************************************

	LIST		P=16F88
	INCLUDE		<P16F88.INC>


    __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF



	CBLOCK   0x0C		
	TeclaPulsada					;						.
	ENDC


#DEFINE  Pulsador  PORTB,7
#DEFINE  Luz       PORTB,6
llaves   EQU       0x0E
TECLA_A  EQU       'A'
TECLA_B  EQU       'B'
TECLA_C  EQU       'C'
TECLA_D  EQU       'D'
TECLA_E  EQU       'E'
TECLA_F  EQU       'F'
TECLA_G  EQU       'G'
TECLA_H  EQU       'H'
TECLA_I  EQU       'I'
TECLA_J  EQU       'J'
TECLA_K  EQU       'K'
TECLA_L  EQU       'L'
TECLA_M  EQU       'M'
TECLA_N  EQU       'N'
TECLA_Ñ  EQU       'Ñ'
TECLA_O  EQU       'O'
TECLA_P  EQU       'P'
TECLA_Q  EQU       'Q'
TECLA_R  EQU       'R'
TECLA_S  EQU       'S'
TECLA_T  EQU       'T
TECLA_U  EQU       'U'
TECLA_V  EQU       'V'
TECLA_W  EQU       'W'
TECLA_X  EQU       'X'
TECLA_Y  EQU       'Y'
TECLA_Z  EQU       'Z'
TECLA_1  EQU       '1'
TECLA_2  EQU       '2'
TECLA_3  EQU       '3'
TECLA_4  EQU       '4'
TECLA_5  EQU       '5'



; ZONA DE CÓDIGOS ********************************************************************

	ORG	0
    goto  Inicio
    ORG 4
    goto INTER
Inicio

	call	RS232_Inicializa
	bsf		STATUS,RP0			
	bsf     Pulsador
    bcf     Luz
    movlw   b'10111111'
    movwf   TRISB   
    movlw   b'10011111'
    movwf   TRISA
    movlw   b'01100000'
    movwf   OSCCON
    movlw   b'00000000'
    movwf   ANSEL
	bcf		STATUS,RP0
    movlw   b'10001000'
    movwf   INTCON
	clrf    PORTB
    clrf    PORTA 
    movf    PORTA,W    ; cargue el registro llaves perono me funciona bien
    andlw   b'00011111'
    movwf   llaves     	         				
Principal							
	call	RS232_LeeDato		
	call	TesteaTeclado
	goto	Principal



TesteaTeclado 




     movwf    TeclaPulsada
     xorlw    TECLA_P
     btfsc    STATUS,Z    
     goto     ALA_P
     CALL     RS232_LeeDato
     movf     TeclaPulsada,w
     xorlw    TECLA_Q
     btfsc    STATUS,Z  
     goto     ALA_Q

     movf     TeclaPulsada,w
     xorlw    TECLA_C
     btfsc    STATUS,Z    
     goto     ALA_C

     movf     TeclaPulsada,W
     xorlw    TECLA_D
     btfsc    STATUS,Z  
     goto     ALA_D

     movf     TeclaPulsada,w
     xorlw    TECLA_E
     btfsc    STATUS,Z    
     goto     ALA_E

     movf     TeclaPulsada,w
     xorlw    TECLA_F
     btfsc    STATUS,Z  
     goto     ALA_F  

     movf     TeclaPulsada,w
     xorlw    TECLA_G
     btfsc    STATUS,Z    
     goto     ALA_G

     movf     TeclaPulsada,w
     xorlw    TECLA_H
     btfsC    STATUS,Z  
     goto     ALA_H

     movf     TeclaPulsada,w
     xorlw    TECLA_I
     btfsc    STATUS,Z    
     goto     ALA_I

     movf     TeclaPulsada,w
     xorlw    TECLA_J
     btfsC    STATUS,Z  
     goto     ALA_J  

     movf     TeclaPulsada,w
     xorlw    TECLA_K
     btfsc    STATUS,Z    
     goto     ALA_K

     movf     TeclaPulsada,w
     xorlw    TECLA_L
     btfsC    STATUS,Z  
     goto     ALA_L

     movf     TeclaPulsada,w
     xorlw    TECLA_M
     btfsc    STATUS,Z    
     goto     ALA_M

     movf     TeclaPulsada,w
     xorlw    TECLA_N
     btfsc    STATUS,Z  
     goto     ALA_N  

     movf     TeclaPulsada,w
     xorlw    TECLA_Ñ
     btfsc    STATUS,Z    
     goto     ALA_Ñ


     movf     TeclaPulsada,w
     xorlw    TECLA_O
     btfsc    STATUS,Z    
     goto     ALA_O

     movf     TeclaPulsada,w
     xorlw    TECLA_A
     btfsc    STATUS,Z
     goto     ALA_A

     movf     TeclaPulsada,w
     xorlw    TECLA_B
     btfsc    STATUS,Z
     goto     ALA_B


     movf     TeclaPulsada,w
     xorlw    TECLA_R
     btfsc    STATUS,Z    
     goto     ALA_R

     movf     TeclaPulsada,w
     xorlw    TECLA_S
     btfsc    STATUS,Z    
     goto     ALA_S


     movf     TeclaPulsada,w
     xorlw    TECLA_T
     btfsc    STATUS,Z    
     goto     ALA_T


     movf     TeclaPulsada,w
     xorlw    TECLA_U
     btfsc    STATUS,Z    
     goto     ALA_U

     movf     TeclaPulsada,w
     xorlw    TECLA_V
     btfsc    STATUS,Z    
     goto     ALA_V


     movf     TeclaPulsada,w
     xorlw    TECLA_W
     btfsc    STATUS,Z    
     goto     ALA_W


     movf     TeclaPulsada,w
     xorlw    TECLA_X
     btfsc    STATUS,Z    
     goto     ALA_X

     movf     TeclaPulsada,w
     xorlw    TECLA_Y
     btfsc    STATUS,Z    
     goto     ALA_Y


     movf     TeclaPulsada,w
     xorlw    TECLA_Z
     btfsc    STATUS,Z    
     goto     ALA_Z



     movf     TeclaPulsada,w
     xorlw    TECLA_1
     btfsc    STATUS,Z    
     goto     ALA_1

     movf     TeclaPulsada,w
     xorlw    TECLA_2
     btfsc    STATUS,Z    
     goto     ALA_2


     movf     TeclaPulsada,w
     xorlw    TECLA_3
     btfsc    STATUS,Z    
     goto     ALA_3


     movf     TeclaPulsada,w
     xorlw    TECLA_4
     btfsc    STATUS,Z    
     goto     ALA_4


     movf     TeclaPulsada,w
     xorlw    TECLA_5
     btfsc    STATUS,Z    
     goto     ALA_5


     return


;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INTER
    movf  PORTA,W
    andlw b'00011111'
    addwf PCL,F

    goto  A_final
    goto  B_final
    goto  C_final
    goto  D_final
    goto  E_final
    goto  F_final
    goto  G_final
    goto  H_final
    goto  I_final
    goto  J_final
    goto  K_final
    goto  L_final
    goto  M_final
    goto  N_final
    goto  Ñ_final
    goto  O_final
    goto  P_final
    goto  Q_final
    goto  R_final
    goto  S_final
    goto  T_final
    goto  U_final
    goto  V_final
    goto  W_final
    goto  X_final
    goto  Y_final
    goto  Z_final
    goto  UNO_final
    goto  DOS_final
    goto  TRES_final
    goto  CUATRO_final
    goto  CINCO_final

     return

 ;^^+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


ALA_A

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x00      	
        btfsc   STATUS,Z	
        goto    ALA_A_A
        goto    fin
ALA_B               
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x01
        btfsc   STATUS,Z
        goto    ALA_B_B
        goto    fin

ALA_C

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x02      	
        btfsc   STATUS,Z	
        goto    ALA_C_C
        goto    fin
ALA_D               
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x03
        btfsc   STATUS,Z
        goto    ALA_D_D
        goto    fin

ALA_E

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x04       	
        btfsc   STATUS,Z	
        goto    ALA_E_E
        goto    fin
ALA_F               
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x05
        btfsc   STATUS,Z
        goto    ALA_F_F
        goto    fin

ALA_G

     	movf	PORTA,W	
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x06       	
        btfsc   STATUS,Z	
        goto    ALA_G_G
        goto    fin
ALA_H               
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x07
        btfsc   STATUS,Z
        goto    ALA_H_H
        goto    fin

ALA_I

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x08       	
        btfsc   STATUS,Z	
        goto    ALA_I_I
        goto    fin
ALA_J              
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x09
        btfsc   STATUS,Z
        goto    ALA_J_J
        goto    fin


ALA_K

     	movf	PORTA,W	
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x0A       	
        btfsc   STATUS,Z	
        goto    ALA_K_K
        goto    fin
ALA_L             
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x0B
        btfsc   STATUS,Z
        goto    ALA_L_L
        goto    fin


ALA_M

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x0C       	
        btfsc   STATUS,Z	
        goto    ALA_M_M
        goto    fin
ALA_N             
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x0D
        btfsc   STATUS,Z
        goto    ALA_N_N
        goto    fin



ALA_Ñ

     	movf	PORTA,W	
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x0E       	
        btfsc   STATUS,Z	
        goto    ALA_Ñ_Ñ
        goto    fin
ALA_O             
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x0F
        btfsc   STATUS,Z
        goto    ALA_O_O
        goto    fin

ALA_P

     	movf	PORTA,W		
        andlw   B'00011111'
     	movwf   llaves		
        xorlw   0X10
        btfsc   STATUS,Z	
        goto    ALA_P_P
        goto    fin
ALA_Q             
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0X11
        btfsc   STATUS,Z
        goto    ALA_Q_Q
        goto    fin


ALA_R

     	movf	PORTA,W	
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x12       	
        btfsc   STATUS,Z	
        goto    ALA_R_R
        goto    fin
ALA_S            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x13
        btfsc   STATUS,Z
        goto    ALA_S_S
        goto    fin

ALA_T

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x14       	
        btfsc   STATUS,Z	
        goto    ALA_T_T
        goto    fin
ALA_U            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x15
        btfsc   STATUS,Z
        goto    ALA_U_U
        goto    fin

ALA_V

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x16       	
        btfsc   STATUS,Z	
        goto    ALA_V_V
        goto    fin
ALA_W            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x17
        btfsc   STATUS,Z
        goto    ALA_W_W
        goto    fin

ALA_X

     	movf	PORTA,W	
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x18       	
        btfsc   STATUS,Z	
        goto    ALA_X_X
        goto    fin
ALA_Y            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x19
        btfsc   STATUS,Z
        goto    ALA_Y_Y
        goto    fin

ALA_Z

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x1A       	
        btfsc   STATUS,Z	
        goto    ALA_Z_Z
        goto    fin
ALA_1            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x1B
        btfsc   STATUS,Z
        goto    ALA_1_1
        goto    fin

ALA_2

     	movf	PORTA,W		
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x1C      	
        btfsc   STATUS,Z	
        goto    ALA_2_2
        goto    fin
ALA_3            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x1D
        btfsc   STATUS,Z
        goto    ALA_3_3
        goto    fin


ALA_4

     	movf	PORTA,W	
        andlw   b'00011111'	
     	movwf   llaves		
        xorlw   0x1E     	
        btfsc   STATUS,Z	
        goto    ALA_4_4
        goto    fin
ALA_5            
        movf    PORTA,W
        andlw   b'00011111'
        movwf   llaves	
        xorlw   0x1F
        btfsc   STATUS,Z
        goto    ALA_5_5
        goto    fin




;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

A_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_A_A

      btfsc    Luz     
      goto     Apaga_A
      bsf      Luz
      movlw    'A'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato     
      goto     fin
Apaga_A
      bcf      Luz
      movlw    'a'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto      fin




B_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_B_B
      btfsc    Luz
      goto     Apaga_B
      bsf      Luz
      movlw    'B'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_B
      bcf      Luz
      movlw    'b'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin

C_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_C_C
      btfsc    Luz
      goto     Apaga_C
      bsf      Luz
      movlw    'C'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_C
      bcf      Luz
      movlw    'c'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



D_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_D_D
      btfsc    Luz
      goto     Apaga_D
      bsf      Luz
      movlw    'D'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_D
      bcf      Luz
      movlw    'd'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


E_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_E_E
      btfsc    Luz
      goto     Apaga_E
      bsf      Luz
      movlw    'E'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_E
      bcf      Luz
      movlw    'e'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



F_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_F_F
      btfsc    Luz
      goto     Apaga_F
      bsf      Luz
      movlw    'F'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_F
      bcf      Luz
      movlw    'f'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin

G_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_G_G
      btfsc    Luz
      goto     Apaga_G
      bsf      Luz
      movlw    'G'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_G
      bcf      Luz
      movlw    'g'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin





H_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_H_H
      btfsc    Luz
      goto     Apaga_H
      bsf      Luz
      movlw    'H'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_H
      bcf      Luz
      movlw    'h'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin





I_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_I_I
      btfsc    Luz
      goto     Apaga_I
      bsf      Luz
      movlw    'I'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_I
      bcf      Luz
      movlw    'i'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin




J_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_J_J
      btfsc    Luz
      goto     Apaga_J
      bsf      Luz
      movlw    'J'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_J
      bcf      Luz
      movlw    'j'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



K_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_K_K
      btfsc    Luz
      goto     Apaga_K
      bsf      Luz
      movlw    'K'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_K
      bcf      Luz
      movlw    'k'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



L_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_L_L
      btfsc    Luz
      goto     Apaga_L
      bsf      Luz
      movlw    'L'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_L
      bcf      Luz
      movlw    'l'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


M_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_M_M
      btfsc    Luz
      goto     Apaga_M
      bsf      Luz
      movlw    'M'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_M
      bcf      Luz
      movlw    'm'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin





N_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_N_N
      btfsc    Luz
      goto     Apaga_N
      bsf      Luz
      movlw    'N'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_N
      bcf      Luz
      movlw    'n'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


Ñ_final
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_Ñ_Ñ
      btfsc    Luz
      goto     Apaga_Ñ
      bsf      Luz
      movlw    'Ñ'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_Ñ
      bcf      Luz
      movlw    'ñ'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


O_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_O_O
      btfsc    Luz
      goto     Apaga_O
      bsf      Luz
      movlw    'O'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_O
      bcf      Luz
      movlw    'o'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
                             ;++++++++++++++++++++++++++++++++++++++++++++++++++++



P_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_P_P
      btfsc    Luz
      goto     Apaga_P
      bsf      Luz
      movlw    'P'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_P
      bcf      Luz
      movlw    'p'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


Q_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_Q_Q
      btfsc    Luz
      goto     Apaga_Q
      bsf      Luz
      movlw    'Q'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_Q
      bcf      Luz
      movlw    'q'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


R_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_R_R
      btfsc    Luz
      goto     Apaga_R
      bsf      Luz
      movlw    'R'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_R
      bcf      Luz
      movlw    'r'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


S_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_S_S
      btfsc    Luz
      goto     Apaga_S
      bsf      Luz
      movlw    'S'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_S
      bcf      Luz
      movlw    's'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin

T_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_T_T
      btfsc    Luz
      goto     Apaga_T
      bsf      Luz
      movlw    'T'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_T
      bcf      Luz
      movlw    't'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


U_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_U_U
      btfsc    Luz
      goto     Apaga_U
      bsf      Luz
      movlw    'U'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_U
      bcf      Luz
      movlw    'u'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin






V_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_V_V
      btfsc    Luz
      goto     Apaga_V
      bsf      Luz
      movlw    'V'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_V
      bcf      Luz
      movlw    'v'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



W_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_W_W
      btfsc    Luz
      goto     Apaga_W
      bsf      Luz
      movlw    'W'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_W
      bcf      Luz
      movlw    'w'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



X_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_X_X
      btfsc    Luz
      goto     Apaga_X
      bsf      Luz
      movlw    'X'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_X
      bcf      Luz
      movlw    'x'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin



Y_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_Y_Y
      btfsc    Luz
      goto     Apaga_Y
      bsf      Luz
      movlw    'Y'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_Y
      bcf      Luz
      movlw    'y'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


Z_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_Z_Z
      btfsc    Luz
      goto     Apaga_Z
      bsf      Luz
      movlw    'Z'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_Z
      bcf      Luz
      movlw    'z'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


UNO_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_1_1
      btfsc    Luz
      goto     Apaga_1
      bsf      Luz
      movlw    '1'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_1
      bcf      Luz
      movlw    '!'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


DOS_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_2_2
      btfsc    Luz
      goto     Apaga_2
      bsf      Luz
      movlw    '2'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_2
      bcf      Luz
      movlw    '"'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


TRES_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_3_3
      btfsc    Luz
      goto     Apaga_3
      bsf      Luz
      movlw    '3'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_3
      bcf      Luz
      movlw    '·'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


CUATRO_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_4_4
      btfsc    Luz
      goto     Apaga_4
      bsf      Luz
      movlw    '4'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_4
      bcf      Luz
      movlw    '$'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin


CINCO_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      call     Retardo_20ms
ALA_5_5
      btfsc    Luz
      goto     Apaga_5
      bsf      Luz
      movlw    '5'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_5
      bcf      Luz
      movlw    '%'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato






fin



     bcf    INTCON,RBIF
     retfie




	INCLUDE  <RS232.88.INC>
	INCLUDE  <RETARDOS.INC>
	END


----------



## Meta

¿El RS485 o el RAS232?
Voy a mirar.


----------



## Depepees

no le hagas mucho caso al nombre poque yu aprobecho los parte de lo escrito para no teclear pero
es lo mismo que estamos hacienco

http://www.fileupyours.com/view/303869/RS232-32-88.zip


----------



## Meta

No descarga. Si ocupa megas. Divídelo en www.winrar.es a 2 MB y lo subes por el foro.


----------



## Depepees

Hola Meta,este ultimo que he puesto lo he mirado en el foro y se me descarga perfectamente,puede que
con el proteus no,pero ya te indique el conexxionado.PORTB,7 PULSADOR .PORTB,6 SALIDA RELE
PORTA,0,1,2,3,4 INTERRUPTORES DE DIRECCION PORTA 6,7 COMUNICACION CON PC.Cuando lo pruebes en el
proteus,no inporta como esten los interruptores lo pongas como lo pongas ,aprietas el pulsador y el mismo
te dice que direccion es.hasta ahora pepe


----------



## Meta

Hola:

Según en _este enlace_ que pusiste, tengo entendido que quieres saber que al pulsar un botón de la interfaz del PC se apague o se encienda el Led???????'

Déjamelo claro, lo tengo casi olvidado por dejarlo muchos días.

Me alegro que usaras el 16F88.

Saludo.


----------



## Depepees

HolaMETA el interfaz tendra 32 pulsadores de la A a la Z mas 1,2,3,4,5, los pulsadores del pc tendran que mandar siemore 1ºA 2ºB 3ºC 4ºD y asis asta la Z mas los numeros.
lo interesante es que cuando el texbox reciba "A" se encienda y "a" se apague eso mismo con todas las letras. si sigues teniendo alguna duda pregunta.pepe

Pero tu no hace falta que lo agas todo lo que de momento necesiti saber es el codigo para cuando el texbox
reciba "A" se encienda en un color mas ò menos rojizo y cuando reciba "a" se apague en un colort menos
intenso ò como este orijinalmente en blanco,pepe


----------



## Meta

Hola:

¿Puedes crear la interfaz en Visual C# los botones?

Ya me encargaré de la programación.


----------



## Depepees

ese ya lo habias echo tù en la pagina anterior, yo puedo hacerlo pero no me queda tan bien como a ti


----------



## Meta

Código:
	

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO.Ports; // No olvidar aquí.

// http://social.msdn.microsoft.com/Forums/es-es/devcommes/thread/c0d40d0d-f867-4afc-8772-ffa51c432f9c

namespace Puerto_Serie
{
    public partial class Form1 : Form
    {
        // Utilizaremos un string como buffer de recepcion
        string Recibidos;

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

        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);
            textBox_000A.BackColor = Color.Red;
        }

        private void button_000B_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] = 0x42; // Es la letra B.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            textBox_000B.BackColor = Color.Red;
        }

        private void button_000C_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] = 0x43; // Es la letra C.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            textBox_000C.BackColor = Color.Red;
        }

        private void button_000D_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] = 0x44; // Es la letra D.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            textBox_000D.BackColor = Color.Red;
        }
    }
}


Este código era de 4 bytes que no me sale.

¿Entonces quiere hacerlo por byte cada botón?


----------



## Depepees

si habiamos quedado que como tenias dificultades para hacerlo con 4 bites lo hariamos con 1 A,B,C,D,E,F
encendido a,b,c,d,e,f, apagado esto es refiriendome al texbox por supuesto los pulsadores siempre mandaran A,B,C,D,E,F


----------



## Meta

¿Cómo llamarás el nombre de los botones que puedes leer a simple vista?
Nombres que te guste para cada botón.







Saludo.


----------



## Depepees

Cada bonton no importa yo habia pensado ponerle off/on.1 off/on.2 y asi el resto lo inportante es el texbox
que se tendria que dejar en blanco, pero una vez terminado el interfaz poder escribir en ellos para ponerle el
nombre de la estancia donde ira instalado "sala,1" "pasillo" ecetera y esto no es posible habra que pensar ponerle algo por ejem  "1" "2" "3" enfin lo que te parezca


----------



## Meta

¿On Off en el mismo botón?

No te lo recomiendo.


----------



## Depepees

esto era una de las cosas que te dije que faltaban,lo ideal es que el texbox pudiera quedarse en blanco,pero
una vez echo el ejecutable poder poner el nombre que a cada cual quiera

si meta si te acuerdas cada boton  hace eso, si esta apagado lo enciende y si esta encendido lo apaga


----------



## Meta

Depepees dijo:


> si meta si te acuerdas cada boton  hace eso, si esta apagado lo enciende y si esta encendido lo apaga



Antes de tocar el famoso y popular textBox, nos centramos en una cosa. 

No recomiendo On/Off en el mismo botón. Haré una prueba para que lo veas.


----------



## Depepees

Meta si quieres deja el pulsador en blanco,la cuestion es que despues de estar echo el ejecutable se pueda
escribir ò bien en el texbox o el pulsador

de lo contrario hay que indentificarlo de alguna manera vien 1, 2 ,3 o lo que sea


----------



## Meta

Haré unas pruebas con On/Off, después juzga. Voy a empezar desde cero la apliación. Te advierto que trabajaré lento, ya que en estos momentos estoy estudiando Java para clase y es obligado.

Espera que haga un mini ejemplo de lo que deseas.


----------



## Meta

Código de un botón. El botón se llama On/Off.



		Código:
	

string botonazo_1 = "a"; 
        private void button_000A_Click(object sender, EventArgs e)
        {
            if (botonazo_1 == "a")
            {
                byte[] mBuffer = new byte[1];
                mBuffer[0] = 0x41; // Es la letra "A".
                serialPort1.Write(mBuffer, 0, mBuffer.Length);
                textBox_000A.BackColor = Color.Red;
                botonazo_1 = "b";
            }

            else
            {
                byte[] mBuffer = new byte[1];
                mBuffer[0] = 0x61; // Es la letra "a".
                serialPort1.Write(mBuffer, 0, mBuffer.Length);
                textBox_000A.BackColor = Color.Maroon;
                botonazo_1 = "a";
            }
        }

Si te fijas bien, envía *A* y la *a*. Puedes descargar el ejemplo hecho sólo con el primer botón y me dices si lo deseas así.


----------



## Depepees

Hola META e mirado el interfaz.y es igual que otro que tu tienes con 4 pulsadores de encendido y 4 de apagado.En su dia te dije que no estaba bien.Aqui nosotros tenemos que tener en cuenta que nuestro pulsador del interfaz osea el PULSA-INTER  es conmutador con el pulsador del pic osea PULSA-PIC por lo tanto lo primero que se tiene que tener en cuenta es que la luz que gobierna el pic se puede apagar y encender desde los 2 sitios por ese motivo la luz del texboz solo debe encenderse y apagarse cuando reciba
el dato desde el pic cuando reciba "A" se encienda y cuando reciba "a" se apage hasta ahora pepe

Otra cosa que he obserbado es que los texbox que no estam programados se puede escribir,pero no se puede escribir en el que esta programado.en los texbox se tendria que poder escribir una vez echo el ejecutable.hasta ahora pepe


----------



## Meta

Hola:

Es verdad, no lo recordaba. REcuerda que sólo puse el primer y único botón. Para dejar las cosas más claras. Porque tengo que hacer exámenes el Martes y Miércoles de Java y necesito hueco, tiempo libre para lo que estamos haciendo para Visual C#.










http://atc.ugr.es/docencia/udigital/ap10.html

No recordaba que el PIC es el que tiene que cambiar el color a la Interfaz, ejjeje. Sorry. Por lo que entiendo hasta el momento es:



 El color del textBox debe cambiarlo con la orden y desde el PIC.
El textBox se puede escribir. ¿Vas a escribir algo? ¿Qué se quede guardado y se carga al iniciar cualquier palabra escrita en el textBox?
La interfaz tiene 32 botones tipo pulsadores On-Off.

¿Falta algo más?


----------



## Depepees

Si correcto el texbox debe cambiarse de color cuando reciba el dato del pic.
el texbox para que sea un interfaz generico,se tiene que poder escribir una vez hecho el ejecutable,por
otra parte cuando te dije que podia utilizarse como central de alarmas ya te lo explicare porque eso solo
depende de la programacion del pic.hasta ahora pepe

El texbox o el pulsasor se tendria que poder escribir para ponerle el nombre de la estancia donde este insta-
lado finalmente


----------



## Meta

Depepees dijo:


> El texbox o el pulsasor se tendria que poder escribir para ponerle el nombre de la estancia donde este instalado finalmente



¿Y que se quede guardado los nombres en un archivo XML?


----------



## Depepees

si es posible si gracias pepe


----------



## Meta

Depepees dijo:


> si es posible si gracias pepe



Es posible. Te lo haré de una manera que pulsando un botón del menú se activen los textBox para que se puedan escribir y luego no se pueda modificar, ya lo verás. haré un ejemplo.

En cuanto a enviar la "A" y la "a" desde la Interfaz al PIC. ¿Después el PIC16F88 que es lo que hace?

¿Volver a enviar a la interfaz algún dato que identifique la luz del textBox?
¿Recibe la A y la a?


----------



## Depepees

No los pulsadores siempre van a enbiar el 1ºpulsador A,el 2º pul B,el3ºpul C,el 4º pul,D asi hasta la 27 que es la Z despues 1,2, 3,4,5 com un
total de 32 es el pic que cuando esta encendido manda A y cuando esta apagado manda a. por supuesto esto es refiriendome a la 1º direccion y el pic tiene la direccion 2 te mandara B encendido y b apagado.
y asi susesibamente todas las direcciones eceptuando los numeros que 1 es encendido y ! apagado, 2 encendido y " apagado 3 encen y · apag 4 encen y $ apag 5 encen y % apag

Los pulsadores siempre tienenque mandar este dato.Enpezando por el 1º A,B,C,D,E,F,G,H,I,J,K,L,
M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z,1,2,3,4,5,
El texbox recibira este dato para que se encienda,empezando por el 1ºA,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S.T.U,V,W,X,Y,Z,1,2,3,4,5
eL TEXBOX recibira este dato para que se apague enpezando por el 1º
a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z,!,",·,$,%,


----------



## Meta

Depepees dijo:


> No los pulsadores siempre van a enbiar el 1ºpulsador A,el 2º pul B,el3ºpul C,el 4º pul,D asi hasta la 27 que es la Z despues 1,2, 3,4,5 com un
> total de 32 es el pic que cuando esta encendido manda A y cuando esta apagado manda a.
> *
> ¿Estos pulsadores que dice son del PIC o de la Interfaz?*
> 
> por supuesto esto es refiriendome a la 1º direccion y el pic tiene la direccion 2 te mandara B encendido y b apagado.
> y asi susesibamente todas las direcciones eceptuando los numeros que 1 es encendido y ! apagado, 2 encendido y " apagado 3 encen y · apag 4 encen y $ apag 5 encen y % apag
> *
> El PIC me envía los datos que dices arriba por lo que entiendo.*
> 
> Los pulsadores siempre tienenque mandar este dato.Enpezando por el 1º A,B,C,D,E,F,G,H,I,J,K,L,
> M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z,1,2,3,4,5,
> 
> *¿Pulsadores del PIC otra vez?*
> 
> El texbox recibira este dato para que se encienda,empezando por el 1ºA,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S.T.U,V,W,X,Y,Z,1,2,3,4,5
> eL TEXBOX recibira este dato para que se apague enpezando por el 1º
> a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z,!,",·,$,%,
> 
> *Parece que esta parte si lo entiendo. Me explico. A parte de los pulsadores físicos del PIC, envía el encendido al textBox de la Interfaz 1º A,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S.T.U,V,W,X,Y,Z,1,2,3,4,5
> 
> No se si será los mismos pulsadores a lo On/Off del PIC o otros al lado que al pulsarlos envían
> 1º a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z,!,",·,$,%,
> 
> Corrígeme si me equivoco escrito justo arriba.*


*
Los pulsadores de la Interfaz del PC. ¿Hace lo mismo?
 ¿También envía al PIC **A,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S.T.U,V,W,X,Y,Z,1,2,3,4,5 para On y **a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z,!,",·,$,%, para Off ?*


----------



## Depepees

Meta los pulsadores de la interfaz siempre mandara A,B,C,D,E
El unico que varia es lo que manda el pic A cundo esta encendido a cuando esta apagado,por supuesto si es el 3 pic mandara C ò c


----------



## Meta

¿La interfaz solo manda A,B,C,D,E y ya está?

Pues diseña al menos la apariencia de la interfaz, me imagino que sabrás hacerlo. Me encargaré de la programación.


----------



## Depepees

Si meta la interfaz siempre manda las MAYUSCULAS + 1,2,3,4.5, el pic se encarga de hacer la inversion y
manda MAYUSCULAS cuando se enciende y minisculas cuando se apaga

la apariencia de la interfaz tu la as echo perfecto


----------



## Meta

Un único botón de este ejemplo envía al PIC desde la interfaz la *A* y la *a*.


		Código:
	

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO.Ports; // No olvidar aquí.

namespace Depepees_puerto_serie
{
    public partial class Form1 : Form
    {
        // Utilizaremos un string como buffer de recepcion
        string Recibidos;

        public Form1()
        {
            InitializeComponent();
            // Abrir puerto mientra se ejecute la aplicación
            if (!serialPort1.IsOpen)
            {
                try
                {
                    serialPort1.Open();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

            // Ejecutar la funcion Recepcion por disparo del Evento 'DataReived'
            //serialPort1.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
        }
        /*
        // Al recibir los datos
        private void Recepcion(object sender, SerialDataReceivedEventArgs e)
        {
            // Acumular los carácteres recibidos a nuestro 'buffer' (string)
            Recibidos += serialPort1.ReadExisting();
            // Invocar o llamar al proceso de tramas
            this.Invoke(new EventHandler(Actualizar));
        }
        // Procesar los datos recibidos en el buffer y extraer tramas completas
        private void Actualizar(object s, EventArgs e)
        {
            // Asignar el valor de la trama al textBox
            richTextBox1.Text = Recibidos;
        }
             */

        string botonazo_1 = "a"; 
        private void button1_Click(object sender, EventArgs e)
        {
            if (botonazo_1 == "a")
            {
                byte[] mBuffer = new byte[1];
                mBuffer[0] = 0x41; // Es la letra "A".
                serialPort1.Write(mBuffer, 0, mBuffer.Length);
                //textBox1.BackColor = Color.Red;
                botonazo_1 = "b";
            }

            else
            {
                byte[] mBuffer = new byte[1];
                mBuffer[0] = 0x61; // Es la letra "a".
                serialPort1.Write(mBuffer, 0, mBuffer.Length);
                //textBox1.BackColor = Color.Maroon;
                botonazo_1 = "a";
            }
        }
    }
}


¿Ahora, quieres recibir desde el PIC también la A y la a?
¿Para que se encienda y apague el textBox?


----------



## Depepees

eceptuanto los numeros que el pic mandara 1,2,3.4,5 encendido y las mayusculas de estos numeros apagado

No meta la interfaz solo mandara MAYUSCULAS MAS 1,2,3,4,5,

sI META el tex box al recibir mayusculas se enciemde y minisculas se apaga. Teniendo en cuenta la ecepcion
de los numeros que 1,2,3,4,5, seria encendido y !,",·,$,% apagado


----------



## Meta

Depepees dijo:


> No meta la interfaz solo mandara MAYUSCULAS MAS 1,2,3,4,5,



¿Entonces la interfaz envía sólo mayúsculas y los 1 al 5?


----------



## Depepees

si meta,acuerdate que hace tiempo te puse el trocito de programa donde el pic hace la inversion

F_final

      btfsc    Pulsador
      goto     fin
      call     Retardo_20ms
      btfsc    Pulsador
      goto     fin
ALA_F_F
      btfsc    Luz
      goto     Apaga_F
      bsf      Luz
      movlw    'F'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin
Apaga_F
      bcf      Luz
      movlw    'f'
      call     RS232_EnviaDato
      movlw    d'10'
      call     RS232_EnviaDato
      movlw    d'13'
      call     RS232_EnviaDato
      goto     fin

la F_final es para cuando el dati viene del pulsador del pic
Ala_F_F es cuando el dato viene del PC osea interfaz


----------



## Meta

Ok. Por fin te entiendo esta parte. Ahora me toca entender la otra. 

Nos centramos en un botón de la interfaz de C#. Como sólo envía la A, nunca la a al PIC. El PIC, el PIC puede volver a enviar a la interfaz A y la a.

¿Es así?


----------



## Depepees

Correcto el pic siempre que cambie de estado te mandara el dato de como se encuentra encendido MAYUSCULA apagado miniscula tanto si se ha cambiado desde la interfaz como del mismo pic


----------



## Meta

Hola:







Puedes descargar un ejemplo sencillo. En este caso son 4 botones de prueba que sólo envía A, B, C y D. No recibe nada, ya que estoy investigando cuando reciba A y a, para las luces del textBox. 

Otra cosa que notarás es el XML para guardar información y luego recuperarla en la interfaz. Puedes importar el XML con los datos guardados en un PenDrive como seguridad.

¿Alguna sugerencia?

Saludo.


----------



## Depepees

Estupendo meta,lo que si te diria es que el texbox cubdo este apagadp no quede tan oscuro que se vea bien
las letras po lo demas todo ok,haber si das con la tecla de como apagar y encender el texbox hasta ahora y
gracias por todo pepe


----------



## Meta

Lo de verse bien las letras lo puliremos poco a poco. Puedes investigar por ti mismo con el Visual C# o el Visual Basic o el que tengas y me cuenta como lo quieres realmente. Aprovecha este tiempo que estoy investigando como se hace lo de recibir carácteres.

Comprueba si es capaz de crear el archivo XML al lado del programa. También si es capaz de poner cualquier nombre que desees en los textBox. Cierra el programa y lo vuelves a abrir para saber si se queda guardado. Confírmalo.


----------



## Depepees

Bien quedo enterado, te dire otra cosa que quiero para el interfaz.Esto no depende de ti pero te lo digo para
que estes al corriente de todo.Resulta qu si tu necesitas tener una alarma pues esto viene de perlas,paso a
explicar junto al ordenador tiene que haber una caja en principio para convertir RS232 a RS485,pero puede
tener mas utilidades 1º en el interfaz deja un boton resevado para alarma bien se el 1º ò el ultimo.En el sitio donde quieres vijilar por ejem una puerta se pone un pic con un programa parecido al RS232_10 pero con un interruptor al abrir el interrupto el pic entra en un bucle y manda un dato a la interfaz por ejem A la cual encendera el 1º texbox prebiamente destinado a alarma a continuacion el pic espera 50_ms y manda otro dato que no se use en el interfaz ese
otro dato lo recibe otro pic alojado en la cajeta el cual activa un rele donde se puede poner una
sirena ò luz cuando tu allas chequeado la alarma si quieres borrarla solo tienes que pulsar en el
pulsa de interfaz y asis el micro sale del bucle. es una cosa sensilla que por supuesto tiene su 
utilidad saludos.pepe

Si META se queda guardado.


----------



## Meta

¿Tienes idea de cambiar de RS232 al RS485 tanto por HardWare como SoftWare?

Hola:

Aquí puedes descargar la 0.0.8. Con el simulador puedes probarlo. Lo que hecho es, que si desde el PIC, detecta la A, B, C, D, a, b, c y d, se cambia el color de los textBox como me has dicho. No se si funciona, ya me lo confirmarás.

¿Alguna sugerencia?

Saludo.

PD: _Cuando quieras explicar cosas como el RS232 y RS485, si es posible lo explica aunque sea con el paint para luego comparar el argumento con el dibujo o imagen. Así nos entenderemos menor._


----------



## Depepees

Hola meta he probado este ultimo y los reles de la placa me funciona bien pero las luces de interfaz no
lo he probado con iperterminal y el pic funciona bien.de lo que me dices de RS485 lo are por  hardware 
la semana proxima tendre reparado el otro ordenador y no te preocupes que te mandare todos los esquemas y programas hasta ahora pepe


----------



## Meta

Hola:

Estoy investigando como se hace lo de entender los bytes que recibe la interfaz, casi lo tengo entendido, debo hacer pruebas.
http://social.msdn.microsoft.com/Forums/es-es/vcses/thread/2d5acdd4-d7e3-4d5a-811c-2eade3cf3d46

Cuando consigas averiguar si te funciona el cambio de color de los textBos me avisas.


----------



## Depepees

http://www.fileupyours.com/view/303869/RS232-32-88.zip

aqui tienes el proteus y el asm y hex


----------



## Meta

Lo descargué, no me funciona. Tampoco haz puesto si va a 4 MHz el cristal. ejjeje. Quiero hacer pruebas sobre el C#.


----------



## Depepees

Si esta a 4 Mhz a mi me funciona


----------



## Meta

Pues no hace nada el programa ni el proteus.


----------



## Depepees

si no se descarga el proteus te digo la conecxion PORTB,7 PULSADOR PORTB,6 SALIDA RELE
PORTA,O,1,2,3.4 INTERRUPTORES DIRECCION PORTA6,7 COMUNICACION CON PC EL PIC ES 16F88

ese pic no lleba xristal pero esta configurado a 4 Mhz tambien el proteus


----------



## Meta

¿Cómo debo tener los pulsadores de configuración?


----------



## Depepees

Si ten presente que yo los pulsadores y los interruptores los derivo a masa y las resistencias de 10 k a 
+5v


----------



## Meta

Pues no, no me da respuestas.
¿Al final vas a seguir con el tema de las direcciones de los PIC?

¿Falta algo para agregar al C#?

¿Alguna funcionalidad?


----------



## Depepees

Si como te dije al princio pero tu me dijite que piano.Yo le pondria on relog a cada pulsador ò a cada direccion uno ò dos relojes esto tiene doble funcion 1 que se pueda encender y apagar cualquier punto a 
una hora determinada.la otra funcion es que de tal hora a tal quede bloqueado el pulsador del pic y que por 
ejen durante el dia quede bloquado y antes de hacerse oscuro se desbloquee. pero ten presente que lo mas
inportante siempre es que el texbox identifique las mayusculas de las miniscula.


----------



## Meta

Código:
	

Recibidos = System.Convert.ToString(byte_recibido);


            byte b = 255;
            switch (byte_recibido)
            {
                // A switch section can have more than one case label.
                case "A":
                    textBox1.BackColor = Color.Red;
                    break;
                case "B":
                    textBox2.BackColor = Color.Red;
                    break;
                case "C":
                    textBox3.BackColor = Color.Red;
                    break;
                case "D":
                    textBox4.BackColor = Color.Red;
                    break;
                case "a":
                    textBox1.BackColor = Color.Maroon;
                    break;
                case "b":
                    textBox2.BackColor = Color.Maroon;
                    break;
                case "c":
                    textBox3.BackColor = Color.Maroon;
                    break;
                case "d":
                    textBox4.BackColor = Color.Maroon;
                    break;
                default:
                    // Ignorar cualquier carácter que no reconozca.
                    break;
            }


----------



## Depepees

Ahora me pon a hacerlo pero ten presente que soy muy torpe en lo de visual


----------



## Meta

No eres torpe, no naciste aprendido. Tampoco se manejarlo bien como quiero.


----------



## Depepees

Cuando digo lo de las direcciones es simplemente para que el mismo pic con el mismo programa se pueda poner en cualquiera de las 32 sitios cambiandole la posicion de los interruptores


----------



## Meta

No veo que pase nada de anda.


----------



## Depepees

tienes que darle al pulsador, despues cambia los interruptores y pulsa otra vez segun te salga la letra e el
virtual terminal marca esa letra y te funciona ten presente que si los interruptores son 00000 la unica letra que entra es A  si es 00001 la B ,pero con el pulsador siempre te marca


----------



## Meta

No pasa nada de nada. jejeje.


----------



## Depepees

no se que decirte lo unico es que a mi me esta funcionando estoy tratando de copiarlo con la simulacion
pero no allo como


----------



## Meta

Si te funciona, mejor que mejor. ¿Debo hacer algo más?


----------



## Depepees

ten pondre otra vez el hex haber que pasa

http://www.fileupyours.com/view/303869/port serie 32-88.zip


----------



## Meta

No se me descarga, por facor, súbelo directamente al foro ese archivo en zip. Es mejor que el servidor que usas. A veces funciona, a veces no.


----------



## Depepees

:020000000528d1
:100008009e288524831686170613bf3086009f30e6
:10001800850060308f0000309b00831288308b0091
:100028008601850105081f398e008b241c2019289c
:100038008c00413a0319c2288b240c08423a031950
:10004800c9280c08433a0319d0280c08443a031964
:10005800d7280c08453a0319de280c08463a031934
:10006800e5280c08473a0319ec280c08483a031904
:10007800f3280c08493a0319fa280c084a3a0319d4
:1000880001290c084b3a031908290c084c3a0319a2
:100098000f290c084d3a031916290c084e3a031972
:1000a8001d290c08d13a031924290c084f3a0319c1
:1000b8002b290c08503a031932290c08513a031914
:1000c80039290c08523a031940290c08533a0319e4
:1000d80047290c08543a03194e290c08553a0319b4
:1000e80055290c08563a03195c290c08573a031984
:1000f80063290c08583a03196a290c08593a031954
:1001080071290c085a3a031978290c08313a03194d
:100118007f290c08323a031986290c08333a031947
:100128008d290c08343a031994290c08353a031917
:100138009b29080005081f398207a229b929d02957
:10014800e729fe29152a2c2a432a5a2a712a882a9d
:100158009f2ab62acd2ae42afb2a122b292b402bc8
:10016800572b6e2b852b9c2bb32bca2be12bf82bf3
:100178000f2c262c3d2c542c6b2c080005081f39fd
:100188008e00003a0319a729832c05081f398e0011
:10019800013a0319be29832c05081f398e00023a3b
:1001a8000319d529832c05081f398e00033a031932
:1001b800ec29832c05081f398e00043a0319032af9
:1001c800832c05081f398e00053a03191a2a832c37
:1001d80005081f398e00063a0319312a832c0508b1
:1001e8001f398e00073a0319482a832c05081f393e
:1001f8008e00083a03195f2a832c05081f398e00e0
:10020800093a0319762a832c05081f398e000a3a01
:1002180003198d2a832c05081f398e000b3a031900
:10022800a42a832c05081f398e000c3a0319bb2a0f
:10023800832c05081f398e000d3a0319d22a832c06
:1002480005081f398e000e3a0319e92a832c050880
:100258001f398e000f3a0319002b832c05081f390c
:100268008e00103a0319172b832c05081f398e00ae
:10027800113a03192e2b832c05081f398e00123ac8
:100288000319452b832c05081f398e00133a0319cf
:100298005c2b832c05081f398e00143a0319732b25
:1002a800832c05081f398e00153a03198a2b832cd5
:1002b80005081f398e00163a0319a12b832c05084f
:1002c8001f398e00173a0319b82b832c05081f39dc
:1002d8008e00183a0319cf2b832c05081f398e007e
:1002e800193a0319e62b832c05081f398e001a3a90
:1002f8000319fd2b832c05081f398e001b3a03199f
:10030800142c832c05081f398e001c3a03192b2c3a
:10031800832c05081f398e001d3a0319422c832ca3
:1003280005081f398e001e3a0319592c832c05081d
:100338001f398e001f3a0319722c832c861b832cbd
:10034800ca24861b832c061bb129061741309c241e
:100358000a309c240d309c24832c061361309c2485
:100368000a309c240d309c24832c861b832cca24a1
:10037800861b832c061bc829061742309c240a308a
:100388009c240d309c24832c061362309c240a3054
:100398009c240d309c24832c861b832cca24861b0a
:1003a800832c061bdf29061743309c240a309c2423
:1003b8000d309c24832c061363309c240a309c2423
:1003c8000d309c24832c861b832cca24861b832ceb
:1003d800061bf629061744309c240a309c240d304d
:1003e8009c24832c061364309c240a309c240d30f2
:1003f8009c24832c861b832cca24861b832c061bd7
:100408000d2a061745309c240a309c240d309c2464
:10041800832c061365309c240a309c240d309c24c0
:10042800832c861b832cca24861b832c061b242a18
:10043800061746309c240a309c240d309c24832cbb
:10044800061366309c240a309c240d309c24832c8f
:10045800861b832cca24861b832c061b3b2a061763
:1004680047309c240a309c240d309c24832c06138e
:1004780067309c240a309c240d309c24832c861bd6
:10048800832cca24861b832c061b522a0617483045
:100498009c240a309c240d309c24832c061368303d
:1004a8009c240a309c240d309c24832c861b832c8e
:1004b800ca24861b832c061b692a061749309c24ec
:1004c8000a309c240d309c24832c061369309c240c
:1004d8000a309c240d309c24832c861b832cca2430
:1004e800861b832c061b802a06174a309c240a3058
:1004f8009c240d309c24832c06136a309c240a30db
:100508009c240d309c24832c861b832cca24861b98
:10051800832c061b972a06174b309c240a309c24f0
:100528000d309c24832c06136b309c240a309c24a9
:100538000d309c24832c861b832cca24861b832c79
:10054800061bae2a06174c309c240a309c240d301a
:100558009c24832c06136c309c240a309c240d3078
:100568009c24832c861b832cca24861b832c061b65
:10057800c52a06174d309c240a309c240d309c2433
:10058800832c06136d309c240a309c240d309c2447
:10059800832c861b832cca24861b832c061bdc2aef
:1005a80006174e309c240a309c240d309c24832c42
:1005b80006136e309c240a309c240d309c24832c16
:1005c800861b832cca24861b832c061bf32a06173a
:1005d800d1309c240a309c240d309c24832c061393
:1005e800f1309c240a309c240d309c24832c861bdb
:1005f800832cca24861b832c061b0a2b06174f3014
:100608009c240a309c240d309c24832c06136f30c4
:100618009c240a309c240d309c24832c861b832c1c
:10062800ca24861b832c061b212b061750309c24ba
:100638000a309c240d309c24832c061370309c2493
:100648000a309c240d309c24832c861b832cca24be
:10065800861b832c061b382b061751309c240a3026
:100668009c240d309c24832c061371309c240a3062
:100678009c240d309c24832c861b832cca24861b27
:10068800832c061b4f2b061752309c240a309c24bf
:100698000d309c24832c061372309c240a309c2431
:1006a8000d309c24832c861b832cca24861b832c08
:1006b800061b662b061753309c240a309c240d30e9
:1006c8009c24832c061373309c240a309c240d3000
:1006d8009c24832c861b832cca24861b832c061bf4
:1006e8007d2b061754309c240a309c240d309c2402
:1006f800832c061374309c240a309c240d309c24cf
:10070800832c861b832cca24861b832c061b942bc4
:10071800061755309c240a309c240d309c24832cc9
:10072800061375309c240a309c240d309c24832c9d
:10073800861b832cca24861b832c061bab2b06170f
:1007480056309c240a309c240d309c24832c06139c
:1007580076309c240a309c240d309c24832c861be4
:10076800832cca24861b832c061bc22b06175730e2
:100778009c240a309c240d309c24832c061377304b
:100788009c240a309c240d309c24832c861b832cab
:10079800ca24861b832c061bd92b061758309c2489
:1007a8000a309c240d309c24832c061378309c241a
:1007b8000a309c240d309c24832c861b832cca244d
:1007c800861b832c061bf02b061759309c240a30f5
:1007d8009c240d309c24832c061379309c240a30e9
:1007e8009c240d309c24832c861b832cca24861bb6
:0807f800832c061b072c0617d9
:02400e00303f41
:00000001ff


----------



## Meta

Jajajajajaj, me refería poner el .zip en el foro al igual cuando se lo envías ha alguien por e-mail. Deja ver si así sirve.


----------



## Depepees

he intentado pero no he podido


----------



## Meta

Ok. Lo he probado, no tengo efecto nada de nada. Lo bueno que a ti te funciona y me vale, confío en ti.

¿Hay qu ehacer algo más?


----------



## Depepees

te dije lo de los relojes si quieres te lo explico con deralles


----------



## Meta

Por lo que entendí. Se que usas relojes, pero no se si son externos o que tienen que ver C#.


----------



## Depepees

Serian relojes integrados en el interfaz,pero si quieres lo dejamos de momento,hasta terminar lo que se esta
haciendo


----------



## Meta

Ok. Cuando creas que hemos terminado este mini interfaz, empezamos con esos relojes para hacer pruebas como dices. ¿Cuándo empezamos?

Todavía sigo investigando por aquí.
http://social.msdn.microsoft.com/Forums/es-es/vcses/thread/2d5acdd4-d7e3-4d5a-811c-2eade3cf3d46
Saludo.


----------



## Depepees

Te dire los detalle para que lo hagas cuando te parezca.Se trataria que cada pulsador ò cada puesto ò punto tenga un relog.Este relog tendria dos funciones,al pic se le tendria que poner
otro interruptor le llamaremos  inter_hora posicion A y posicion B en la posicion A el pic cuando recibe el dato del interfaz se encenderia y cuando recibe otra vez el dato se apagaria esto seria
para las luces exteriores se enciendan y apagen solas sin interbenir nadie por control horario
el inrter-hora en la posicion B seria para bloquear el pulsador del pic osea si el pic esta controlando una luz que no necesite que este encendida durante el dia pues ese mismo dato bloquearia el pulsador del pic cada relog que este intalado en la interfaz tendria que mandar los
siguientes datos,que son datos que no usamos el 1º relog mandaria "a" el 2º "b" el 3º "c" y ais hasta
los relojes que se quieran poner.En los relojes se tiene que poder cambiar la hora con facilidad
asi por ejem para luces exteriores se pondria a mandar dato a las 8 PM y 8 AM otro dato. hasta
ahora meta como dicen los radioaficionados me boy a la banda de 2 metros osea a dormir gracias
y hasta siempre pepe

otra cosa que se me ha olvidado hace tiempo te puse un termostato.es muy interesante porque se puEde
gobernar desde la pc Y desde el mismo sitio osea cambiar la temperatura esta en una pajina de las primeras
que empezamos


----------



## Meta

Buenas:

Si puedes, coges el Paint o Photoshop y haces una prueba de lo que me hablas. Por lo que entiendo. Que haya como un reloj de este tipo en C#.






¿Algo de eso?
¿Qué compare fechas?

Te lo explica por aquí.
http://systemtak.blogspot.com/2010/03/diferencia-de-horas-en-c.html

Saludo.


----------



## sjuan

si ta muy bueno esto y quisiera poder aprender a programar tan bien


----------



## Meta

sjuan dijo:


> si ta muy bueno esto y quisiera poder aprender a programar tan bien



No se programar, Por eso uso foros y focumentación del MSDN. ¿Quieres hacer algo de aquí?

Deje que se despierte y continuamos hacer cosas.


----------



## sjuan

Meta dijo:


> No se programar, Por eso uso foros y focumentación del MSDN. ¿Quieres hacer algo de aquí?
> 
> Deje que se despierte y continuamos hacer cosas.



a no y como se llama hacer eso





Meta dijo:


> Buenas:
> 
> Si puedes, coges el Paint o Photoshop y haces una prueba de lo que me hablas. Por lo que entiendo. Que haya como un reloj de este tipo en C#.
> 
> 
> 
> 
> 
> 
> ¿Algo de eso?
> ¿Qué compare fechas?
> 
> Te lo explica por aquí.
> http://systemtak.blogspot.com/2010/03/diferencia-de-horas-en-c.html
> 
> Saludo.


----------



## Meta

Se llama programar, no por ello signifique que sepa con soltura, me queda mucho que aprender.

Lo de aprender, preguntas para uno mismo

*1)* ¿Qué lenguajes quiero aprender y por qué?

*2)* ¿A qué va dirigido los programas? ¿PDA, móviles, microcontroladores, PLC, Linux?

*3) *¿Por qué quiero aprender a programar? ¿Hobby? ¿Me lo exige la empresa? ¿Curiosidad? ¿Ver algo nuevo?

*4)* ¿Qué modalidad quiero aprender? ¿Orientado a páginas Web, a escritorio?

*5)*  ¿Quiero aprender a programar un PC, lo considero una parte fundamental y  un nivel más exigente para saber de ordenadores? ¿No me basta sólo con  manejar bien Sistemas Operativos? 

*6)* ¿Quiero relacionar la programación y PC? ¿También con el mundo de la electrónica?

Puedes responderte a ti mismo o hacia los demás para que te orientes o orienten mejor. Usted decide.

Saludo.

¿Tienes en mente en hacer algo de programación relacionado con este mundo?


----------



## willyfv

Saludos Meta,

Tengo una duda para recibir datos en visual basic tiene que ser uno por uno o puedes enviar un texto, ejemplo
solo envia "A"  o pueden enviar del pic "Foros de Electronica"
hice las dos pruebas pero no se como visualizarlo y que se mantenga sin borrarse podrias dame una mano con esto.


----------



## Meta

Hola willyfv:

Si te refieres a VB6 no se como se hace, estoy aprendiendo como manejar el puerto serie para hacer un manual, también LPT.

Si te refieres a VB .net se que se puede hacer de la manera como desees. El PIC puede enviar una cadena de textos como dices. Tengo un manual hecho sobre ello que puedes ver aquí.

Lo que estoy averiguando tanto en C# y VB .net como se leer un archivo .hex para enviarlo al puerto serie que no me sale. Lo averiguaré.

Saludo.


----------



## sjuan

Meta dijo:


> Se llama programar, no por ello signifique que sepa con soltura, me queda mucho que aprender.



buenop listo



Meta dijo:


> Lo de aprender, preguntas para uno mismo
> 
> *1)* ¿Qué lenguajes quiero aprender y por qué?



los mas utiles, para que, para estar actualizado con la tecnologia que mueve el mundo 



Meta dijo:


> *2)* ¿A qué va dirigido los programas? ¿PDA, móviles, microcontroladores, PLC, Linux?



quiero  aprender cualquier cosa en la que pueda mezclar PC y electrónica 



Meta dijo:


> *3) **¿Por qué quiero aprender a programar? ¿Hobby?* ¿Me lo exige la empresa? *¿Curiosidad? ¿Ver algo nuevo?*


 



Meta dijo:


> *4)* ¿Qué modalidad quiero aprender? ¿Orientado a páginas Web, *a escritorio*?



a escritorio pero seria bueno conocer algo de paginas



Meta dijo:


> *5)*  ¿Quiero aprender a programar un PC, lo considero una parte fundamental y  un nivel más exigente para saber de ordenadores? ¿No me basta sólo con  manejar bien Sistemas Operativos?



las dos 



Meta dijo:


> *6)* ¿Quiero relacionar la programación y PC? ¿También con el mundo de la electrónica?



ya lo dije





Meta dijo:


> *¿Tienes en mente en hacer algo de programación relacionado con este mundo?*


*

si claro pero todavía no se que es  *


----------



## willyfv

Ok gracias Meta, voy  leerlo, sobre el puerto paralelo esta muy bien ya lei tu manual y esta muy bien documentado


----------



## Meta

Hola @sjuan:

Puedes coger ideas con videotutoriales incluidos. Me lohe descargado el paquete completo, no recuerdo el enlace ahora pero puedes verlo en este otro que es el mismo. Una cosa que este enlace no funciona con firefox, si con Internet Explorer. 

http://www.desarrollaconmsdn.com/msdn/CursosOnline/Curso_Intro_NET_CSharp/index.html

Hay otro enlace mejor que este para aprender bien, bien desde los inicios con variables, no lo recuerdo ahora y es buenísimo.

Para coger ideas puedes ver muchos vídeos de C# o CSharp empezando por aquí.






He aprendido un poquito mirando haciendo algunos ejemplos en la web oficial.

Tutoriales C#:
http://msdn.microsoft.com/es-es/library/1dbsh6t3.aspx

Dicen que este es un buen libro.





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

Hay mucha más documentación pichando por aquí.

Hola @willyfv:

Seguiré haciendo manuales, poco a poco estoy intentando averiguar como se maneja el puerto serie y paralelo para el VB6. Más adelante con Java ya que le he metido mano enclase y sigo con ello.

Saludo a todos y a todas.


----------



## sjuan

eso era lo que quería gracias.


----------



## Meta

sjuan dijo:


> eso era lo que quería gracias.



Esto es lo que tenías que dejar claro.


----------



## Depepees

Si META es algo como lo que has puesto,si por ejen el interfaz tiene 5 relojes estos estaran alojados en el
1,2,3,4,5 pulsadores que correspnden a la A,B,C,D.E como estos datos ya lo ocupamos para encendet y apagar usaremos a,b,c,d,e si el relog se usase solo para mapagar y encende se podria usar las mayusculas
pero usando otro dato siempre tenemos la opcion que el pic haga otra cosa.De los datos que me mandaste eyer pues he intentado de hacerlo (voy para tras como el cangrejo) antes me funcionaba los reles ahora nada hasta luego pepe


----------



## Meta

Hola:

Los cangrejos can de lado. 

:cabezon:

Dejaremos los relojes para el final, ya que lo importante es lo primero. Si quieres hacer ejemplos lo haremos, no tengo idea de relojes, pero se puede investigar en los foros de MSDN.

Te recuerdo que me cuesta seguir cuando escribes a veces, por eso usa el Paint y te expresa con imágenes o bocetos también.


----------



## Depepees

Hola METa, si lo importante es que el texbox identifique el dato y cambie de color, lo otro creo que no sera tan dificil


----------



## Meta

Hola Depepees:

¿Qué el textBox identifique el dato?
¿Para qué?

Saludo.


----------



## Depepees

Bueno se supone es lo que estamos intentando de hacer,cuando sea mayuscula se encienda y miniscula se apague


----------



## Meta

Esi si lo tengo claro, pensé que era otra cosa a parte de lo que has dicho, jejeje.

Parece que casi lo consigo, aún queda esperar para solucionar el problema.

http://social.msdn.microsoft.com/Fo...e3cf3d46#e0ca5e6a-0b58-48fa-accf-58d0fbf979fc

Saludo.


----------



## Depepees

Bien yo te prarare una carpeta con todos los esquemas y asm,porque hay cosas que tenia en el otro ordenador y tengo que hacerlo otra vez hasta ahora pepe


----------



## Meta

Ahora no se si me funciona, pero me lo ejecuta. En el exe te lo explica algo.


----------



## Depepees

Hola META he probado este ultimo que has puesto. resulta que se abre bien pero cuando aprieto un pulsador
en relè funciona pero me sale un letrero en el que dice (se ha detectado un problema y debe cerrarse) y a
continuacion se cierra los reles funcionan solo una vez y despues de pulsar es cuando sale el letrero el texbox no cambia de color


----------



## Meta

Dime pasa una captura del problema para verlo. Otra cosa, te faltó en el proteus añadir el COMPIN.


----------



## Depepees

META no se como capturar el letrero que me sale, pero ahora lo he probado sin enchufar la placa y no sale 
 el letrero solo sale al enchufar la placa,con los otros dos que mandaste anteriormente no sucedia


----------



## Meta

Me refiero un captura de pantalla con el botón "Impr PetSis", cerca del botón a la derecha del F12. Luego le das guardar en el paint.

Aquí hay un mini manual para que funcione  el simulador.
_ https://www.forosdeelectronica.com/posts/242177/ _
Saludo.


----------



## Depepees

META ya intente mandarte un dibujo del circuito isis,cuando no se te descargaba el archibo y en este ordenador no se pero no puedo


----------



## Meta

Pulsa el botón de capturar toda la pantalla. Habres el Paint en blanco, en las opciones de arriba, le das editar, luego pegar. Al final lo guardas en .jpg.


----------



## Depepees

No META con este cacharro no hay forma


----------



## Meta

¿Qué cahcarro tienes?

¿Un Spectrum?







Tiene que funcionar. Saca foto con el móvil (o celular), cámara digital o algo. ¿Qué es lo que dice el mensaje?
Escríbelo. ¿Algo del puerto ocupado?


----------



## Depepees

El letrero es el que normalmente sale cuando hay algon erro en este caso dice informe a microsof le doy
para que me envie informe de errores y no me manda nada mi telefono no tiene camara


----------



## Meta

Quita eso en las opciones de Mi PC del Windows XP. ¿Sabes hacerlo?

Otra cosa, borra el xml que te crea al lado, quizás deba actualizar.


----------



## Depepees

no,no se he estado mirando en panel de control y no se.ten presente que yo se ge microcontroladores pero poco mas


----------



## Meta

Comprueba las cosas con otro ordenador de alguien. Entonces estaré esperando.


----------



## Depepees

ahora son las 12,20 PM no es hora de molestar a nadie mañana lo podre hacer


----------



## Meta

Lo se, eejejejejejeje. me di cuenta, jejeje.
Si e sposible, que te dejen un Pentium. Es broma.


----------



## Depepees

Este que tengo es un cacharro que lo compre por 60 euro lo uso solo para goberar algunas luces y temperatura por internet. el que se ha estropeado es un HP  y windon 7

cuando me arreglen el otro que tiene camara podemos hacer videoconferencia haber si nos entendemos mejor


----------



## Meta

Ok, entonces toca esperar mientas sigo resolviendo el problema del Switch.






Zoom.
http://www.subeimagenes.com/img/hola-36656.png

Saludo.

Funciona con el COM2, ponlo a COM1 si es el que usas.

Código fuente del C#.

Descarga

Saludo.


----------



## Depepees

Hola Meta,quedo enterado hasta luego


----------



## Meta

Me salió el envío de bytes de un archivo .bin para el puerto serie en visual C#. _(Cuadno me salga todo bien, lo haré con VB .net, VC++ y e incluso con Java)._






*Code:*
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO; // No olvidar.
using System.IO.Ports;

namespace EEPROM_Prueba
{
public partial class Form1 : Form
{
public Form1()
        {
InitializeComponent();
// Abrir puerto mientra se ejecute la aplicación
if (!serialPort1.IsOpen)
            {
try
{
serialPort1.Open();
                }
catch (System.Exception ex)
                {
MessageBox.Show(ex.ToString());
                }
            }
        }

private void button_buscar_archivo_Click(object sender, EventArgs e)
        {
// Encuantro un archivo...
if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
textBox_ubicacion_archivo.Text = openFileDialog1.FileName.ToString();
            }

// ...inmediatamente lo lee en byte en el textBox_hex.
Cursor cur = this.Cursor;
this.Cursor = Cursors.WaitCursor;

//
int b;
FileStream fs = new FileStream(textBox_ubicacion_archivo.Text, FileMode.Open, FileAccess.Read);
StringBuilder sb = new StringBuilder();

            while ((b = fs.ReadByte()) != -1) sb.Append(string.Format("{0:X02} ", b));
fs.Close();

textBox_hex.Text = sb.ToString();
// textBox_hex.Font = new Font("Courier New", 10);
            // textBox_hex.ScrollBars = ScrollBars.Vertical;
textBox_hex.SelectionStart = 0;

//
this.Cursor = cur;

        }

private void button_Grabar_Click(object sender, EventArgs e)
        {
byte[] file = null;
file = File.ReadAllBytes(textBox_ubicacion_archivo.Text);
            for (int i = 0; i <= file.GetUpperBound(0); i++)
            {
serialPort1.Write(file, i, 1);
            }


        }
    }
}


----------



## Depepees

OK esperp buenas nuevas


----------



## Meta

Hola:

No se si funciona. Avísame.

Saludo.


----------



## Depepees

hOLA META hoy no he podido mirarlo no tenia las herramientas adecuadas mañana te digo algo saludos
pepe


----------



## Depepees

Que tal META he mirado este ultimo que me has puesto y sigue igual.hasta ahora saludos pepe


----------



## Meta

Me lo imaginaba, aquí me dio otra respuesta:

http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/f24dfbd1-ef8a-4354-bbce-ffa430dcccec

Voy a probar.

Saludo.


----------



## willyfv

Saludos,

Este es un mini proyecto donde se aplica Visual Basic 6.0 mas el Pic 16f628a por medio de comunicacion serial simulado en proteus y  Virtual Serial Port Driver, donde podemos encerder cuaquier tipo de equipos aca solo simulamos varios led.

Como podran ver poco a poco he podido mejorar el diseño en Visual Basic y establecer la comunicacion con el pic.

El programa del pic esta realizado en PicBasic.

*Meta* hace poco minutos lei sobre *Sistema Scada* donde tu hiciste algunos comentarios, por fin hiciste algun programa o simulaste algo.


----------



## Meta

He estado probando su ejemplo, no funciona, al menos a mí si pulso teclas en el Virtual Terminal.


----------



## Depepees

Hola  META, tambien e mirado lo que ha puesto el compañero,lo unico que he podido habrir
es el ASM, pero como es en basic tampoco me aclaro mucho.
Y TU ADELANTE CON LO NUESTRO , saludos pepe


----------



## willyfv

*Meta* que no te funciono, el circuito en Proteus o en sistema en Visual basic?

El Circuito de proteus cuando lo inicias automaticamente enciende el LED indicando que ya esta n funcionaminto, en el Bisual basic tienes que abri el archivo por defecto tiene el nombre de proyecto1.vbp y de igual forma cuando le das play te indica la hora del sistema y la fecha y te muestra en una textbox que el sistema esta iniciado.

El virtual terminal en proteus es solo para visualizar la letras que estan llegando de Visual Basic al pic por otra parte tiens que usar Configure Virtual Serial Port Driver utilizar com1 y com2 donde com1 es utilizado en proteus y com2 en visual basic.

Otra forma es de iniciar Visual basic y muetra el inicio del sistema y la hora y luego iniciar proteus este  encendiendo el led y luego lo apaga y enviando un comando al visual basic lo recibe y muetra en una caja de texto "comunicacion establecida + la hora"


te envio el archivo nuevamente donde incluye en word codido de visual basic y el programa del pic.


----------



## Meta

Se ve carácter raro.

Asegúrate que el COMPIN es de 9600 de baudios, lo tenías a 2400. El PIC tambiñen debe ser de 9600 baudios. Lo he probado y funciona con carácteres raros o ese es lo que meustra en el Virtual Terminal.


----------



## Meta

Hola willyfv:

He estado mirando el código fuente que me diste.


		Código:
	

; C:\DOCUME~1\UBENCIO\ESCRIT~1\PIC\PICVIS~1\PROGRA~1.PBP    00020    IF SERIAL="S" THEN SONIDOS
    CMPEQ?BCL    _SERIAL, 053h, _SONIDOS

; C:\DOCUME~1\UBENCIO\ESCRIT~1\PIC\PICVIS~1\PROGRA~1.PBP    00021    IF SERIAL ="L" THEN LEDS
    CMPEQ?BCL    _SERIAL, 04Ch, _LEDS

; C:\DOCUME~1\UBENCIO\ESCRIT~1\PIC\PICVIS~1\PROGRA~1.PBP    00022    IF SERIAL ="R" THEN RELES
    CMPEQ?BCL    _SERIAL, 052h, _RELES

; C:\DOCUME~1\UBENCIO\ESCRIT~1\PIC\PICVIS~1\PROGRA~1.PBP    00023    IF SERIAL ="P" THEN APAGAR
    CMPEQ?BCL    _SERIAL, 050h, _APAGAR

Son letras que no me di cuenta.

Para los to@s. Pincha dos veces el componente del RS232 llamado _*COMPIM*_ y deja los baudios  a 9600 como muestra esta foto de abajo. Me lo han enviado a 2400 baudios, por eso no les funciona. Ahora me funciona.







He modificado el programa que puedes descargar y funciona. He comprobado que los tres primeros controla cada Led, el cuarto botón los apaga todos.

En cuanto a Depepee, dame las letras.


----------



## Depepees

En cuanto a Depepee, dame las letras.
Hola META no se que me qieres decir con esto.saludos pepe


----------



## willyfv

Hola meta, si son solo letras no seporque a ti te funciona al 9600 y a mi me fuciona a la perfeccion a 2400


----------



## Meta

¿Le funciona la aplicación?


----------



## Depepees

Hola META,¿Como estamos con lo nuestro,?saludos pepe


----------



## Meta

Hola:

Te estaba esperando todo este tiempo para que me dieras una respuesta si te funciona como willyfv. Pon el _*COMPIM*_ desde el proteus a 9600 baudios y prueba.

Letras que envía al PIC son el A, B, C y D. Puedes descargarlo.

El ejemplo que me envió willyfv funiona muy bien cuando los puse a 9600 baudios los dos, tanto C# como el COMPIM del proteus.

Saludo.


----------



## Depepees

Hola Meta,Este ultimo que pusiste a willyfv ni tan siquiera lo he abierto,no sabia que tenia que ver con lo nuestro ahora lo pongo en marcha com el pic y te digo algo,saludos pepe


----------



## Meta

LA versión 0.0.11 es para willyfv. La 0.0.12 es para ti.

Descargar

Saludo.


----------



## Depepees

Hola META,mientras me arreglan mi ordenador me he echo de otro, es un portatil y dispone de solo una salida DB9,lo que me pasa es que cuando habro la aplicacion me sale un letrero en el que me dice error IO
el COM2 no existe.saludos pepe


----------



## Meta

Arggggggggggggg. Puse el COM2. Lo siento. Es el COM1. Toma este otro que si es el COM1.


----------



## Depepees

Hola META,este ultimo lo habia probado con el "trasto"ahora lo he probado con el portatil y con un tercer ordenador el asunto es que los pulsadores funcionan bien pero lo que son las luces,nada ni pestañean el
pic siempre lo chequeo co hyperterminal y con el PIC RS232-V2.15 BETA,y funciona ha la perfeccion.saludos
pepe


----------



## Meta

¿Las luces del PIc o de los textBox?


----------



## Depepees

Hola meta el pic funciona bien tengo conectados 2 reles y por supuesto cada vez que se efectua un cambio
manda A ò a y B ò b eso lo tengo mas que probado pero las luces del texbox no hacen nada,saludos pepe


----------



## Meta

Ah. Es lo que tengo que revisar. Ahora estoy muy ocupadísimo reparando portátiles a la gente.


----------



## Depepees

http://www.fileupyours.com/view/303869/K8055_VM110 USB board.

Hola meta echale un vistazo ha esto,es un kit de algo parecido ha lo que estamos haciendo,tiene 5 entrada
esta echo en visual basic haber si se puede sacar algo,saludos pepe

http://www.fileupyours.com/view/303869/K8055_VM110 USB board.zip

Meta te he puesto esta sengunda porque la primera he probado y no bajaba esta segunda si saludos pepe


----------



## Meta

No baja nada de nada.

*[SIZE=+1]File Not Found[/SIZE]

              The file you have requested could not be accessed because the file                could not be found.

* *Requested File: *K8055_VM110 USB board.zip*


http://www.robotsperu.org/foros/visualbasic-vp8392.html

















Muy bueno, hay que verlo a fondo.

Estoy viendo los vídeos y tarda mucho, parece  muy bueno al menos los primeros minutos.
*

Si te animas, acaba de instalar otra ves los Visual Studio Express ya que se fastidió Windows 7 y tuve que formatear todo otra vez.

Voy a intentar copiar lo que hace el vídeo a ver si me sale.


----------



## Depepees

Hola  META de momento le he pedido si me puede mandar el codigo,pero como te he dicho me da la sendacion que la luz la enciende el pulsador no el dato recivido,enfin esperaremos.De lo que me dices de retomar el asunto te dire que yo nunca lo he dejado si no te molesto mas es porque me dijiste te estabas de examenes,En cuanto este Sr me conteste te dire lo que me dice,no me as dicho nada de lo que te an puesto en microsof.
Otro punto yo he visto como la que te puse que tienen termostato,yo tengo el programa de un termostato para gobrernarlo desde el pc y desde el mismo sitiocuando quieras empezamos con ello,saludos pepe


----------



## Meta

Deja ver si te responden,.


----------



## Meta

Puedes mirar por aquí.
http://social.msdn.microsoft.com/Fo...30dcccec#9249220e-a04c-40f9-92a3-1022c7b8a571

http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/fa4a63dc-3719-486f-b1fd-39065bc96acf

Saludo.


----------



## Depepees

Hola meta mira haber si sacas algo en claro,segun el que me lo puso funciona,a mi no





Option Strict Off

Public Class Form1
    Private WithEvents PUERTO As New System.IO.Ports.SerialPort

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each PUERTO As String In My.Computer.Ports.SerialPortNames
            ComboBox1.Items.Add(PUERTO)
        Next

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        PUERTO = My.Computer.Ports.OpenSerialPort(ComboBox1.Text)
        PUERTO.BaudRate = 9600 ' 115200
        PUERTO.Parity = IO.Ports.Parity.None
        PUERTO.DataBits = 8
        PUERTO.StopBits = IO.Ports.StopBits.Two
        If PUERTO.IsOpen Then
            TextBox5.Text = "EL PUERTO IS OPEN"
        End If
        Me.Refresh()


        If PUERTO.ReadExisting.Contains("41") Then '("41")
            TextBox1.BackColor = Color.Red
        ElseIf PUERTO.ReadExisting.Contains("B") Then
            TextBox2.BackColor = Color.Red
        ElseIf PUERTO.ReadExisting.Contains("") Then
            TextBox3.BackColor = Color.Red
        ElseIf PUERTO.ReadExisting.Contains("D") Then
            TextBox4.BackColor = Color.Red
        ElseIf PUERTO.ReadExisting.Contains("a") Then
            TextBox1.BackColor = Color.Beige
        ElseIf PUERTO.ReadExisting.Contains("b") Then
            TextBox2.BackColor = Color.Beige
        ElseIf PUERTO.ReadExisting.Contains("c") Then
            TextBox3.BackColor = Color.Beige
        ElseIf PUERTO.ReadExisting.Contains("d") Then
            TextBox4.BackColor = Color.Beige

        End If

        ' PUERTO.Close()
        ' TextBox5.Text = "EL PUERTO IS CLOSED "



    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim A() As Byte = {&H41}
        PUERTO.Write(A, 0, A.Length)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim B() As Byte = {&H42}
        PUERTO.Write(B, 0, B.Length)


    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click


        Dim C() As Byte = {&H43}

        PUERTO.Write(C, 0, C.Length)



    End Sub


    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click


        Dim D() As Byte = {&H44}

        PUERTO.Write(D, 0, D.Length)


    End Sub

End Class

dETECTAR


----------



## willyfv

Saludos,  

Meta y @depepees como van con este proyecto


----------



## Depepees

Hola Willyfv El proyecto sigue igual, en el tutorial ultimo envia y recibe bien los caracteres,pero lo que no funciona es que segun el caracter haga cambiar el color de los textbox,saludos pepe

Hola Willyfv

Hola ha todos estoy haciendo un interfaz para comunicarme con microcontrolador.Lo de enviar y recibir dato fuciona perfectamante lo que necesito es que
segun el caracte se me aloje en un sitio ò en otro por ejen 1ºTextBox al recibir "A" se ponga rojo,al recibir "a" torne a blanco 2ºTextBox al recibir "B" se ponga
rojo,al recibir "b" torne a blanco 3º textBox al recibir "C" se ponga rojo y al trecibir "c" blanbo 4ºTextBox al recibir "D" se ponga en rojo y "d" blanco.
El codigo que pongo a continuacion funciona todo.Lo que esta puesto entre +++++ no funciona esto me lo puso un compañero del foro,pero al igual falta algo
porque a mi no me funciona y podeis ayudarme os lo agradezco gracias pepe


Imports System.IO.Ports

Public Class Form_Principal
  Dim Recibidos As String
  Dim A() As Byte = {&H41}
  Dim B() As Byte = {&H42}



Public Sub New()
  ' Llamada necesaria para el Diseñador de Windows Forms.
  InitializeComponent()
  ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
  If Not SerialPort1.IsOpen Then
    Try
      SerialPort1.Open()
    Catch ex As Exception
      MessageBox.Show(ex.ToString())
    End Try
  End If
  AddHandler SerialPort1.DataReceived, AddressOf Recepcion
End Sub

  Private Sub Recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
    Recibidos += SerialPort1.ReadExisting()
    Me.Invoke(New EventHandler(AddressOf Actualizar))

  End Sub


  Private Sub Actualizar(ByVal s As Object, ByVal e As EventArgs)
    TextBox1.Text = Recibidos




    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    If SerialPort1.ReadExisting.Contains("A") Then  '(NOTA)
      TextBox1.BackColor = Color.Red       

    ElseIf SerialPort1.ReadExisting.Contains("a") Then
      TextBox2.BackColor = Color.PowderBlue




    ElseIf SerialPort1.ReadExisting.Contains("B") Then 
      TextBox2.BackColor = Color.Red           

    ElseIf SerialPort1.ReadExisting.Contains("b") Then
      TextBox2.BackColor = Color.PowderBlue




   Else If SerialPort1.ReadExisting.Contains("C") Then 
      TextBox3.BackColor = Color.Red       

    ElseIf SerialPort1.ReadExisting.Contains("c") Then
      TextBox3.BackColor = Color.PowderBlue




    If SerialPort1.ReadExisting.Contains("D") Then '
      TextBox4.BackColor = Color.Red           

    ElseIf SerialPort1.ReadExisting.Contains("d") Then
      TextBox4.BackColor = Color.PowderBlue
    End If

NOTA
Aqui si coincide el caracter ("A") ò ("41") tendria que leer
la siguiente instrucion si no se la salta.
Si dejo en blanco el ("") si lee la siguiente instruccion pero lo hace con todos los caracteres.


    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim mBuffer As Byte() = New Byte(0) {}
    mBuffer(0) = &H41 'Aen ascii
    SerialPort1.Write(mBuffer, 0, mBuffer.Length)

  End Sub

  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim mBuffer As Byte() = New Byte(0) {}
    mBuffer(0) = &H42 'B en ascii
    SerialPort1.Write(mBuffer, 0, mBuffer.Length)

  End Sub

  Private Sub Button3_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Dim mBuffer As Byte() = New Byte(0) {}
    mBuffer(0) = &H43 'C en ascii
    SerialPort1.Write(mBuffer, 0, mBuffer.Length)

  End Sub

  Private Sub Button4_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    Dim mBuffer As Byte() = New Byte(0) {}
    mBuffer(0) = &H44 'D en ascii
    SerialPort1.Write(mBuffer, 0, mBuffer.Length)
  End Sub
End Class


----------



## willyfv

Saludos,

@depepees  tu quieres que solo cambie el fondo de color de  la caja texto o lo que  esta escrito en la caja de texto...espero tu respuesta para darte una  mano.....

De todas forma te envio un ejemplo....


----------



## Meta

No se mucho de Visual Basic, pero este año por Octubre, en mi último año, daremos programación con Visual Basic 2005 .NET y SQL express 2005. Al final aprenderé VB .net por la fuerza bruta.


----------



## Depepees

Hola Willyfv El caso es el siguiente estoy haciendo un interfaz con varios pulsadores,yvarios texboxt uno encima de cada pulsador cada pulsador me envia un caracter por el puerto serie y lo reciben varios microcontroladores y los microcontroladores responden cada vez que cabian de estado bajo ò alto
Por ejen el 1º micro me manda "A" si esta en alto y "a" en bajo 2º micro "B" alto "b" bajo 3º micro "C" alto
"c" bajo 4º micro "D" alto "d" bajo.Lo que necesito es que cuando en el interfaz reciba estos caracteres cada uno en enciendan y apagen los textbox 1ºtextbox "A" rojo"a"blanco 2ºtextbox "B"rojo "b" blaco y asi con los demasosea que cambien de color al recibir el caracter,Por cierto vivi muchos años en venezuela,saludos pepe

Por supuesto que cambien de color al recibir el caracter los textbox nos caracteres no tienen porque salir en los textbox en los textbox va la inscricion a donde pertenece el micro.Puntuando ento es para encender y apagar varias habitaciones,y tiene que se asi porque los micros tambien llevan un pulsador y se puede apagar y encender indistintamente desde los dos


----------



## willyfv

Ok,Deppepees los pulsadores van con el microcontrolador y a la vez en visaul basic o solo en visual basic o solo con el micro?

Meta yo tampoco soy el Dios en programacion pero como todos aqui investigamos y  prestamos en apoyo mas cuando anosotros nos gusta el diseño y el desafio.....

Saludos


----------



## Depepees

Hola Willyfv,Intentare explicarme mejor.Supongamos quetenemos un interfaz con 4 pulsadores y 4 textbox, estos  4 pulsadores envian un dato cada uno por enjem 1º "A" 2º "B" 3º"C" 4º"D" y
lo reciben 4 micros que estan en una linea RS485 en distintos sitios y no se ven fisicamente ni el micro ni la bombilla que encienden y apagan.a su vez cada micro tiene un pulsador que hace de conmutador con el pulsador del interfaz osea que se puede apagar y endender indistintamente desde el interfaz y desde el mismo micro todo lo anterior funciona bien, lo que necesito es que los textbox cambien de color al recibir el dato desde el micro.Por lo tanto el funcionamiento es que cuando el interfaz reciba los datos desde los micros cambien de color
desde el 1º micro el interfaz recibe "A" encendido "a" apagado desde el 1º micro y por tanto el
1º textbox al recibir "A" se ponga rojo y "a" en blanco,asi con los dema solo que el 2º textbox con "B"y"b" 3ºcon"C"y"c" y 4º con"D"y"d". Si sigues teniendo dudas me lo dices,si necesitas saber como funcionan los micros que es mas ò menos en lo que me defiendo.Saludos pepe


----------



## willyfv

ok Depepees si ya tienes la comunicacion con Visual basic y el micro ademas todo te esta funcionando bien lo unico que tendria que agrerar en Visual Basic es lo siguiente:

 If a = "A" Then 

Text1.BackColor = QBColor(12)
  End If

  If a = "B" Then
  Text2.BackColor = QBColor(12)
  End If

If a = "C" Then
   Text2.BackColor = QBColor(12)
   End If


If a = "a" Then 

 Text1.BackColor = QBColor(15)
   End If

   If a = "b" Then
   Text2.BackColor = QBColor(15)
   End If

If a = "c" Then
    Text2.BackColor = QBColor(15)
End If

Esto solo pregunta si la letra recibida por el puerto es igual si lo es cambia  a color rojo , esto seria para las letras A,B,C y para las letras a,b,c  cambia de color blanco


----------



## Depepees

Ok Willyfv ahora es tarde pero mañana lo miro conectando los micro y te digo algo,gracias y saludos pepe

Hola Willyfv he estado mirando y aparentemente funciona pero tiene algo,si mando "A" se pone rojo el 1º
textbox y ya no pasa nada mas,si apago y mando "a" se pone el 1º textbox de color blanco y no pasa nada mas envies el caracter que envies,haciendo pruebas he deducido que funciona bien pero solo el 1º caracter por lo cual deduzco que despues de recibir el 1º caracter hay que borrar el buffer recibido y eso no se hacerlo.Te dire en en esto de visual basic soy novel gracias pepe

Si Willyfv he estado probando mejor y sin duda pasa eso que recibe bien el 1º caracte si por ejen mando
"B" el 2º textbox se pone rojo pero despues tengo que apagar y encender otra vez para que cuando mande otra vez "B" el micro al estar en alto,pasa ha bajo y entonces si se pone en blanco, osea que seguro que es lo que he dicho.Hay que borrar el buffer recibidos despues de recibir cada caracter ò ponerle un relog que cada 20 ms borre el buffer.Eso tanpoco se hacerlo.gracias pepe


----------



## Depepees

http://www.fileupyours.com/view/303869/RS-4-ven.rar

Hola Willyfv en un pulsado le he puesto h41= A y en otro h61= a y entonces no que hago es que en la salida RS232 DB9 punenteo el pin 2 y 3 para que el dato que salga entre y asi poder provar mejor.Soloentra el 1 dato ma imagino que en el 2 lee el 1y2,el interfaz esta en VB2010 saludos pepe


----------



## willyfv

ok, pepe no tengo VB2010, enviame el programa en de VB en Word y  de igual forma el circuito del micro con el programa para estudiarlo meor y asi te ayudo.

Saludos


----------



## Depepees

http://www.fileupyours.com/view/303869/Nueva carpeta.rar

Hola Willyfv te he puesto el VB en el wold el esquema de proteus en el pain y el ASM el programa asm esta hecho para que un micro pueda ocupar cualquier posicion de 32 enpezando A,B,,C,D,E,F,G para que el micro te funcione bien con su direccion tiene que estar bien puesto lo 5 interruptores por ejem 00000
solo recibe A y envia Aya,00001 solo recibe B y envia Byb  y asi hasta 32 mira el asm y ya me diras.saludos pepe


----------



## Depepees

Hola Willyfv no he podido abrir un menage tuyo, mi mail es depepees@hotmail.com.Saludos pepe

Hola Willyfv,ya lo he gabierto de lo que dices el micro envia A ò a B ò b todo eso funciona bien el que envia h41 en vez de "A" es el interfaz de VB y eso tambien funciona ahora te paso en wold el asm,saludos
pepe

http://www.fileupyours.com/view/303869/Nueva carpeta.rar

Willyfv lo que creo que pasa es lo siguiente: el 1º dato entra bien sea en el textbox que sea el 2 no creo
que al leer el 2º lee el 1º y el 2º se tendria que despues de poner el color poner una instruccion que borre
el buffer recibidos.saludos pepe

Por ejem
             If Recibidos ="A" then
             Textbox1.Backcolor=red
           Aqui borrar Recibidos
           end If


----------



## willyfv

pepe tu codigo esta de esta forma





Private Sub Recepcion(ByVal Sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
           Recibidos += SerialPort1.ReadExisting()
Me.Invoke(New EventHandler(AddressOf Actualizar))
End Sub



*prueba de esta manera y me dices*
Private Sub Recepcion(ByVal Sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
          Recibidos = SerialPort1.ReadExisting()
     textbox1.AppendText( Recibidos )
End Sub



por eso es que no nos entedemos tu manejas VB 2010 y yo el vb.6 ademas  manejo bien el lenguaje pic basic y por lo visto tu el ensamble, lo  anterior lo investigue en esta pag
http://www.todopic.com.ar/foros/index.php?topic=28752.0


----------



## Meta

VB6 ya está desde hace timepo en desuso, hay que adaptarse a las nuevas tecnologías.


----------



## Depepees

Por ejem
If Recibidos ="A" then
Textbox1.Backcolor=red

end If

Hola Willyfv Si pongo el tricito de codigo que has puesto me da error en lo siguiente



If Recibidos ="A"                  error
Textbox1.Backcolor=red
end If 


yo insisto en que como esta funcionando ahora funciona todo pero solo entra el 1 caracter
Yo Pregunto hay alguna instruccion para borra el contenido de Recibidos ò de SerialPort porque
a mi parecer cuando lee el 2 caracter esta leyendo el 1 yo lo he probado con otro programa
donde tengo un textbox para saca datos y otro para entrar datos y si pongo "A" funciona y si  
pongo AB no .saludos pepe

Willyfv he intentado ponerte en la carpeta el HEX de pic 16f88 pero no me deja,antes tenia Win XP y
ahora me he puesto el Win 7 de todas forma lo intentare con otro opdenador,supongo que teniendo el Hex
podas grabar el pic.Te dije que yo soy novel en lo de VB porque esta instruccion que buscamos en emsablador es sensilla.De todas formas insisto en ponerle despues del color al textbox una instruccion que borre el buffer recibido.saludos pepe

http://www.fileupyours.com/view/303869/Rs 30-88 ven.rar

Hola Willyfv,ahora paso ha explicarte nejo,se trata de hacer un interfaz con 30 puntos osea poder gobernar 30 puntos.Ahora va todo bien pero me gustaria añadirle un par de cosa, una de ellas es un controlador de temperatura para el aire acondicionado o calefaccion eso ya lo tengo hecho en VB y en ASM si los necesitas te los mando.ahora tanbien me gustaria ponerle un relog para que haga lo mismo que hace los pulsadores,y asi poder encender y apagar una luz a determinada hora, pero que a una hora se encienda y a otra ora se apage lo cual no se si son necesarios dos relojes en fin creo que es lo que falta,saludos pepe


----------



## willyfv

Meta tienes razon pero con tantas cosas por hacer, trabajo, familia, aveces me queda poco tiempo apara esudia, pero tocara hacerlo para no quedarme atrasado....

Pepes vamos investigando sobre la marcha y vemos..


Saludos


----------



## Depepees

Willyfv no me has dicho nada de lo que te he dicho de los reloges.saludos


----------



## willyfv

Hay dos opciones una por Vb y la otra con el micro, cual de las dos te sirve para ir diseñando


----------



## Depepees

Hola Willyfv, Por supuesto los reloges tienen que ir en el VB yo habia pensado que debajo de los pulsadores poner 2 textbox ò 2comboBox donde pode poner la hora de encendido y apagado.Aunque el encendido y apagado manden el mismo caracter no importa porque a los sitios donde va dirigido ese dato
no dispone de pulsador propio.Tendria que se que al coincidir la hora de encendido por ejem mande "A" y a la hora de apagado mande "A".antes te he dicho que te bajes el vb2010 porque asi todo lo que se balla haciendo te lo mando.cualquier duda pregunta saludos pepe


----------



## willyfv

Saludos,


Meta ya baje VB EXPRESS 2010 lo estoy estudiando y tengo un problema para ver si me ayudas, quiero abrir un archivo excel desde VB pero me da estos errores:

El tipo `Excel.application´no esta definido
El tipo `Excel.worhbook´no esta definido

*El codigo que estoy usando es el siguiente:*

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objExcel As Excel.Application
        Dim xLibro As Excel.Workbook
        objExcel = New Excel.Application
        xLibro = objExcel.Workbooks.Open("c:\libro1.xls")
        objExcel.Visible = True
    End Sub
End Class

He buscado por la red y la informacion que encuentro es que hay que agregar una referencia 
Microsoft Excel 11.0 Object library en mi caso es la Microsoft Excel 12.0 Object library la activo y sigue el mismo error

Este codigo lo he probado en VB.6 y funciona


----------



## Meta

Con la edición Express no te deja, jejeje. Si las de pago ya que etán preparados.

Puedes hacer trucos bajándote librerías de terceros. 

Si te dice que no está definido, prueba con agregar referencias.

Deja investigar........


Hola de nuevo:

Prueba a trabajar como se detalla en el siguiente enlace:
http://visualbasic.about.com/b/2007/10/30/reading-excel-2007-xlsx-in-vbnet.htm

Dim oExcel As Application = _       CreateObject("Excel.Application") Dim oBook As Workbook = _       oExcel.Workbooks.Open( _       "C:\Users\ThisUser\Documents\Data.xlsx", , False) 

estas usando un alias para el import de Excel, deberías utilizar algo como esto Import Excel = Microsoft.Office.Interop.Excel

 Saludos


----------



## willyfv

meta

Solucionado como abrir el archivo de excel desde visual basic, la aplicacion que te pase esta bien solo que
en Dim objExcel As Excel.Application le das clip y te aparece la opcion de Imports Microsoft.Office.Interop y listo se abre como si nada....


ahora estoy escribiendo de vb a excel y funciona bien solo que todavia no doy como hacer para que pase de una fila a la otra

tengo dos textbox y cada una escribe en una celda perfectamente

textbox1. me escribe en la FILA 1 CELDA A
textbox2. me escribe en la FILA 1 CELDA B


pero cuando ingreso otro dato lo escribe alli mimo y quero que lo pase a la FILA 2 CELDA A...

estamos investigando alli vamos..


pepes 

qu has investigado con lo del reloj por alli tengo algo listo....


----------



## ikaruzreyna

Hola amigos ,
soy  nuevo en este foro.

saben tengo un serio problema , quizás falta de conocimientos para poder lograr lo que me he planteado.

resulta que tengo mi Arduino uno y he desarrollado un contador de pulsos lo cual quiero guardar la información en una base de datos específicamente mysql, investigando , desde el arduino no puedo agregarlo directamente, se que visual studio 2008 tiene la comunicacion serial. y es a través de visual me gustaría guardas esto en la base de datos.

solo la variable que quiero almacenar es el "conta"
por favor me pueden ayudar se lo agradecería mucho.




		Código:
	

/*
 --------------------------------------------- 
  Contador de pulsos
 ---------------------------------------------
 
  Programa que muestra por pantalla (consola serial) el número 
   de veces que el pulsador ha sido presionado, se realiza un 
   proceso que de acuerdo al número de pulsaciones se enciende 
   un LED,
 

*/
 
//--------------------------------------------------
//Declara puertos de entradas y salidas y variables
//--------------------------------------------------
int conta = 0;  //Variable para guardar el conteo de los pulsos
int num = 3;
 
//------------------------------------
//Funcion principal
//------------------------------------
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
  Serial.begin(9600);   //Inicia comunicación serial
  pinMode(2,INPUT);     //Configura el pin 2 como una entrada, pulsador
  pinMode(13,OUTPUT);   //Configura el pin 13 como una salida, LED
pinMode(3,INPUT);
}
 
//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() // Esta funcion se mantiene ejecutando
{           //  cuando este energizado el Arduino

if (digitalRead(3) == LOW)
  {
    digitalWrite(13,HIGH);  //Enciende el LED Verde
    digitalWrite(14,LOW); //Rojo Apagado
    
    num = 0;
  }
 
  // Si el valor del contador es 8
  if (digitalRead(3) == HIGH)
  {
    digitalWrite(13,LOW);  // Apaga el LED Verde
    digitalWrite(14,HIGH);// Enciende led rojo
    num = 1;
  }
 
  // Si el pulsador esta oprimido
  if ( digitalRead(2) == HIGH ) 
  {
      // Si el pulsador no esta oprimido, flanco de bajada
      if ( digitalRead(2) == LOW )
      {
       
  if(num == 1)
      {
        Serial.println("Posible Fuga");
        
      }
      else
      {
         conta++;               //Incrementa el contador
         Serial.println(conta); //Imprime el valor por consola
         delay (100); 
         // Retardo
      }
      }
     
      
  }
 

  
 
}
 
//Fin programa



graciass..


----------



## djhonr

hols soy nuevo en el foro
paso por este pork el tema de comuniacion me interesa
y  tambien estoy haciendo un proyecto con una bascula
con la cual necesito capturar el peso de esta .
entonces pues muchas graxias al k me pueda colaborar con eso
puede ser en vb 8 o c#


----------



## Unikfriend

djhonr dijo:


> hols soy nuevo en el foro
> paso por este pork el tema de comuniacion me interesa
> y tambien estoy haciendo un proyecto con una bascula
> con la cual necesito capturar el peso de esta .
> entonces pues muchas graxias al k me pueda colaborar con eso
> puede ser en vb 8 o c#


 
Hi jhon...

Obtener el peso de una bascula por el puerto serial es algo sencillo,
ya tienes la configuración del puerto de la bascula y los caracteres de control?


----------



## megasysfix

Depepees dijo:


> Hola meta mira haber si sacas algo en claro,segun el que me lo puso funciona,a mi no
> 
> 
> 
> 
> 
> Option Strict Off
> 
> Public Class Form1
> Private WithEvents PUERTO As New System.IO.Ports.SerialPort
> 
> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
> For Each PUERTO As String In My.Computer.Ports.SerialPortNames
> ComboBox1.Items.Add(PUERTO)
> Next
> 
> End Sub
> 
> Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
> 
> PUERTO = My.Computer.Ports.OpenSerialPort(ComboBox1.Text)
> PUERTO.BaudRate = 9600 ' 115200
> PUERTO.Parity = IO.Ports.Parity.None
> PUERTO.DataBits = 8
> PUERTO.StopBits = IO.Ports.StopBits.Two
> If PUERTO.IsOpen Then
> TextBox5.Text = "EL PUERTO IS OPEN"
> End If
> Me.Refresh()
> 
> 
> If PUERTO.ReadExisting.Contains("41") Then '("41")
> TextBox1.BackColor = Color.Red
> ElseIf PUERTO.ReadExisting.Contains("B") Then
> TextBox2.BackColor = Color.Red
> ElseIf PUERTO.ReadExisting.Contains("") Then
> TextBox3.BackColor = Color.Red
> ElseIf PUERTO.ReadExisting.Contains("D") Then
> TextBox4.BackColor = Color.Red
> ElseIf PUERTO.ReadExisting.Contains("a") Then
> TextBox1.BackColor = Color.Beige
> ElseIf PUERTO.ReadExisting.Contains("b") Then
> TextBox2.BackColor = Color.Beige
> ElseIf PUERTO.ReadExisting.Contains("c") Then
> TextBox3.BackColor = Color.Beige
> ElseIf PUERTO.ReadExisting.Contains("d") Then
> TextBox4.BackColor = Color.Beige
> 
> End If
> 
> ' PUERTO.Close()
> ' TextBox5.Text = "EL PUERTO IS CLOSED "
> 
> 
> 
> End Sub
> 
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> 
> 
> Dim A() As Byte = {&H41}
> PUERTO.Write(A, 0, A.Length)
> End Sub
> 
> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> 
> Dim B() As Byte = {&H42}
> PUERTO.Write(B, 0, B.Length)
> 
> 
> End Sub
> 
> Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> 
> 
> Dim C() As Byte = {&H43}
> 
> PUERTO.Write(C, 0, C.Length)
> 
> 
> 
> End Sub
> 
> 
> Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> 
> 
> Dim D() As Byte = {&H44}
> 
> PUERTO.Write(D, 0, D.Length)
> 
> 
> End Sub
> 
> End Class
> 
> dETECTAR



Hola que tal?, bueno les cuento un poquito, hace unos días en mi instituto realice un proyecto para controlar una casa mediante wifi, para ello utilice 2 computadoras conectadas en red, 1 pic que controlaba todas las funciones de la casa por serie, bueno el asunto es que el programa lo compile en el añejo VB6 pero funcionaba a la perfección, ahora decidí usar VB2008 para que su estética visual sea mas atractiva, bueno, todo bien, aprendí las modificaciones etc, el problema me surgio a lo mismo que le ocurrió a depepe, no puedo hacer que el programa que hago en VB2008 me haga cambiar de estado un objeto de formulario, bueno me gustaría saber si lo han logrado para que me puedan ayudar, estaría muy agradecido, bueno me despido cordialmente de ustedes, y espero su respuesta, muchas gracias de antemano.


----------



## Unikfriend

megasysfix dijo:


> Hola que tal?, bueno les cuento un poquito, hace unos días en mi instituto realice un proyecto para controlar una casa mediante wifi, para ello utilice 2 computadoras conectadas en red, 1 pic que controlaba todas las funciones de la casa por serie, bueno el asunto es que el programa lo compile en el añejo VB6 pero funcionaba a la perfección, ahora decidí usar VB2008 para que su estética visual sea mas atractiva, bueno, todo bien, aprendí las modificaciones etc, el problema me surgio a lo mismo que le ocurrió a depepe, no puedo hacer que el programa que hago en VB2008 me haga cambiar de estado un objeto de formulario, bueno me gustaría saber si lo han logrado para que me puedan ayudar, estaría muy agradecido, bueno me despido cordialmente de ustedes, y espero su respuesta, muchas gracias de antemano.


 
Hi Mega,
A que te refieres con cambiar el estado, el "enabled"?


----------



## megasysfix

Unikfriend dijo:


> Hi Mega,
> A que te refieres con cambiar el estado, el "enabled"?



Hola, nop, me refiero a que cambie el estado de algún objeto del formulario, por ejemplo el PIC envié un dato y el la form cambie por ejemplo el color de un textbox, a eso me refiero, espero que me puedan ayudar, saludos y gracias!!!


----------



## Unikfriend

megasysfix dijo:


> Hola, nop, me refiero a que cambie el estado de algún objeto del formulario, por ejemplo el PIC envié un dato y el la form cambie por ejemplo el color de un textbox, a eso me refiero, espero que me puedan ayudar, saludos y gracias!!!


 
No te entiendo muy bien, cambiar el color es algo sencillo.



> Public[/SIZE] Class[/SIZE] Form1
> Private Sub Button1_Click(ByVal[/SIZE] sender As[/SIZE] System.Object, ByVal[/SIZE] e As[/SIZE] System.EventArgs) Handles Button1.Click
> Me.TextBox1.BackColor = Color.Red
> End Sub
> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> Me.TextBox1.BackColor = Color.Green
> End Sub
> 
> Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
> Me.TextBox1.BackColor = Color.Blue
> End Sub
> 
> End Class


 
No se si es lo que quieres?
podrías ser mas especifico, si puedo te ayudo.


----------



## megasysfix

Unikfriend dijo:


> No te entiendo muy bien, cambiar el color es algo sencillo.
> 
> 
> 
> No se si es lo que quieres?
> podrías ser mas especifico, si puedo te ayudo.



Sip, muchas gracias por la respuesta, el problema esta en que quiero que el PIC (un dispositivo que se conecta el el puerto serie), me controle el color del textbox, en pocas palabras, desde un dispositivo externo "decirle" al textbox el color que debe tomar, esa es mi duda, gracias!!!


----------



## Unikfriend

Si conozco los PIC; 
Comentaste que ya lo habias hecho con VB6;
pero que con la nueva version VB ya no funciona.
Algunos controles y propiedades cambian de nombre y por eso 
no puedes convertir los proyectos sin algun cotratiempo,
pero en general tiene el mismo funcionamiento.
Como recibias los datos en VB6 con un timer y el mscomm?


----------



## megasysfix

Unikfriend dijo:


> Si conozco los PIC;
> Comentaste que ya lo habias hecho con VB6;
> pero que con la nueva version VB ya no funciona.
> Algunos controles y propiedades cambian de nombre y por eso
> no puedes convertir los proyectos sin algun cotratiempo,
> pero en general tiene el mismo funcionamiento.
> Como recibias los datos en VB6 con un timer y el mscomm?



correcto, recibía los datos con un timer ajustado a 1ms, pero ahora no me recibe nada, y no hace nada ,
PD: el programa lo escribí completamente denuevo, por las modificaciones previamente mencionadas pero sin ningún estado positivo.


----------



## Unikfriend

Postea el programa para poder revisarlo.


----------



## megasysfix

Unikfriend dijo:


> Postea el programa para poder revisarlo.





		Código:
	

    Private Sub Recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
        ' Acumular los carácteres recibidos al 'buffer' (string)
        Recibidos += serialPort1.ReadExisting()
        ' Invocar o llamar al proceso de tramas
        Me.Invoke(New EventHandler(AddressOf Actualizar))
    End Sub

    ' Procesar los datos recibidos en el buffer y extraer tramas completas
    Private Sub Actualizar(ByVal s As Object, ByVal e As EventArgs)
        ' Asignar el valor de la trama al textBox
        TextBox_visualizar_mensaje.Text = Recibidos
        If Recibidos = "b" Then
            Button_t.Text = "activado"
        End If
    End Sub

El problema esta en que al enviar el carácter no hace nada, espero que me puedas ayudar, y muchas gracias por la preocupación .


----------



## Unikfriend

megasysfix dijo:


> ]
> El problema esta en que al enviar el carácter no hace nada, espero que me puedas ayudar, y muchas gracias por la preocupación .


 
Hi Mega,
Me parece que faltan algunas rutinas de inicializacion.
Te paso este codigo de ejemplo para que tomes una idea. 
Espero te sirva, a mi me funciona.


----------



## megasysfix

Unikfriend dijo:


> Hi Mega,
> Me parece que faltan algunas rutinas de inicializacion.
> Te paso este codigo de ejemplo para que tomes una idea.
> Espero te sirva, a mi me funciona.



Gracias por la respuesta, te cuento, habri el programa, configure el puerto y todo, me gustaria saber que es lo que le debo enviar de forma serial para que haga algo, me explico, tengo un virtual comm osea un puerto virtual, que mediante un comunicador serial envió los caracteres, el problema esta en que al enviar no hace nada, y lo otro es que no se como enviar desde el programa que posteaste hacia el comunicador serial, bueno espero su respuesta, un saludo!!!


----------



## Unikfriend

megasysfix dijo:


> Gracias por la respuesta, te cuento, habri el programa, configure el puerto y todo, me gustaria saber que es lo que le debo enviar de forma serial para que haga algo, me explico, tengo un virtual comm osea un puerto virtual, que mediante un comunicador serial envió los caracteres, el problema esta en que al enviar no hace nada, y lo otro es que no se como enviar desde el programa que posteaste hacia el comunicador serial, bueno espero su respuesta, un saludo!!!


 
hi Mega,
puedes cambiar el contenido de la funcion 
send para que envie un caracter al momento de 
presionar el enter y reciba una respuesta desde su
dispositivo. En cuanto a VCom no sabria si funciona
pero si funciona con el hyperterminal deberia funcionar
con este programa.





> [/SIZE]Public[/SIZE] Function[/SIZE] sendCommand(ByRef[/SIZE] cmd As[/SIZE] String) As String
> Dim duration As Integer
> If SerialPort1.IsOpen = False Then
> openCommPort()
> End If
> SerialPort1.Write(Mid(cmd, 1, 1))
> 'SerialPort1.Write(cmd & Chr(13) & Chr(10))
> responseText = ""
> sendCommand = ""
> On Error GoTo timeOutHandler
> Call getResponse() ' get a response within timeout.
> sendCommand = responseText ' returned received string.
> Exit Function
> timeOutHandler:
> responseText = ""
> sendCommand = ""
> End Function


----------



## willyfv

pasa por este pagina hay un manual de meta

http://electronica-pic.blogspot.com/...rnica-pic.html


----------



## megasysfix

willyfv dijo:


> pasa por este pagina hay un manual de meta
> 
> http://electronica-pic.blogspot.com/...rnica-pic.html



Lo leí todo alrevez y al derecho, pero no sale nada de recepción con modificación de formulario, ni siquiera con el visual C++ o el C# :/.


----------



## willyfv

ok, yo trabajo con vb 2010 me lo estudie para ayudar a depepes y a la vez actualizarme, dime cual es tu problema


----------



## megasysfix

willyfv dijo:


> ok, yo trabajo con vb 2010 me lo estudie para ayudar a depepes y a la vez actualizarme, dime cual es tu problema



Hola, mira el problema esta en que yo quiero que el PIC me envié una respuesta al equipo y el equipo me muestre una notificación visual (un msgbox, un cambio de color en una ventana o algo), el problema es que no se como hacerlo, e intentado muchos métodos incluso una usuaria intento pero no tuvo éxito, dejo un ejemplo de como seria:
Primero desde el programa de VB2010 envió un carácter indicándole al PIC lo que debe hacer, luego el PIC lo recibe y este me envía una respuesta de confirmación, aquella respuesta de confirmación debe realizar un cambio sobre el formulario (cambiar color a una ventana, mostrar un msgbox, etc), para yo comprobar que el dispositivo este funcionando correctamente y que realizo la operación indicada, bueno un saludo cordial de mi parte!


----------



## willyfv

ok, para mañana te paso esa informacion q la tengo en la pc y tengo q buscarla


----------



## willyfv

aqui te envio un ejemplo sencillo de como recivir y enviar datos por puerto serial, a la vez al recibir un dato cambia de color o muestra un mensaje dependindo del dato enviado


----------



## megasysfix

willyfv dijo:


> aqui te envio un ejemplo sencillo de como recivir y enviar datos por puerto serial, a la vez al recibir un dato cambia de color o muestra un mensaje dependindo del dato enviado



Hola!!, muchas gracias por la respuesta, ahora me surge una duda, que "B" tengo que enviar para que el textbox cambie de color?, (aclaro que estoy usando el serial comunicator del PBP), probaste el programa o es una teoría su funcionamiento?, bueno, espero que me ayudes en ese problemita, saludos!!!

Añado: la estructura del programa es parecida al del manual de meta, el problema es que solo me muestra el carácter recibido en el textbox, y eso no me interesa ya que no es lo que busco.


----------



## willyfv

el programa lo probe y funciona bien la prueba se realizo con  SerialCom CodeStudioPlus.  

las letras a enviar seria en mayusculas

primero envia la A para la funcion:
If RECIBE = "A" Then
            MsgBox(" DATO RECIBIDO CON LA LETRA A")
        End If



y luego la B para la funcion:
        If RECIBE = "B" Then
            TextBox1.BackColor = Color.Red
        End If

envia letra por letra no puedes enviar las dos


----------



## megasysfix

willyfv dijo:


> el programa lo probe y funciona bien la prueba se realizo con  SerialCom CodeStudioPlus.
> 
> las letras a enviar seria en mayusculas
> 
> primero envia la A para la funcion:
> If RECIBE = "A" Then
> MsgBox(" DATO RECIBIDO CON LA LETRA A")
> End If
> 
> 
> 
> y luego la B para la funcion:
> If RECIBE = "B" Then
> TextBox1.BackColor = Color.Red
> End If
> 
> envia letra por letra no puedes enviar las dos



Correcto, eso hago, pero solo me muestra las letras en el TEXTBOX, no hace nada sobre el formulario, y no muestra en MSGBOX, podrías hacer una captura para ver que puedo estar haciendo mal?, por favor, te lo agradeceria mucho, saludos.

PD: uso el virtualserialport + el serial comunicator del microcodestudio.


----------



## willyfv

virtualserial configuralo com1 y com2

serial comunicator del microcodestudio:
com2
9600 baud
no parity
byte size is 8
1 stop bit

la imagen con el nombre button1 envia desde vb a comunicator del microcodestudio "foros de elctronica"

la imagen con el nombre de letra A se observa el mensaje DATO RECIBIDO CON LA LETRA A

la imagen con el nombre de la letra B observamos el TextBox1 cambia de color

tratar de minimizar todo para que puedas ver el mensaje de " DATO RECIBIDO CON LA LETRA a" en la pantalla ya que sale centrado


----------



## megasysfix

willyfv dijo:


> virtualserial configuralo com1 y com2
> 
> serial comunicator del microcodestudio:
> com2
> 9600 baud
> no parity
> byte size is 8
> 1 stop bit
> 
> la imagen con el nombre button1 envia desde vb a comunicator del microcodestudio "foros de elctronica"
> 
> la imagen con el nombre de letra A se observa el mensaje DATO RECIBIDO CON LA LETRA A
> 
> la imagen con el nombre de la letra B observamos el TextBox1 cambia de color
> 
> tratar de minimizar todo para que puedas ver el mensaje de " DATO RECIBIDO CON LA LETRA a" en la pantalla ya que sale centrado



Amigo, creo saber cual es mi problema, que windows estas utilizado?, yo uso W7 crees que sea ese el problema?


----------



## willyfv

trabajo con xp, pero w7 tiene que funcionar bien


----------



## willyfv

@megasysfix


----------



## megasysfix

willyfv dijo:


> @megasysfix



Perdón, pues la verdad estoy en las mismas, lamentablemente ahora no tengo tiempo para solucionarlo, debido a que estoy por salir del colegio y estoy haciendo las pruebas de nivel, y la verdad necesito que me valla bien en estas, gracias por la preocupación, cuando tenga tiempo vuelvo, un saludo!!!!


----------



## csarini

Holas q tal estoy programando en visualbasic y tengo un problema saben conecte un circuito por el puerto com1 a visual y normal lo reconoce, el circuito me ingresa datos a mi aplicacion y cuando los datos aparecen en un label quisiera q empieze a correr un cronometro como puedo hacerlo


----------



## D@rkbytes

csarini dijo:


> Holas q tal estoy programando en visualbasic y tengo un problema saben conecte un circuito por el puerto com1 a visual y normal lo reconoce, el circuito me ingresa datos a mi aplicacion y cuando los datos aparecen en un label quisiera q empieze a correr un cronometro como puedo hacerlo


Saludos.
Espero que alguno de estos ejemplos te pueda servir.


----------



## Meta

Muy bueno. 

Saludo.


----------



## csarini

hola sabes creo q no me deje entender toy haciendo aplicacion del serialPort estoy usando e evento Datareceived para capturar datos, y lo q quisiera saber es que cuando reciba un dato un cronometro empieze a correr y cuando reciba otro dato se detenga el cronometro


----------



## geexbox

hola, soy nuevo en el foro, y entre por que leí que hablaban del COMPIN
lo que pasa es que estoy haciendo un proyecto para la escuela, y necesito simular la comunicación serial
pero no tengo el complemento COMPIN.
Así que les agradecería mucho si me lo pueden pasar.

Ya lo busque en varias partes del foro pero no encuentro donde descargarlo. Gracias


----------



## megasysfix

geexbox dijo:


> hola, soy nuevo en el foro, y entre por que leí que hablaban del COMPIN
> lo que pasa es que estoy haciendo un proyecto para la escuela, y necesito simular la comunicación serial
> pero no tengo el complemento COMPIN.
> Así que les agradecería mucho si me lo pueden pasar.
> 
> Ya lo busque en varias partes del foro pero no encuentro donde descargarlo. Gracias



Compin viene integrado en proteus......


----------



## geexbox

megasysfix dijo:


> Compin viene integrado en proteus......



ok muchas gracias, entonces debo preguntar ¿como lo introduzco a mi simulación?
perdón si es que estoy preguntando algo tan elemental, pero es que no lo se usar

Gracias


----------



## megasysfix

geexbox dijo:


> ok muchas gracias, entonces debo preguntar ¿como lo introduzco a mi simulación?
> perdón si es que estoy preguntando algo tan elemental, pero es que no lo se usar
> 
> Gracias



Te invito a que coloques en youtube Compin proteus, hay te enseñaran paso a paso lo que debes hacer para poder hacerlo funcionar, saludos!!!!


----------



## Meta

Puede que se refiera a este:






Saludo.


----------



## D@rkbytes

Saludos.
Solo como comentario.
El componente para comunicación serial en ISIS de PROTEUS se llama COMPIM no COMPIN


----------



## andrea1708

Hola a todos! Necesito enviar un dato tipo BYTE por puerto serial con VB. Tengo este código:
Dim dato As Byte = 40     // Declaro dato como tipo byte
 Luego de abrir el puerto, escribo:
puertutput = dato
Y me genera un error en esta linea. La única manera de que no me genere error es haciendo:
puertutput = CStr(dato)
El problema con esta linea es que NO QUIERO enviar el dato como string! Si lo pongo así se envían DOS bytes, el que representa al "4" y el que representa al "0". Necesito enviar un byte de valor 40, es decir, 00101000.

Agradecería enormemente su ayuda.

Saludos


----------



## fausto1986

buenas noche estoy empezando con el visual y me encuentro con el c# y el basic en 2008, la duda cual usar es que quiero que se comuniq con un arduino xbee para hacer que un carrito se muy por wi-fi gracias


----------



## D@rkbytes

andrea1708 dijo:


> Hola a todos! Necesito enviar un dato tipo BYTE por puerto serial con VB. Tengo este código:
> Dim dato As Byte = 40     // Declaro dato como tipo byte
> Luego de abrir el puerto, escribo:
> puertutput = dato
> Y me genera un error en esta linea. La única manera de que no me genere error es haciendo:
> puertutput = CStr(dato)
> El problema con esta linea es que NO QUIERO enviar el dato como string! Si lo pongo así se envían DOS bytes, el que representa al "4" y el que representa al "0". Necesito enviar un byte de valor 40, es decir, 00101000.
> 
> Agradecería enormemente su ayuda.
> 
> Saludos


Saludos andrea1708
Hace poco realize este proyecto completo de interfaz RS232 PIC PC en VB6.
Las funciones son faciles de pasar a VB .Net
El proyecto no lo hize en .Net porque es tan solo una aplicación simple.
Incluye el código fuente comentado y también adjunte algunos ejemplos para su uso.
Dale una vista, y estoy seguro que encontraras la solución para enviar los datos que quieres.

El truco de lo que tu dices envíar como Byte viene siendo tan solo así.

' Enviar los datos como caracteres al PIC
    puertutput = CStr(Chr(dato))

Espero que con esto puedas solucionar lo que necesitas.

Suerte y hasta luego.


----------



## Meta

andrea1708 dijo:


> Hola a todos! Necesito enviar un dato tipo BYTE por puerto serial con VB. Tengo este código:
> Dim dato As Byte = 40     // Declaro dato como tipo byte
> Luego de abrir el puerto, escribo:
> puertutput = dato
> Y me genera un error en esta linea. La única manera de que no me genere error es haciendo:
> puertutput = CStr(dato)
> El problema con esta linea es que NO QUIERO enviar el dato como string! Si lo pongo así se envían DOS bytes, el que representa al "4" y el que representa al "0". Necesito enviar un byte de valor 40, es decir, 00101000.
> 
> Agradecería enormemente su ayuda.
> 
> Saludos



Pon arriba del todo esto.


		Código:
	

Imports System.IO.Ports

Dentro de un button introduces este código.

*serialPort1.Open() 'Abrir puerto serie.     
Dim mBuffer As Byte() = New Byte(0) {} 'Almacenas bytes en un buffer.     
mBuffer(0) = &H40
serialPort1.Write(mBuffer, 0, mBuffer.Length) 'Envía en este caso un byte.     
serialPort1.Close() 'Cerrar puerto serie.*

Un saludo.


----------



## andrea1708

Hola chicos! gracias a todos por sus respuestas. Al final lo hice asi:

Dim dato As Byte = 40 // Declaro dato como tipo byte
Dim datochar As Char
datochar=Microsoft.VisualBasic.Chr(dato) //esto me permite convertir a char
puertutput = CStr(datochar)

Un poco rebuscado pero funciono =)

PD: nunca encontre el metodo .Write en mi VB =S

Ahora tengo otra pregunta. Necesito enviar desde un micro hacia Visual Basic una cadena de bytes. Lo logre colocando el Rtrheshold a 1, es decir, que la interrupción del OnComm sucede cada vez que recibo un dato en el puerto. El problema es que quiero que primero Visual Basic reciba todos los datos en el buffer de recepción y luego de que ya todos llegaron, genere la interrupcion para sacarlos uno por uno.
Creo que tiene que ver con el InputLen y Rtrheshold pero hasta ahora no he logrado nada.
Espero que alguien me pueda ayudar.

Gracias.


----------



## Meta

Hola:

Prueba introducir este código desde el rpincipio.

*Imports System.IO.Ports*

Luego usas serialPort. haber si sale el Write, no es normal que no salga.


----------



## Vid

oe man disculpa la molestia he visto unos ejemplos de lo que vienen haciendo, desde la pag. 15 mas o menos y nose que pasa cuando los corro junto con el Visual Serial Port Driver 7.1 - hasta donde se ese programa es como el enganche de visual basic 6.0 y proteus, verdad?, de hecho en el caso visto.

bueno si es asi, cuando lo corro la falla normal es creo con la programacion que esta en visual basic. MsComm1.PortOpen m sale en falla y nose como ver de donde proviene esta falla lo he visto y lo recontra he visto y nada.. =/ si pudieras ayudarme vacan seria hermano (Y) gracias

Pd: soy un nuevo aprendis llevo poco con estos programas, pero quiero ver ya cosas grandes. GRACIAS espero su rpta.!


----------



## Depepees

Hola a todos principalmente a meta y wily,voy a retomar lo del interfaz de comunicaciones.os dire que lo de controlar la luces creo que esta todo terminado,pero me gustaria poderle poner deteccion de camaras IP por el cual necesitare ayuda.meta cuando te conectes dime por favor como insetar foto,que queria poner una del interfaz terminado y no hallo como


----------



## Meta

Hola:

Las fotos las puedes subir en el mismo foro o este enlace.

http://www.subeimagenes.com/

Saludo.


----------



## ericksm

Hola

Por el puerto serial estoy enviando datos por ejemplo: ffffgghhppppp

estos datos les estoy enviando de manera muy rapida, creo que del orden de nseg (80 no estoy seguro). El transmisor esta configurado a 9600 baudios

En el VB Express 2008 estoy trabajando con la accion: *SerialPort1_DataReceived*



		Código:
	

Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim dato As String = SerialPort1.ReadExisting
        If Microsoft.VisualBasic.Left(dato, 1) = "f" Then
            SendKeys.Send("1");
        End If
        If Microsoft.VisualBasic.Left(dato, 1) = "g" Then
            SendKeys.Send("2");
        End If
        If Microsoft.VisualBasic.Left(dato, 1) = "p" Then
            SendKeys.Send("3");
        End If
        If Microsoft.VisualBasic.Left(dato, 1) = "h" Then
            SendKeys.Send("4");
        End If
        If Microsoft.VisualBasic.Left(dato, 1) = "t" Then
            SendKeys.Send("5");
        End If
        If Microsoft.VisualBasic.Left(dato, 1) = "r" Then
            SendKeys.Send("6");
        End If
    End Sub


El puerto lo estoy iniciando de este modo:



		Código:
	

        SerialPort1.PortName = "COM1" 
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default


de todos los datos que recibo, solo la mitad entran a trabajar con el conjunto de *IFs*

por lo que algunas veces no envio el numero 3 , 4 etc.

Alguien sabe si se puede guardar los datos recibidos en un buffer para luego tratarlos en los IFs?

o tambien creo que el problema esta en como les doy la condicion:
*Microsoft.VisualBasic.Left(dato, 1) = "r"*

Del conjunto de datos que envio, ffffffppppphhhhh solo leo el primero, no estoy seguro pero envio letra por letra al puerto serial, los datos recibidos los guardo en un string, probe guardarlos en un char pero sigue el mismo problema.

Gracias de antemano


----------



## papirrin

quizas es mas tardado el if que la recepción de datos, mejor recibelos todos en una variable o en un arreglo y depues hacer la condicionante.

para meterlos en un arreglo utiliza la instruccion split()

otra cosa es que te serciores que el buffer esta vacio pueden estar "quedandose" en el buffer de recepcion


----------



## ericksm

No entiendo muy buen eso de guardar la cadena y luego ejecutar los ifs 

pero encontre otra solucion que parece funcionar y la comparto para los que estan interesados:

La funcion* InStr* de VB 2008 express es lo que estaba buscando ya que busca un caracter especifico en un cadena.

gracias.


----------



## Narcolepsia

Hola a todos. Tengo el siguiente problema a la hora de insertar el MScomm en Visual Basic para poder comunicarlo con una placa Arduino UNO. 
El error que me sale es el siguiente:

_" No se encontró la información de licencia para este componente. No tiene una licencia apropiada para usar esta funcionalidad en el entorno de diseño"._

Antes de darme este error, ni si quiera me aparecía la opción de añadir el componente 'Microsoft Comm Control 6.0'. Para ello descargue el Mscomm32.ocx.

He buscado todo lo habido y por haber y de momento lo único con un poco de sentido ha sido 
des-registrar el Mscomm32.ocx y volverlo a registrar desde 'Ejecutar' mediante:

C:\WINDOWS\SYSTEM32\REGSVR32.EXE /u C:\WINDOWS\SYSTEM32\MSCOMM32.OCX
y
C:\WINDOWS\SYSTEM32\REGSVR32.EXE  C:\WINDOWS\SYSTEM32\MSCOMM32.OCX

Sin embargo, sigue sin encontrar la licencia del componente.

Agradecería cualquier posible ayuda. Gracias de antemano.


----------



## D@rkbytes

El componente ActiveX MSCOMM32.OCX no necesita licencia para usarlo dentro o fuera del entorno de desarrollo de Visual Basic.
Tal vez ese archivo fue modificado por alguna instalación y sustituyó al original por uno que requiere licencia.
Prueba borrando ese archivo y copia un archivo original, o reinstala el Visual Basic pero eliminando ese archivo para que la instalación agregue uno nuevo.

Es muy diferente registrar un componente en el sistema con REGSVR32.exe, que registrarlo con licencia.


----------



## Narcolepsia

Voy a hacer lo que me has dicho a ver si me va todo bien!
¿Puede influir que el CD de instalación que tengo sea la versión aprendizaje? 
En otro sitio me han recomendado que descargue la ISO de la versión empresarial...
Iré probando. Ya comentaré cuando consiga solucionarlo.
Gracias!


----------



## D@rkbytes

Narcolepsia dijo:


> ¿Puede influir que el CD de instalación que tengo sea la versión aprendizaje?


No he usado esa versión, tengo la empresarial.
Tal vez en esa versión sea necesaria una licencia para el MSCOMM32.OCX, aunque se me hace raro que ese componente sea distribuido para su uso con licencia en una instalación de aprendizaje. (No se podría usar)

Espero que resuelvas tu problema.


----------



## Gokesefa

Mi problema es el siguiente, estoy haciendo un proyecto para la universidad y es la primera vez que trabajo con comunicacion serial, bueno, lo primero que hice fue crear un FORM en visual basic en el cual, de manera anticipada, se seleccionan 8 datos enteros, despues de seleccionar los 8 numeros, paso a querer enviar solamente el primer dato


		Código:
	

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Button1.Text = "CONECTAR" Then
            SerialPort1.PortName = ComboBox1.Text
            Button1.Text = "DESCONECTAR"
            Try
                SerialPort1.Open()
            Catch ex As Exception
                MessageBox.Show("Puerto no valido")
                Return
            End Try
            SerialPort1.DiscardOutBuffer()
            SerialPort1.Write(freca)
           
        ElseIf Button1.Text = "DESCONECTAR" Then
            Button1.Text = "CONECTAR"
            SerialPort1.Close()
        End If
    End Sub

como ven, el primer y unico dato que envio es FRECA y tiene un valor fijo que es 3, al enviar por el puerto serie a mi simulacion en proteus quiero recibir el dato y mostrarlo por el LCD (para asegurarme que el dato que recibo es el correcto) entonces hago lo siguiente


		Código:
	

lcd_putc("\f variables");
   prr=variables();
   printf(lcd_putc,"\n %3u ",prr);

char variables()
{
   tieca=getc();
   return(tieca);
}

es entonces cuando al mostrar en el LCD mi dato, no me muestra 3, sino 51....que puedo hacer? ...


----------



## Miembro eliminado 356005

Si en vez de 3, pones otros valores, ¿qué sale?


----------



## Gokesefa

querido joaquin gracias por responder tan rapido, resulta que al enviar un dato por el puerto serial, esta en ASCII y para convertirlo a decimal, pues debo restarle 48, es por eso que me saltaba 51, pero aqui genero otra duda, ya que envio datos mas grandes, por ejemplo 30, y solo me bota el numero 3, aunque, en el Virtual terminal del proteus si llega el valor (30) al mandarlo a imprimir, no lo reconoce


----------



## Miembro eliminado 356005

Quizás es por lo mismo, que estás enviando *"30"* (dos caracteres), y no *30* (binario).


----------



## Gokesefa

Talvez sea por eso, pero como puedo enviar datos binarios desde el VB? estoy usando el visual studio 2010 entonces solo puedo manejar el SerialPort no hay el MSCOMM, entonces necesito ayuda porfavor


----------



## D@rkbytes

Gokesefa dijo:


> ¿cómo puedo enviar datos binarios desde el VB?


Necesitas convertir la cadena de texto numérico ingresada al TextBox a su equivalente ASCII.

Para que veas cómo se realiza, adjunto un ejemplo. (Está escrito en VB 2008, pero no tendrás problemas.)

Suerte.


----------



## Gokesefa

Muchas gracias D@rkbytes eso sirvio para ver el dato por un puerto y saber si realmente esta llegando y efectivamente muestra el dato enviado en bits, por ejemplo el 24 (11000), pero ahora como puedo trabajar con esas variables como tipo entero? gracias de antemano


----------



## D@rkbytes

Gokesefa dijo:


> ¿Ahora como puedo trabajar con esas variables como tipo entero?


Pues no sé que quieras hacer, el dato enviado el microcontrolador ya lo interpreta como un número de 8 bits, desde 0 hasta 255.


----------



## Gokesefa

Perdon por reabrir el tema mio, pero necesito ayuda ahora no con enviar datos de la pc al PIC sino al revez, y es que cuando pongo putc(1), nunca envia el dato que estoy esperando recibir en mi vb.net, alguna sugerencia?


----------



## D@rkbytes

Gokesefa dijo:


> es que cuando pongo putc(1), nunca envía el dato que estoy esperando recibir en mi vb.net. ¿Alguna sugerencia?


Pues eso depende de la manera cómo estés recibiendo los datos.
No es lo mismo enviar un número entero que enviarlo como cadena. "String"
O sea, no es lo mismo enviar 1 que '1' y dependiendo de cómo trates lo que recibes, es lo que se interpretará.


----------



## Gokesefa

La cosa va asi miren en mi codigo en C coloco esto


		Código:
	

if(taux2>=60)
            {
               t--;
               putc(1);
               taux2=0;
               pito=t;              
            }

exacto, asi de censillo, si un contador llega a 60, pongo putc(1)
y en el lado del visual basic pongo, una variable b=0, como entero, y realizo un control para saber si b ha cambiado de valor leyendo constantemente el puerto 


		Código:
	

While (b <> 0)
                b = SerialPort1.ReadLine()
            End While

estoy haciendo algo mal? como deberia poder hacerlo, gracias de antemano


----------



## D@rkbytes

Gokesefa dijo:


> ¿Estoy haciendo algo mal? ¿Cómo debería poder hacerlo?


Te mencioné que dependiendo de la forma como trates los datos que recibes, será la forma de interpretarlos.
Prueba utilizando* ReadByte()* en vez de *ReadLine()*


----------



## Gokesefa

gracias por responder darkbytes, probe colocando readbyte() pero sigue sin funcionar


----------



## D@rkbytes

Gokesefa dijo:


> Gracias por responder, D@kbytes. Probé colocando readbyte() pero sigue sin funcionar


Pues algo debes estar haciendo mal.
Te envío un ejemplo con simulación y programas en PIC C y en Visual Basic 2008.
El programa en C envía un 1 o un 0, el programa en VB sólo actuará al recibir un 1.


----------



## Gokesefa

Una vez más, gracias por responder. Intento aplicar tu ejemplo a mi trabajo, pero sigue sin funcionar.
Cómo información adicional, debo decir que cuando lee el dato, lo guardo en otro form para leerlo y ponerlo en un Label, pero el label nunca cambia de valor, no entiendo q*ué* puede estar pasando.


----------



## Gokesefa

Pude hacer que mi programa funcione con ayuda de tu programa, tuve que entenderlo muy bien para aplicarlo.
Muchas gracias D@rkbytes, ahora haré la prueba de mi proyecto y les comento cómo me va.


Malas noticias, en la simulación corre perfecto, de maravilla, pero  cuando armo el circuito, pareciera que los datos nunca llegan al pic


----------



## D@rkbytes

Gokesefa dijo:


> Malas noticias, en la simulación corre perfecto, de maravilla, pero  cuando armo el circuito, pareciera que los datos nunca llegan al pic


Entonces será conveniente que realices una depuración del programa usando ICD.
De esa forma puedes ir siguiendo paso por paso lo que hace el programa físicamente.


----------



## Gokesefa

y, pues, como hago eso, muchas gracias por el interes colega, pero cabe recordar, que en proteus corre excelente, no entiendo muy bien que es eso de depuracion usando ICD...me gustaria saber que puedo hacer para solucionar esto, pues es para el lunes a primera hora


----------



## D@rkbytes

Gokesefa dijo:


> Y, pues, ¿cómo hago eso?
> No entiendo muy bien qué es eso de depuración usando ICD


Es muy similar a realizar una depuración con MPLAB o Proteus, pero físicamente.
No es nada complicado, pero necesitas al menos tener alguno de estos programadores/debuggers:
ICD - USB
ICD - SERIAL
MPLABX - ICD3
MPLABX - MICROSTICK II
MPLABX - PICKit 3
MPLABX - REAL-ICE
MPLAB - ICD2
MPLAB - ICD3
MPLAB - REAL-ICE

No sé si el PICKit 2 funcione también como debugger, pero con el PICKit 3 si se puede hacer.
Esto se realiza desde el mismo IDE del PIC C Compiler de CCS o desde MPLAB/X

Menciono éstos entornos y esos debuggers, porque son los que soporta la versión del compilador que tengo.

Ya con la conexión ICSP que usa el PICKit, no tienes nada más que incluir en la cabecera del programa, esto: *#device  ICD = TRUE*
Compilas, grabas el PIC y entras en modo de depuración usando el menú debug.
Seleccionas el tipo de hardware que usarás para la depuración, y listo, ya puedes comenzar a depurar.

El entorno de depuración de PIC C Compiler, es éste:

Aquí es dónde ya puedes ir depurando el programa con el PIC en la tarjeta del circuito.

En la parte izquierda del entorno de desarrollo puedes ir viendo el código en depuración:
​ 
Aquí tienes más información sobre ésto:
*How do I connect the ICD-S/U to my own hardware?*
*MPLAB ICD 3 In-Circuit Debugger*
*MPLAB ICD 2 In-Circuit Debugger*

Suerte.​


----------



## Gokesefa

Pude arreglarlo. El problema eran mis cables, por alguna razón casi todos estaban rotos por dentro, y yo sin saberlo.
Gracias D@rkbytes, por la paciencia y buena onda. Ahora a grabar mi placa y esperar que todo salga bien.


----------



## Meta

Estoy mirando a partir desde la página 33 del documento sobre el ICSP.

Quiero hacer pruebas para enviar información, o archivo hex de un PIC16F84A por nombrar alguno. Desde el puerto serie COM1 que tengo en el ordenador o PC. Estoy haciendo un formulario con C#, luego lo paso a VB .net.

¿Qué velocidad en baudios, paridad, bit de parada usa el protocolo JDM Programmer?

Concretamente el TE20x que es lomismo que el JDM Programmer.




En vez de usar el IC-Prog o el WinPic800, creo uno propio pero de experimentación y solo un PIC. Al final estos dos dejaron de actualizar sus software.

¿Alguna información al respecto?

Saludos.

PD: _Cuando complete de forma fiable el envío de archivos de este programa, pongo su código fuente aquí._


----------

