# Interfaz puerto serie PicRS232 v2.00 (beta)



## Meta

Estoy diseñando un nuevo interfaz, por ahora muy básico sobre el control del puerto serie y un PIC 16F84A.

Tengo un diseño simple del PicRS232 v2.00. Pueden probarlo y me comentan:

*1)* Si le interesa otro diseño de la Interfaz para dejarlo más cómodo y bonito me man ideas y lo haré.

*2)* Por ahora es funcional, pueden probarlo y avisar si a usted también le funciona.

*3)* ¿Alguna suerencia? Cualquier cosita, sea algún texto a añadir, color de algo, etc me vale.

Un coridal saludo.

PD: Por otro lado estoy investigando una interfaz del puerto paralelo y manual incluido.


----------



## rcg

no funciono el .exe

porque no dejas el codigo.


Saludos

RCG


----------



## Meta

Hola:

EL código es el mismo que el v1.00, jejeje, Si no te funcionó el .exe será porque no tienes instalado el Frame Work 4.0.

Descargar FW 4.0 client Profile

Descargar FW 4.0

Voy a preparar el código fuente y te lo paso.

Gracias por colaborar.


----------



## Vegetal Digital

colaboración se escribe con "c" (ayuda/acerca de...)

los botones...¿Qué envian hacia el puerto serie?


----------



## rcg

ok, gracias 





Saludos
RCG


----------



## Meta

jejeje gracias, es vverdad y lo se. También puse derecta. Lo que envía son tramas de byte que detecta el PIC.

Lo han hecho funcionar. Eso quería saber. Dentro de un rato pongo el código fuente.



		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 desde aquí.
using System.Diagnostics;

namespace PicRS232
{
    public partial class Form1 : Form
    {
        // Utilizaremos un string como buffer de recepción.
        string Recibidos;
        public Form1()
        {
            InitializeComponent();
            // Abrir el puerto mientras se ejecuta la aplicación.
            if (!serialPort1.IsOpen)
            {
                try
                {
                    serialPort1.Open();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            // 
            serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Recepcion);
        }

        // Al recibir los datos.
        private void Recepcion(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            // Acumular caracter recibido en buffer.
            Recibidos += serialPort1.ReadExisting();

            // Invocar un proceso de tramas.
            this.Invoke(new EventHandler(Actualizar));
        }

        // Procesar los daros recibidos.
        private void Actualizar(object s, EventArgs e)
        {
            richTextBox_visualizar_mensaje.Text = Recibidos;
        }

        private void button_t_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x74; // ASCII letra "t".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_b_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x62; // ASCII letra "b".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_a_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x61; // ASCII letra "a".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_l_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x6C; // ASCII letra "l".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_Espacio_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x20; // ASCII letra "Espacio".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            statusStrip1.Items[0].Text = DateTime.Now.ToLongTimeString();
        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void acerdaDeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show(@"PicRS232 v2.00 (Beta)
            
Está en fase de pruebas. Comprueba si este programa
funciona o si detecta cualquier fallo y lo comunica
por e-mail a:
            
metaconta@gmail.com

Con colaboración www.forosdeelectronica.com", "Acerca de...",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void webToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start("IExplore.exe", "http://www.pic16f84a.org/");
        }

        private void blogToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start("IExplore.exe", "http://electronica-pic.blogspot.com/");
        }

        private void foroToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start("IExplore.exe", "https://www.forosdeelectronica.com/");
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x20; // ASCII letra "Espacio".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }
    }
}


----------



## rcg

que lenguaje es ese... Java???


Salu2
RCG


----------



## Meta

Es el lenguaje de los C#.

Voy a intentar hacer que se pueda cambiar la configuración de los puertos series y seleccionar trabas de bytes seleccioables. Estas tramas se podrá guardar en .xml para recuperar los datos.


----------



## rcg

se ve sencillo el código en ese lenguaje yo he trabajado en VB y PoweBasic el puerto serie con buenos resultados. 




Salu2
RCG


----------



## Meta

Estoy mejorando la configuración del puerto serie. Me falta la hora de enviar los bytes que usted desea.

Ya puedes descargar la nueva versión y sacar conlcusiones. 



Gracias por colaborar.


----------



## Meta

Hola:







Probando la v2.03 ya puedes ingresar sin ver el código fuente cualquier carácter del teclado. También puedes seleccionar puertos COM. Se peude Maximizar el programa. Una comodidad para los que van a usar esta interfaz.

Ya en la v2.04 estoy haciendo pruebas de grabar un log en un .txt o .log de la entrada de datos desde el PIC.

Descarga PicRS2232 v.203, opina lo que te ha parecido o das una sugerencia de cualquier comentario para mejorarlo para todos y todas del foro y visitantes.

Otra cosa, en los 4 botones principales junto con el botón STOP, están enumerados con números del 1--2--3--4. Para algunos/as les parece mejor en letras. A--B--C--D. Haré algo para que lo puedan cambiar como deseen.
*
NOTA:* Si lo desean. ¿Alguien le interesa guardar datos en una base de datos como MySQL?





*EDITO:*

Tengo la v2.04 mejorada visualmente, con más botones que me faltaron del OFF, ahor ya incluido. Ya puedes guardar la configuración en XML.


----------



## Meta

Hola de nuevo:

Ya pueden probar la V2.05 (beta)




		Código:
	

; 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  Salida_1        PORTB,3        ; Define dónde se sitúan las salidas.
#DEFINE  Salida_2        PORTB,2
#DEFINE  Salida_3        PORTB,1
#DEFINE  Salida_4        PORTB,0

TECLA_1_ON        EQU    't'                ; Código de las teclas utilizadas.
TECLA_2_ON        EQU    'b'
TECLA_3_ON        EQU    'a'
TECLA_4_ON        EQU    'l'
TECLA_1_OFF        EQU 'y'
TECLA_2_OFF        EQU 'n'
TECLA_3_OFF        EQU 's'
TECLA_4_OFF        EQU 'k'
TECLA_TODO        EQU 'p'
TECLA_PARADA    EQU    ' '                ; Código de la tecla espaciadora, (hay un espacio,
                                    ; tened cuidado al teclear el programa).
; ZONA DE CÓDIGOS ********************************************************************

    ORG    0
Inicio
    call    LCD_Inicializa
    call    RS232_Inicializa
    bsf        STATUS,RP0                ; Configura como salidas las 4 líneas del
    bcf        Salida_1                ; del Puerto B respetando la configuración del
    bcf        Salida_2                ; resto de las líneas.
    bcf        Salida_3
    bcf        Salida_4
    bcf        STATUS,RP0
    call    Parado                    ; 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
Mensaje_PARADA
    DT "Sistema PARADO", 0x00
Mensaje_TODO
    DT "Todo ACTIVADO", 0x00
Mensaje_1_ON
    DT "Relay 1: ON", 0x00
Mensaje_2_ON
    DT "Relay 2: ON", 0x00
Mensaje_3_ON
    DT "Relay 3: ON", 0x00
Mensaje_4_ON
    DT "Relay 4: ON", 0x00
Mensaje_1_OFF
    DT "Relay 1: OFF", 0x00
Mensaje_2_OFF
    DT "Relay 2: OFF", 0x00
Mensaje_3_OFF
    DT "Relay 3: OFF", 0x00
Mensaje_4_OFF
    DT "Relay 4: OFF", 0x00

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

TesteaTeclado
    movwf    TeclaPulsada            ; Guarda el contenido de la tecla pulsada.
    xorlw    TECLA_1_ON                ; ¿Es la tecla del movimiento hacia adelante?
    btfsc    STATUS,Z
    goto    R_1_ON                ; Sí, se desea movimiento hacia adelante.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_2_ON                ; ¿Es la tecla del movimiento hacia atrás?
    btfsc    STATUS,Z
    goto    R_2_ON                    ; Sí, se desea movimiento hacia atrás.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_3_ON                ; ¿Es la tecla del movimiento hacia la izquierda?
    btfsc    STATUS,Z
    goto    R_3_ON                ; Sí, se desea movimiento hacia la izquierda.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_4_ON                ; ¿Es tecla del movimiento hacia la derecha?
    btfsc    STATUS,Z
    goto    R_4_ON                    ; Sí, se desea movimiento hacia la derecha.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_1_OFF                ; ¿Es tecla del movimiento hacia la derecha?
    btfsc    STATUS,Z
    goto    R_1_OFF                    ; Sí, se desea movimiento hacia la derecha.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_2_OFF                ; ¿Es tecla del movimiento hacia la derecha?
    btfsc    STATUS,Z
    goto    R_2_OFF                    ; Sí, se desea movimiento hacia la derecha.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_3_OFF                ; ¿Es tecla del movimiento hacia la derecha?
    btfsc    STATUS,Z
    goto    R_3_OFF                    ; Sí, se desea movimiento hacia la derecha.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_4_OFF                ; ¿Es tecla del movimiento hacia la derecha?
    btfsc    STATUS,Z
    goto    R_4_OFF                    ; Sí, se desea movimiento hacia la derecha.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_TODO                ; ¿Es tecla del movimiento hacia la derecha?
    btfsc    STATUS,Z
    goto    R_TODO                    ; Sí, se desea movimiento hacia la derecha.
;
    movf    TeclaPulsada,W            ; Recupera el contenido de la tecla pulsada.
    xorlw    TECLA_PARADA            ; ¿Es la tecla de parada?.
    btfss    STATUS,Z
    goto    Fin                        ; No es ninguna tecla de movimiento. Sale.
Parado
    bcf        Salida_1                ; Como se ha pulsado la tecla de parada se
    bcf        Salida_2                ; desactivan todas las salidas.
    bcf        Salida_3
    bcf        Salida_4
    movlw    Mensaje_PARADA
    goto    Visualiza
R_TODO
    bsf        Salida_1                ; Como se ha pulsado la tecla de parada se
    bsf        Salida_2                ; desactivan todas las salidas.
    bsf        Salida_3
    bsf        Salida_4
    movlw    Mensaje_TODO
    goto    Visualiza
R_1_OFF
    bcf        Salida_1
    movlw    Mensaje_1_OFF
    goto    Visualiza
R_2_OFF
    bcf        Salida_2
    movlw    Mensaje_2_OFF
    goto    Visualiza
R_3_OFF
    bcf        Salida_3
    movlw    Mensaje_3_OFF
    goto    Visualiza
R_4_OFF
    bcf        Salida_4
    movlw    Mensaje_4_OFF
    goto    Visualiza
R_1_ON
    bsf        Salida_1
    movlw    Mensaje_1_ON
    goto    Visualiza
R_2_ON
    bsf        Salida_2
    movlw    Mensaje_2_ON
    goto    Visualiza
R_3_ON
    bsf        Salida_3
    movlw    Mensaje_3_ON
    goto    Visualiza
R_4_ON
    bsf        Salida_4
    movlw    Mensaje_4_ON

; 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    LCD_Borra                ; Borra la pantalla del modulo LCD.
    movf    MensajeApuntado,W        ; Visualiza el mensaje en la pantalla
    call    LCD_Mensaje                ; del visualizador LCD.
    call    RS232_LineasBlanco        ; Borra la pantalla del ordenador.
    movf    MensajeApuntado,W
    call    RS232_Mensaje            ; Lo visualiza en el HyperTerminal.
    call    RS232_LineasBlanco
Fin    return

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


Saludo.


----------



## Meta

Buenas:

Probando el circuito emulado. Ahora puedes descargar PicRS232 v2.06 que lo único que se añadió por el momento la opacidad de la aplicación, esquema en proteus y el Virtual Port COM para hacer la simulación.

Descarga directa del Virtual RS232:
http://www.eltima.com/download/vspd.exe

*1)* Virtual RS232.
*2)* PicRS232.
*3)* Proteus simulación.

¿Alguna conclusión?


----------



## Meta

Se ha añadido la Tabla ASCII y los códigos fuentes ASM en Ver del menú.

Por ahora veo ya suficientes las mejoras para entregarlo completo tal como está con instalador incluido.

Si deseas o tienes ideas e incluso algún consejo avisa antes de preparlo todo a distribución.
Gracias.













*
EDITO:*

Hola:

*1-* Ahora mismo se está preparando la beta v2.08, con la características de que puedas enviar un e-mail a tu correo desde PicRS232 como avisos de alertas de algo que desees. Por ahora esta función funciona muy bien, aún así hay que pulirlo. Puedes dar ideas.



*2-* Por otro lado se intentará corregir mejor el LCD 16x2 de Hitachi HD44780*A00*, compatible también el HD44780*A02.

Ver el archivo adjunto 22720

3-* Por ahora les dejo una aplicación a parte del envio de e-mail con C# _(más adelante se hará con C++ y VB .net)_. Por ahora sólo está configurado para gmail, es decir debes usar tu cuenta gmail para poder enviar correo a cualquiera ocmo hotmail, yahoo, etc. Esto esta idea es para saber si hay alguna alarma desde el puerto serie o PIC que desees, aquí ya estamos hablando de domótica.



El archivo a descargar se llama email.ar y  es funcional. _(No abusen enviando email a la gente cada dos por tres)_.

Saludo.


----------



## Meta

*Actualización:*

Se ha incluido en la interfaz en el menú "Ver-->PIC 16F88", es decir, el código fuente para el PIC16F88 portado desde el 16F84. Funciona muy bien.

En el enlace de abajo puedes descargar el código fuente del *16F88* y 16F84A con el esquema simulador del Proteus incluido. También la interfaz PicRS232 v2.09 con el .XML generado para no tener que configurar nada.











Recuerda, en el programa a los colaboradores se puede poner su nick, su página personal, etc por aportar ideas y mejorarlo.

También se lo puedes descargar por aquí.
http://www.pic16f84a.org/index.php?...ngel-acaymo&catid=52:angelproyectos&Itemid=90

Saludo y Feliz año nuevo 2010.


----------



## Meta

Nueva actualización del PicRS232 v2.10 Beta.

Se incluye protección del panel de control.

Descargar

Saludo.


----------



## george.manson.69

Muy bueno el avance que llevas!!!
Los estare viendo y provandolos!

Saludos!


----------



## Meta

george.manson.69 dijo:


> Muy bueno el avance que llevas!!!
> Los estare viendo y provandolos!
> 
> Saludos!



Gracias por tu tiempo. Así podrás dar tu propia conclusión para mejorarlo.


----------



## doublan2009

Me gustaría probar este proyecto pero nunca he utilizado PROTEUS ni  el VIRTUAL SERIAL PORT. Si no es mucho pedir Meta, tendrás una guía o manual para hacer la configuración de estas herramientas.

Esto es lo que tengo:

- MPLAB IDE con PICSTART PLUS
- PROTEUS 7 DEMOSTRATION
- VIRTUAL SERIAL PORT DRIVER 6.9
- NET FRAMEWORK 4
- PicRS232_V2.6 (META)
- 2015_RS232_ Gobierno

Entiendo los programa pero no se como implementar la simulación. Gracias de ante mano...


----------



## Meta

*Mini tutorial para poder simular el Proteus con el Virtual Serial.*
*
1)* Descarga PicRS232 v2.10 beta.

*2)* Dentro del archivo llamado PicRS232 v2.zip lo descomprimes y en su interior te encuentrar otros archivos.
*
3)* Ten en mente con qué PIC quieres trabajar, por ahora sólo uso el 16F84A y el 16F88. Me imagino que el _16F84A_ es más fácil de encontrar en el mercado y lo usaremos para este ejemplo.

*4)* Hay un archivo que se llama _16F84A.DSN_. Es el proyecto que vamos a usar en el _Proteus v7.6_. Como podrás ver, falta un archivo de la extensión _.hex_ que debes crear en el MPLAB.

*5)* En el archivo 16F84A.zip, al descomprimirlo encontrarás una carpeta llamada proyecto, dentro de ella encontrarás un archivo llamado _PicRS232.mcp_ que es el que debes abrir, en él se encuentra el proyecto completo del MPLAB para compilarlo. Usaremos el MPLAB v8.43 que es el que fue compilado _(también con una versión superior funciona)_. 

Crea una carpeta en C:\ _(yo la tengo en H:\)_ y llámala _PIC16F84A_, dentro de ella metes la carpeta Proyecto donde tienes todos los archivos necesarios para compilarlo.











Se abrirá la ventana como esta de abajo:





Asegúrate que esté el proyecto seleccionado como indica en la imagen de abajo.





A compilar como indica abajo.





Ya puedes mirar en la carpeta _C:\PIC16F84A\Proyecto\RS232_ para encontrar el archivo _.hex_.

*6)* Descarga directamente el Virtual Serial para simular el puerto serie o vete a la página oficial que es esta: http://www.eltima.com/products/vspdxp/

*7)* Abres el _Virtual Serial_ y fíjate en el recuadro marcado en rojo como muesta en la imagen de abajo.






Debes estar en COM1 y COM2 así que márcalo como muestra abajo, después pulsa el botón _"Add Pair"_ como indica abajo en flecha roja.





Podrás ver cuando el puerto está abierto o cerrado como también los bytes enviados y recibidos.





*8)* Antes de iniciar el simulador Proteus 7.6, inicias el PicRS232 como puedes ver abajo, así no te dará aviso de puertos cerrados o en uso. Si no te ejecuta el PicRS232 debes instalar el FrameWork que puedes descargar desde la Web de MicroSoft en este enlace de abajo.

Descargar FrameWork 4.0






*9)* Ahora nos centramos en Proteus en este caso la versión 7.6. _(Hace tiempo ya que no actualiza y no se el motivo)_. Arbimos el ISIS y con el archivo _16F84A.DSN y nos muestra la imagen de abajo.






_*10)* Hacemos doble clic con el ratón en el PIC16F84A y se abre una ventaja que muestra abajo. Cuando acabes de buscar el archivo .hex, pulsa el botón _Ok_.






*11)* Como dije antes, PicRS232 debe estar abierto, luego pulsa el botón _Play_ del simulador de Proteus. Ya podrás jugar con la simulación para saber como funciona. Puedes usar el Virtual Terminar para ver la simulación. Pincha en él para que te obedesca, los botones son los que tienes grabado en el 16F84A.asm.



> TECLA_1_ON        EQU    't'                ; Código de las teclas utilizadas.
> TECLA_2_ON        EQU    'b'
> TECLA_3_ON        EQU    'a'
> TECLA_4_ON        EQU    'l'
> TECLA_1_OFF        EQU 'y'
> TECLA_2_OFF        EQU 'n'
> TECLA_3_OFF        EQU 's'
> TECLA_4_OFF        EQU 'k'
> TECLA_TODO        EQU 'p'
> TECLA_PARADA    EQU    ' '








Con el PicRS232 cuando veas el mensaje desde el PIC como muestra abajo, ya indica que el programa anda bien. Puedes pulsar los botones que deseas y comprobar su funcionamiento.





*12)* Mientras tanto, poco a poco voy montando un proyecto real de prueba. Cuando me funcione del todo, lo haré en una buena pcb y con caja incluido. Eso sin contar que tengo en mente en usar el 16F887, un PIC de 40 pines que me vale para usar 8 entradas digitales, 8 salidas digitales, unas cuentas entradas analógicas, sobre todo, controlar este proyecto por Internet bajo PHP o por página Web y C#.






Poco a poco voy a soldar los componentes que me falta, con el tiempo pongo el progreso en fotos su final vídeos en youtube.

Puedes descargar este minitutorial portado a PDF.


----------



## doublan2009

Excelente META, mejor no pudo ser, como decimos en Venezuela “Más claro no canta un gallo”, Voy a jugar un poquito con este proyecto hasta entenderlo bien sobre todo C# que no lo conozco mucho, me entiendo mejor con JAVA, aun que por lo que veo son un poco parecidos, el problema con JAVA es que hay que usar NATIVE para implementar una comunicación serial en Windows y eso me tiene los pelos de punta. 

En este momento voy a descargar MPLAB V8.43 y el PROTEUS 7.6 para comenzar y luego te comento, de verdad, muchísimas gracias. Te voy a estar siguiendo por que veo muy interesante el proyecto que comentas, sobre todo por la aplicación en Internet…


----------



## Meta

De nada.

Aquí hice un tutorial o manual sobre C# para hacer la base mínima del puerto serie con código fuente incluido.

Manual C#.
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Interfaz por internet lo estoy haciendo y funciona, está en pruebas._ https://www.forosdeelectronica.com/posts/193601/ _
Saludo.


----------



## doublan2009

Okey voy a estudiarlo y luego te comento…

Meta, segui todos los pasos del tutorial del proyecto PicRs232 y cuando le doy PLAY al PROTEUS, me arroja el siguiente error.


----------



## Meta

Me olvidé decirte que funciona si tienes el de pago. La demo está limitada y te da ese error. El error en realidad es la licencia que no la tienes, así que a pagar.

Puedes conseguir el de pago a un amigo de confianza por ahí que te deje el disco del Proteus.

Suerte...


----------



## doublan2009

Ya lo veía muy fácil, jajaja… Bueno voy a cómprame el CD, es una excelente herramienta.

Por otra parte tengo una reliquia de PICSTART PLUS del año 99 puerto serial, tiene un PIC17C44 y una etiqueta que debe ser el firmware, dice “U21 PSF20100.HEX  DECCh 4/19/99” La pregunta es; sabes como actualizar este dinosaurio para  que me trabaje con las nuevas versiones de PIC USB  y  MPLAB. 

Por ahora solo lo que tengo son preguntas cuando me ponga al día comienzo hacer también contribuciones al foro, cloro siguiendo tu ejemplo.


----------



## Meta

La verdad es que no tengo idea del PICSTART del 99 ni los del 10. sorry.,


----------



## Moyano Jonathan

Meta que buen proyecto que has encarado 

Preguntas:

- Por que estás usando .NET Framework 4.0 ?? 
- Estás compilando con Visual C# express 2010 ?? en caso de que asi fuera , por que no seguir usando c# express 2008 ??
- Cuáles son las características nuevas de esta aplicación ?
- Cuales son las funcionalidades que puede tener esta aplicación ??

Sugerencias:

- Añadir funciones extras como por ejemplo: 
a - lectura/escritura de eeprom.
b - control de dispositivos mediante I2C.

Un saludo meta !


----------



## Meta

Tengo los dos Express 2008 y 2010 instalado para ver que tiene. Cambia en apariencia, las cosas nuevas las puedes encontrar por Internet sobre novedades del Visual Studio .NET 2010.

Para lo que vamos a usar, desde el 2005 basta.

Lo estoy probando porque me encanta las novedades y por curiosidad. En abril saldrá la versión final. No es gran cosa para lo que vamos a utilizar, así que el Visual C#, VC++ y VB .net funciona muy con el 2005/2008 y 2010.




En cuanto a la sugerencia, tengo en mente lo de la EEPROM interna que si está implementada en otro proyecto que lo pasaré aquí también. Lo del I2C no lo he pensado. Para sensores está bien, ya que un sensor de temperatura del encapsulado tipo 555, puedes poner 8 con dos cables en I2C más que el propio LM35.











Descargar ejemplo. Contraseña *D.P.E.*


Si hay más ideas, las puedes comentar. Ojo, trabajo directamente con el 16F84A y también lo porto al 16F88. Quizás en el futuro le ponga el 16F887 porque tiene más pines.

Lo que se me ocurre ahora es que puse los botones rojo y verde que significa ON/OFF. También pondré color rojo encendido ON / rojo apagado OFF, lo podrás elegir.

http://www.flounder.com/csharp_color_table.htm

Gracias por las sugerencias.







*Edito:*

Aprovecho para un pequeño añadido. Por ejemplo:

- Añadí un botón que al pulsarlo apagas el PC. Es de prueba y funciona. La idea principal es que el día que lo pase el control por Internet, pueda dar la orden de apagar el PC por Internet o bien directamente desde el PIC o cualquier otra idea.


----------



## george.manson.69

meta has usado este programa...?
sirbe para aderir intrumentos de medicion y todo eso a c#...
espero que te sirve

lo malo es que simeore te pide la licencia lo bueno es que funciona todo...

http://www.freedownloadmanager.org/es/downloads/Artefactos_de_Instrumentación_45535_p/

te lo recomiendo...yo voy a empezar a trabajar con esos....


----------



## Meta

Muy bueno si vas hacer lo del sensor de temperatura. Eso si, Costo: $215.00 US    
    Tamaño: 2281 K
Muy caro para lo que es, ya que estas cosas las puedes hacer tu mismo, sólo es modelado de componentes de otros componentes base.


----------



## Meta

Cuando por fin ya lo tenía, se me quemó el MAX232 y el LCD, ya llevo dos. Así que tardaré en recuperar los LCD para comprarlo de nuevo.

Tendré que hacer todo de nuevo la placa y comprar componentes. Con todo el tiempo que perdí se me baja la moral.



Cuando tenga más €€€€€€€€ y tiempo, volveré a la carga.


----------



## mechazz

Guau que chido proyecto es genial , bueno antes que nada hola ee estado checando tu trabajo es bueno, tengo una pregunta esto solo se puede hacer simulado? y se necesita el programa hyperterminal?, porque nunca pude enviar datos con el hypertermina , si me pudieras ayudar con esto del serial , que mejor que un conocedor de antemano muchas gracias.



			
				mechazz dijo:
			
		

> Guau que chido proyecto es genial , bueno antes que nada hola ee estado checando tu trabajo es bueno, tengo una pregunta esto solo se puede hacer simulado? y se necesita el programa hyperterminal?, porque nunca pude enviar datos con el hypertermina , si me pudieras ayudar con esto del serial , que mejor que un conocedor de antemano muchas gracias.


si que enverdad me gustaria aprender a usar el puerto serial.


----------



## Meta

Estimado amigo:

Si se puede usar el HyperTerminal sea simulado o real. Funciona todo, sólo que tengo que conseguir unos buenos €uros para hacer lo que quiero hacer. También estoy pendiente de hacer una insoladora casera con temporizador de LCD.

En caso de que quieras aprender el puerto serie, lo puedes hacer con este manual en PDF.
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Saludo.


----------



## vaneno

Muy bueno el trabajo meta.
Una cosa a ver si puedes hecharme una mano. Estoy desarrollando tambien sobre pic y sobre 232, y tengo el proteus 6.7. El caso es que he visto en COMPIN que sirve para conectar tu simulacion del proteus al COM del pc y depurar el pic, pero lo que necesito es conectar la simulacion del proteus al software 232 que también he desarrollado. Se que puedo ponerlo en otro pc y probar con el cable cruzado , pero es posible hacerlo todo en la misma maquina? 
El virtual serial es version demo y me preguntaba si se puede hacer esto que pido prescindiendo de este soft.

Un saludo y sigue asi


----------



## Meta

Si se puede hacer al derecho y al revés.

Descargar tutorial

Te aconsejo que uses el Proteus 7.6 o el último hasta la fecha 7.7. He provado el puerto virtual en modo demo y funciona muy bien.

Si haces algo, puedes publicar aquí las capturas de pantallas o fotos reales, de paso animarás a más personas.

Suerte.


----------



## vaneno

Que rapidez 

Le hechare un ojo pues. De momento lo que quiero hacer es un menu en el pic que se pueda manejar desde hyperterminal, para multiples usos, y claro tengo pics y tengo programador pero es una lata programar y probar. Gran invento el proteus desde luego . Gracias tio


----------



## Meta

Buenas:

Lo del menú si me ha salido desde el HyperTernimal de Windows. Ojo, que sólo aguanta 256 bytes de palabras. Si te pasas de tantos menú, debes usar este método que puedes ver en el enlace de abajo.

http://www.pic16f84a.org/index.php?...gina-de-256-bytes&catid=38:pic16f84&Itemid=60

También puedes hacer el mismo menú para el LCD.

Saludo.


----------



## vaneno

Con 256 bytes te refieres al envio de una sola vez, no? . Si es asi supongo que llega con mandar varias lineas, cada una con una opcion. El proyecto que voy hacer lo probare con un 16f877. Tu ejemplo con el 16f84 me ayuda bastante, ya que supongo que sera facil de adaptar. Y por cierto, ya probe el Proteus simulando contra mi aplicacion y me he quedado con la boca abierta y gratamente sorprendido. Sabia de la simulacion de pics, pero lo de simular el 232 !!!  . Gran invento el proteus.


----------



## Meta

El envío de datos por el puerto serie siempre es de 256 Bytes exactos. He hecho el programa tanto con el 16F84A como que lo adapté al 16F88. Usaré mucho estos dos PIC.

Si has probado algo y te funciona o cuando lo acabes. Pon capturas de pantalla para verlo, de paso animará a más personas.


----------



## EINNER C

oye Meta, excelente proyecto, he estado trabajando en visual basic.net y he realizado algunas comunicaciones y me han ido bn, excelentes tus aportes.. gracias, seguire aprendiendo.., 
por otro lado estoy desarrollando un proyecto de comunicacion inalambrica utilizando xbee pro serie 2, y micros de micrchip(18f2550) y la interfaz la estoy desarrollando en basic.net, espero pronto estar subiendo un avance para consideracion de todos, y para recibir sugerencias y aportes, ...


----------



## FRYCK

muy  bueno tu proyecto  *Meta*  felicitaciones  
Saludos


----------



## Meta

EINNER C dijo:


> oye Meta, excelente proyecto, he estado trabajando en visual basic.net y he realizado algunas comunicaciones y me han ido bn, excelentes tus aportes.. gracias, seguire aprendiendo..,
> por otro lado estoy desarrollando un proyecto de comunicacion inalambrica utilizando xbee pro serie 2, y micros de micrchip(18f2550) y la interfaz la estoy desarrollando en basic.net, espero pronto estar subiendo un avance para consideracion de todos, y para recibir sugerencias y aportes, ...



También se hará un manual tanto en C#, C++ y VB .NET de lo mismo para aprender de todo un poco.

Esta vez será ya con *Visual Studio Express 2010*. Pronto llegará en español. Aún se puede descargar la versión 2008 y en español, lo que no se cuanto tiempo estará para su descarga.

http://www.microsoft.com/express/Downloads/#2010-All

FRYCK. Gracias, espero seguir avanzando.


----------



## kuoyaoming

Hola, meta como estas? una consulta, el lenguaje C# es igual que el lenguaje C++???
Muchas Gracias.
Atte. Kuo Yao Ming


----------



## Meta

Estimado amigo:

No. C# se parace a C++ y Java a la hora de programar,internamente no es lo mismo. C# es más cómodo de programar, no por ello el mejor.

Un cordial saludo.


----------



## kuoyaoming

Ah, muchas Gracias por su explicacion 
Saludos.


----------



## Meta

Hola:

Pueden probar la versión optimizada de la Interfaz del puerto serie y comentar sus opiniones para mejorarlo.

Descargar abajo.

Saludo.


----------



## Meta

Otra corrección interna del programa. Se puede enviar e-mail con el mensaje si se ha enviado o no.


Tutorial para probarlo aquí.
Descargar


----------



## EINNER C

como siempre buenos tus avances Meta.....
y ya q estoy metido fuertemente con esto de la programacion en .net, quiero realizar la interfaz grafica para mi proyecto en basic 2008.net, ya he avanzado algo garcias a tus aportes, pero primero les cuento algo acerca de mi proyecto, como les habia comentado esoty realizando un proyecto de comunicacion inalambrica, se trata de controlar un vehiculo a  distancia, pero ademas implementarle un radar para detectar obstaculos, la parte de control del carrito me va bn, pero el complique esta en realizar el radar en la interfaz, algo asi q vaya girando y graficando los obtaculos(puntos), bueno con la informacion de distancia y angulo(con las que se pueden calcular la coordenadas x,y), que las envia un pic en el carro obtenidas de un sensor de distancia(dist) y un motor paso a paso(ang), los cuales giran para cubrir los 360grad, es muy complicado realizar este cometido?... 
de antemano muchas gracias


----------



## Meta

Buenas:

¿Puedes hacer un equema en bloques con el paint de lo que quieres hacer? Una imagen se entiende más. El poder se podrá, lo que requieres es tiempo.

Saludo.


----------



## EINNER C

gracias por responder,,,,
la idea es algo como se ve la imagen Radar2 .... y que ese haz de luz a medida que gira vaya actualizando los obtaculos en la grafica 

mas concretamente quisiera saber como hago para graficar esos obtaculos, es decir a medida q gira se vayan graficando....

yo habia pensado ubicar puntos cada cierto angulo y a distinta distancia del centro (radar3 y asi todo el grafico) en la grafica pero dejarlos ocultos y q a medida q pase el haz vaya dejando visible el que represente la distancia y los otros no, pero para eso, por lo menos tendria que poner 288 puntos, (36 grados distintos y 8 distancias distintas) y seria muy extenso, no existe la posibilidad de crear una matriz de objetos de esta dimension y poder cambiar el atributo de visible en cada uno de ellos segun la posicion de dicha matriz o algo parecido...

gracias de antemano..


----------



## Meta

Hola:

Lo que quieres hacer lo veo muy costoso en cuestiones económicas. Primero prueban con sensores o componentes baratos.

Usa un motor PAP que ella tiene un sensor de ondas de choque (ultrasonido) como puede ser este a unos 8 metros de distancia.







Para no liarte con los cables, también es bueno usar los RF de Aurel para PIC, funciona como puerto RS232.





La tecnología lo decides usted. Claro que el motor paso a paso gira 360º escaneando por cada punto con el sensor de ultrasonido. Son componentes pequeños, lo que quires hacer cuesta muchos $$$$$$$$$$.

Lo que hace es girar el PAP y el sensor capta las ondas al enviar y cuanto tiempo tarda en llegar el eco. En este caso son lentas. Si quieres velocidad, para eso usa  radares pequeños de barcos que llegan cientos de km.

Poco a poco vas sacando información del tema.

Saludo.


----------



## EINNER C

gracias Meta..
pues no habia pensado tanta distancia, con 4 metros estaria bn, y creo q de esa manera no me saldria tan costoso,, la verdad por el momento estoy preocupado por la parte grafica y funcional en visual basic,,,  

y pues le cuanto, ya encontre la manera de hacer girar el haz los 360 grados, pero no he encontrado la forma de crear una matriz o vector de controles (picturebox)para hacer mas facil el llamado de cada uno de ellos ya que son bastantes, ,,

quisiera saber sitienen informac de eso, como crear un areglo de controles en basic.net


----------



## Meta

Hola:

La parte gráfica la puedes hacer con GDI+ que trae Visual Basic 2010 (y anteriores).

http://www.elguille.info/colabora/puntonet/tutGDI/indice.htm

http://www.recursosvisualbasic.com.ar/htm/vb-net/17-dibujar-lineas-mediante-el-gdi.htm

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

http://social.msdn.microsoft.com/Search/es-es?query=GDI+

Saludo.


----------



## EINNER C

muchas gracias Meta
como siempre excelentes tus aportes, voy a leer lo que citaste,,, gracias


----------



## Meta

Hay algo más. Este si que tiene ejemplos.

http://www.csharphelper.com/articles.html

Saludo.


----------



## pelax

hola te hago una consulta trato de crear el Hex con MPLAB pero me tira los siguientes errores 

----------------------------------------------------------------------
Debug build of project `C:\1\Proyecto\PicRS232.mcp' started.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Thu Jun 03 11:41:36 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\1\Proyecto\PicRS232.mcs".
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84A "RS232_11_MOD1.asm" /l"RS232_11_MOD1.lst" /e"RS232_11_MOD1.err" /d__DEBUG=1
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 43 : Symbol not previously defined (LCD_Inicializa)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 44 : Symbol not previously defined (RS232_Inicializa)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 53 : Symbol not previously defined (RS232_LeeDato)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 187 : Symbol not previously defined (LCD_Borra)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 189 : Symbol not previously defined (LCD_Mensaje)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 190 : Symbol not previously defined (RS232_LineasBlanco)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 192 : Symbol not previously defined (RS232_Mensaje)
Error[113]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 193 : Symbol not previously defined (RS232_LineasBlanco)
Error[105]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 196 : Cannot open file (Include File "RS232.INC" not found)
Error[105]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 197 : Cannot open file (Include File "RS232MEN.INC" not found)
Error[105]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 198 : Cannot open file (Include File "LCD_4BIT.INC" not found)
Error[105]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 199 : Cannot open file (Include File "LCD_MENS.INC" not found)
Error[105]   C:\1\PROYECTO\RS232\RS232_11_MOD1.ASM 200 : Cannot open file (Include File "RETARDOS.INC" not found)
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\1\Proyecto\PicRS232.mcp' failed.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Thu Jun 03 11:41:37 2010
----------------------------------------------------------------------
BUILD FAILED

No sabes q puede estar fallando ya que segui todos los paso 

gracias


----------



## Meta

Buenas:

Si te refieres al PIC-16F887, bájate este nuevo enlace. No me da error. 

Sio es posible me avisas tenga errores o no. Se incluye fuente proteus 7.6 SP0. (Ya está el 7.7).

Saludo.


----------



## EINNER C

hola @pelax
lo que se aprecia es que no se encuentra las librerias que citas el el archivo principal, Cannot open file (Include File "RS232.INC" not found), y las otras, y por ende no encuentra las funciones mencionadas Symbol not previously defined (LCD_Inicializa) y las otras, deben estar ubicadas en la misma carpeta del archivo principal para q corra,.. o agregalas como archivos  en el mplab, espero le sirva...


----------



## EINNER C

hola meta,,

ya realize la interfaz grafica siguiendo tu manual, y realmente apendi bastante, muchas gracias, en este hilo esta la aplicacion con algunas modificaciones, y pues la parte de hardware la realize con psoc, por si al alguien le intereza...

PSoC® 1. Cursos de los módulos

saludos...


----------



## TheLordDuran

Saludos

Estoy con un proyecto, con sensores de temperatura y humedad y mostrarlos en una PC, y para seguir avansando, necesito realizar una escala con los datos que llegan al puerto DB9, ello para mostrarlo en un programa interfaz en la PC, segun se, el tipo de dato que llega al puerto es siempre ASCII, entonces, volcando ese dato a su equivalente en decimal, puedo hacerlo, el problema que tengo es cómo voy a saver, por ejemplo, a que temperatura equivale algun dato leido en un tiempo específico???, cómo voy a saver que ese dato es 0 ºC, ó 20 ºC o más.

Muchas gracias.


----------



## Meta

Estas cosas lo puedes ver en el data sheet del sensore de la temperatura, y se mide en rangos.


----------



## EINNER C

TheLordDuran dijo:


> Saludos
> 
> Estoy con un proyecto, con sensores de temperatura y humedad y mostrarlos en una PC, y para seguir avansando, necesito realizar una escala con los datos que llegan al puerto DB9, ello para mostrarlo en un programa interfaz en la PC, segun se, el tipo de dato que llega al puerto es siempre ASCII, entonces, volcando ese dato a su equivalente en decimal, puedo hacerlo, el problema que tengo es cómo voy a saver, por ejemplo, a que temperatura equivale algun dato leido en un tiempo específico???, cómo voy a saver que ese dato es 0 ºC, ó 20 ºC o más.
> 
> Muchas gracias.




eso depende de la resolucion del sensor q vayas a usar y ademas del conversor adc q utilizes, como un ejemplo te pongo al sensor lm35 q entrega 10mv por cada grado, lo que seria facil de adecuar a un conversor de 8bits con vref- en gnd y vref+ en 2.55v, de este modo el minimo cambio q detectaria el conversor seria de 10mv, yasi cada incremento equivaldria a un grado....


----------



## melvingonzalex

Hola amigos, necesito enviar datos por proteus por el puerto serial real. Tengo el programa VSPE que me permite crear una conexion entre el puerto real y el puerto virtual, pero solo logro recibir los datos alguien me puede decir que tengo que hacer para enviar los datos por el puerto serial. Muchas gracias...


----------



## EINNER C

hola a todos,,,,,

quiero dar gracias de antemano a Meta por sus aportes, logre terminar mi aplicacion de control para vehiculo de exploracion....

como habia comentado antes, tenia mis problemas con la realizacion del radar.... logre solucionarlos con la ayudad de un amigo que realizao una dll para un picture box que permite modificar ahora un parametro de rotacion de 0 a 360 grados,,,

sin mas palabras aqui esta la interfaz y el circuito en proteus para quien lo quiera probar... me habia demorado debido a que mi disco duro se averio y no logre recuperar la info, asi que esta es la penultima version del programa, logre encontrarla en mi memoria,,, esta casi terminado ya indicare lo que le falta.

bueno la interfaz permite manejar la direccion del vehiculo de una forma muy didactica, con un volante que se controla con las teclas de dirreccion, cuenta con tres velocidades, que se suben con w y se baja con s, si das atras en las teclas de direccion da reversa, en esa parte todo va bn, lo unico es que cuando vva hacia adelante en el velocimetro indica ir atras y viceversa, es algo simple,,,,

por otro lado existe un boton llamado inspeccionar terreno, el cual detiene el vehiculo y recibe los datos del sensor para inspeccionar obstaculos y otros parametros, en esta version solo se miden obstaculos,,, un inconveniente que repare en la ultima version pero que sigue presente en este, es que se debe iniciar la simulacion del pic primero, y luego la interfaz, debido a que falto algo en la sincronizacion de la interfaz y el pic, en real hay que encender el vehiculo primero, el sensor utilizado es un sfr04 con 6mts de alcanze, el cual me habian recomendado, ...

utilize el eltima serial port driver para crear com1 y com2 para unir la simulacion con la interfaz,,,, 

en la simulacion podran ver dos pic, un 4550 y un 2550, el 2550 esta desactivada la simulacion, ya que es un control remoto, donde no se pueda tener un pc, se controla por control, utilize carcasa y joystick de uno de play, jeje  como modulo de rf, utilize un xbee pro que tiene un alcanze de 1.5 Kmts y maneja comunicacion serial...

la dlll rimage.dll para el giro la realizao un amigo, andres eduardo ojeda, creditos sobre ella para el.. muchas gracias,,,

el codigo del pic lo realize en c con pic ccs, cualquier ayuda que pueda brindar en este lenguaje para pic, con mucho gusto..

eso es todo jejeje

por otro lado me encuentro realizando otra aplicacion con un pic 18f2550, comunicacion por usb para un dispositivo de medicion, ya que no he logrado realizar comunicacion usb en visual, realizo comunicacion serial normal, y en el pic implemento usb cdc, que es un modo en el que al conectar el usb se crea un com y se trabaja de la misma forma que rs232,,,,  si alguien sabe como realizar comunicacion usb en vb.net le agradeceria....

mi duda acerca de esto es que utilizo el evento datareceived,,, y cada vez que envio algo al pic el me devuelve 3 datos en dependencia de lo que necesito, todo va bn, recibo los datos bn y los envio bn, el unico proble se presenta cuando oprimo un boton desconectar para cerrar el pierto, me genera que se sale por un evento inesperado, supuestamente esta recibiendo datos, pero la interfaz solo envia datos mientras este activado un timer, y al dar desconectar lo que hago es desactivar ese timer y cerrar el puerto, pero me sigue generando ese error la verdad no se como arreglarlo,  he puesto incluso discardinbuffer, para descartar lo que llega pero sigue saliendo el error.... les agradeceria su ayudad  estudio ing electronica y lo que he aprendido de visual es gracias al foro, asi que tengo bastantes falencias,,,,

por otro lado, y en base a lo planteado por meta, realizo lo de funcionamiento en segundo plano, pero al realizar esto, mi formulario no recibe la orden de iniciar en el centro de la pantalla, ahora aparece donde quiera, por que sera??? [/LEFT]


----------



## Meta

Hola:

Tengo prisa, debo ir a un examen hoy mismo, no he leído tu mensaje del todo, luego lo miro con más calma. He visto el programa y parece que haz hecho un trabajo fantástico, me ha impresionado. Así se hace.

Mañana estaré libre si es posible.

Saludo.


----------



## zitonguito

felicidades Meta por tu trabajo, he seguido el hilo y veo que le has puesto gran dedicación a tu trabajo


----------



## INSERT64

Hola Meta de ante mano te felicito buen aporte, ahora quisiera saber si esposible añadirle mas reles a tu programa, estoy en un proyecto y necesito activar 8 reles por puerto RS232


----------



## Meta

Lo tengo hecho en otro ordenador con el 16F886 y el 18F4550 en ensamblador y si se puede. También está en proteus. Lo que todavía no lo he hecho realidad por falta de dinero. Funciona a la perfección, sólo que me falta una cosa. No me sale lo del detectar 8 entradas digitales junto a los 8 salidas a relés.


----------



## banistelrroy

hola meta use tu programa y lo probe y si funciona en realidad lo probe con reles y transistores y funciona ok ......pero una pregunta sabes las salidas los acople ya no a los reles sino al control remoto de carro de esos que venden en la jugeterias lo que pàsa esque queria controlarlo desde la pc......................

el control remoto cuenta con 4 pulsadores que se activan an bajo ADELANTE,ATRAZ,DERECHA y IZQUIERDA. y lo que hice fue sacar las 4 salidas del control remoto que se alimenta de una bateria de 9V y su respectiva tierra entonces los pulsos los enviava desde tu programa ya no usaba los pulsadores y uni el negativo del circuito y el negativo de la bateria del control remoto ...................................AL MOMENTO DE VER SI FUNCIONA di el primer pulso y si dio marcha adelante, PERO EL problema esta enque se colgo el programa y no daba nada y se quedo pendido no se queria apagar ni prender en otras palabras programa colgado tenia que desconectar tod............................no se que es si es programa o otra cosa me gustaria que me ayudes en eso........gracias de ante mano


----------



## Meta

Usa algún módulo RF que usa RS232 y va mejor.


----------



## COSMICO

Hola amigo META.
Mira que tengo un dilema, y requiero ayuda.
tengo que conectar dos entradas de dispositivos con protocolo RS232
a un solo puerto serie, en comunicacion full duplex.
Existe algun integrado para esto?
debo hacer la tarjeta...
Un saludo..


----------



## Meta

Lo puedes hacer. Vete haciendo esquema dibujo por si acaso te haya entendido otra cosa.


----------



## COSMICO

Hola META.
La idea es, que tengo dos pic con max232, y necesito que ambos se comuniquen con el mismo puerto serie.
Pero no se como hacer la conexion fisica, o que integrados usar..
ahí va un ejemplo de lo que necesito; pero asi como está conectado, creo que hace corto circuito


----------



## Meta




----------



## pablojml

Hola meta, una pregunta, estoy realizando un proyecto, un micro 16f877a debe enviar los datos de 8 sensores (7 de proximidad y 1 de peso resistivo) por puerto serial, la información la veo en un LCD como debe ser, pero al momento de enviarla al puerto y recibirla en la PC, no lo está realizando como es debido, podrás echarme una mano con la programación ya que no se donde tengo el error. 

Saludos


----------



## gonzac.top

Exelente programa, debo felicitarte.
Alguien sabe si se puede puentear el tx y rx, para capturar los que se envia? Ya sea con el max232 o directamente al puerto. ¿No hay ningun riesgo con ello?

Saludos


----------



## biopic

hola meta 
no se si me pudieras asesorar yo se lomas basico de c mas mas  pero de visual si estroy frito lo que quiero hacer es
desde la pc quieronadamas habilitar 6 lineas del puerto serial  cuatro salidas haciael pic y 2 entradas desde el pic y al presionar las cuatro teclaS MANDE UN 1 LOGICO de igual manera el pic al poner un 1 en cualquiera delasdos lineas lo indique la ventana 
no quiero que me hagan el prorama mas bien sime puedieran dar los comandos necesarios y su sintaxis o algunos ejemplos empezeelmanual de VB 2010 pero no voy bien y mas que esta en inglés  espero no molestar


----------



## Tom sawyer JCHL

hola, quiera pedir algo, se que es mucho pedir, pero necesito un programa que mande un numero desde la computadora hacia un atmel  89c52 por puerto serial, y que desde el atmel se pueda mandar un numero hacia la computadora , ya realize un programa que manda datos de un puerto de un atmel hacia el puerto de otro atmel a 9600bd, pero no  puedo probar con la pc por q no tengo un programa, gracias


----------



## Meta

gonzac.top dijo:


> Exelente programa, debo felicitarte.
> Alguien sabe si se puede puentear el tx y rx, para capturar los que se envia? Ya sea con el max232 o directamente al puerto. ¿No hay ningun riesgo con ello?
> 
> Saludos



No hay ningún problema de puentear el tx y rx. Puedes capturar los datos mediante dumpeo.


----------



## COSMICO

Biopic.
no hay ningun problema, con eso, sí se puede puentear, TX>RX.
mas no TX>TX, o RX>RX.
ya lo he proibado.Un saludo.


----------



## Giloman

Hola me gustaria saber si me puedes apoyar con un blog (programacionjuntos.blogspot.com), para juntos resolver dudas... gracias de antemano aun el blog esta en blanco porque me interesa ir publicando articulos que sirvan a los lectores espero lo visites y me apoyes.

Atentamente
Ing. Ortega


----------



## COSMICO

Que bueno, seria interesante apoyo la petición


----------



## megasysfix

Hola META, que tal, hace tiempo que no sabia nada de ti jejejeje, bueno como veo te me has adelantado demasiado en el proyecto este, yo tenia un gran problema pues programaba con VB2010 en Basic, con el tiempo aprendí de esos errores y actualmente tengo un programa bastante mejorado, mas que el tuyo podría decir, el problema es que estoy eliminando unos BUG que encuentro al manejarlo de manera muy rápida (pulsar botones como loco), cuando tenga mi versión terminada final, la publicare para que me des tu opinión, cabe aclarar que fuiste tu la persona que me incentivo en hacer esto puesto a que no tenia ni la remota idea de como usar el VB2010, pero te agradezco enormemente por tus tutoriales, te dejo una imagen de mi interfaz para que me des tu opinión (de manera estética almenos)







Saludos a todos los del foro, y espero poder hacer mi aporte al igual como lo hizo META, un gran genio.


----------



## Meta

megasysfix dijo:


> Hola META, que tal, hace tiempo que no sabia nada de ti jejejeje, bueno como veo te me has adelantado demasiado en el proyecto este, yo tenia un gran problema pues programaba con VB2010 en Basic, con el tiempo aprendí de esos errores y actualmente tengo un programa bastante mejorado, mas que el tuyo podría decir, el problema es que estoy eliminando unos BUG que encuentro al manejarlo de manera muy rápida (pulsar botones como loco), cuando tenga mi versión terminada final, la publicare para que me des tu opinión, cabe aclarar que fuiste tu la persona que me incentivo en hacer esto puesto a que no tenia ni la remota idea de como usar el VB2010, pero te agradezco enormemente por tus tutoriales, te dejo una imagen de mi interfaz para que me des tu opinión (de manera estética almenos)
> 
> 
> 
> 
> 
> 
> Saludos a todos los del foro, y espero poder hacer mi aporte al igual como lo hizo META, un gran genio.



Hola:

Muy bueno, con fondo y todo. Siento decirte que tengo un proyecto grande mejor hecho con configuración completa desde hace muchísimo tiempo y no lo he publicado, incluido para enviar e-mail. Xddddddddd.

Buen trabajo.


----------



## megasysfix

Meta dijo:


> Hola:
> 
> Muy bueno, con fondo y todo. Siento decirte que tengo un proyecto grande mejor hecho con configuración completa desde hace muchísimo tiempo y no lo he publicado, incluido para enviar e-mail. Xddddddddd.
> 
> Buen trabajo.



Wooooooo, increíble, yo para enviar email tengo 3 cosas:
1.- Mi iPod
2.- Google chrome
3.- Outlook

jejejeje, el programa del que yo hablo consiste en añadir funciones que no encuentras en cualquier parte, como por ejemplo enviar un dato de x manera con una x forma a un x dispositivo, ejemplo practico enviar un dato a través de red al módem para que este lo envié a un dispositivo (diseñado por ti a que haga la función descrita por ti) conectado mediante el protocolo 802.11, no se si se entiende jejeje.

Saludos!!!!!


----------



## Meta

Por lo que entiendo, envías un dato X de una manera a otra manera, como convirtiéndolo (algo como encriptación), luego lo envía a otro dispositivo.


----------



## arthas1888

ola !!! oye men no manejas picc compiler es q la verdad asm ya esta hechado a recoger, por todo lo demas q tuto tan groso eres muy teso; pero pues chevere q tuvieras en cuenta la observacion de pasar lo de asm en c asi de esa forma tu tuto quedaria regenial, vemos pues, exitos


----------



## Meta

arthas1888 dijo:


> Hola !!! Oye men no manejas picc compiler es que la verdad asm ya esta hechado a recoger, por todo lo demás que tuto tan groso eres muy teso; pero pues chevere que tuvieras en cuenta la observacon de pasar lo de asm en c asi de esa forma tu tuto quedaria regenial, vemos pues, exitos



Hola:

El problema es que no te quieres adaptar a las circunstancias, quieres que los demás nos adepatemos a tí. Muñevete y lo conseguirás, no esperes a que los demás lo hagan por tu comodidad.

Además, el ASM lo hico alguien del libro, no yo. Es mejor aprender el ASM y luego C. Si aprender C directamente, nunca entenderás a fondo como funciona un PIc por dentro y siempre estarás lleno de dudas e inseguridades, por eso no serás un buen programador, en mi caso no lo soy, siempre seré novato y aprendiendo para toda la vida.

Saludo.


----------



## arthas1888

veo!!, pues mira la verdad yo aprendi en asm tambien pero pues con lenguajes de alto nivel como c la verdad queda rezagado el asm, q pena si te ofendi y pues si uno realmente es novato, cada dia salen nuevas y nuevas cosas, saludos estamos en contacto


----------



## Meta

Nada hombre, malos entendido.

El C se trabaja mucho más rápido. ejjejejejej.

Saludo.


----------



## arthas1888

ven una pregunta yo envio mediante puts(xxx) varios datos al recepcionarlos en visual c# se me pierden a veces datos como soluciono eso; quiero enviar al mismo tiempo con la instruccion puts(xxx) tres datos de los adc del pic y estado de los pines digitales de un puerto sino q en serio se me estan perdiendo resto de datos y pues en tu tuto los datos llegan como un string y pues la verdad no los puedo manipular independientemente; como q consejo tiennes frrente a ese problema muchas gracias men, saludos estamos en contacto se cuida


----------



## Meta

Hola:

¿Por dónde ser pierden esso datos? 

En este foro he hecho pruebas por internet y no se piderden, si se pueden perder depende de la conexión.

Un slaudo.


----------



## arthas1888

mmm pues vea mira tu  con la funcion en visual de c+ de recibidos lo q hace es tomar todos los datos q lleguen al buffer y convertirlos en string mira yo lo q quiero no es q se conviertan en cadena de cxaracteres sino tomar cada dato en una variable independiente y de tipo byte es mas o menos eso; saludos exitos en tus actividades


----------



## Meta

Lo que he hecho pasa los datos en una sola variable.

¿Quieres que con cada byte se almacene en cada byte?

http://msdn.microsoft.com/es-es/library/ch45axte(v=vs.100).aspx

Voy a investigar a ver que consigo.

¿Después de conseguir almacenar byte por byte en las variables, qué vas hacer con ella?

Saludo.


----------



## arthas1888

exactamente lo q has hecho pasa todos las datos a una solo variable; la vaina en mi proyecto es q cada variable es por ejemplo el valor de un adc, otro es el valor de entrada de un pin y asi sucesivamente y si todo se queda en una sola variable es muy dificil manipular por distinto cada una entonces lo q quiero es q cada una sea una variable distinta y se guarde en un byte[] recibido; con eso  si llegan datos cada byte va a quedar almacenada en recibido[0], recibido[1] y asi sucesivamnete y con eso puedo tomar los datros y ejecutarlos independientemente... muchas gracias por tus atenciones exitos!!!!! si quieres te envio lo q tengo haber .....saludos


----------



## Meta

Hola:

Deja investigar, lo  haré con C#. Antes que nada, dime los datos como los quieres recoger, síncrona, asíncrona, por tramas de bytes.......... 9600 baudios, bits de stop....

Saludo.


----------



## arthas1888

pues mira este el codigo en c del pic!!
espero lo entiendas q pena no describirlo, la idea es q siempre esta enviando datos a traves del buffer mediante el byte envia[]  como datos de los adc y a la vez toma datos q le envian por el puerto mediante caracteres y decide q hacer entonces modifica los pwm o salidas digitales eso en concreto es la vaina,,
muchas gracias Meta por tu ayuda chevere q otra persona se interezca en las demas a eso le llamo sacrificio por la humanidad te cuidas exitos estmos en contacto......

#include <16F873A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#byte puerto_b=6
#use RS232(BAUD=9600, BITS=8 ,PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
#use fast_io(b) 


main() {
float l;
char  recibe[2], envia[8];

int8 d, b, k;
int8    valorPWM2=0, valor_adc_1, valor_adc_2;
set_tris_b(0xFF);
set_tris_b(0x00);//puerto B como salida
setup_adc_ports(AN0_TO_AN2);                                        // Configura canales usados por el ADC.
setup_adc(ADC_CLOCK_internal); 
setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);
   setup_timer_2(T2_DIV_BY_4, 250, 1);
   puerto_b=0;
   d=50;

while(true){
if(kbhit())  //prueba si a llegado un caracter
      {

recibe[0]=getc();
if(recibe[0]=='a'){if(d==100){d=100;} if(d<100){d=d+1;}l=d;envia[0]=d;
b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='b'){if(d==0){d=0;} if(d>0) {d=d-1;}l=d;envia[0]=d;
delay_ms(50);b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='c'){output_toggle(PIN_B0);}
if(recibe[0]=='d'){output_toggle(PIN_B1);}
if(recibe[0]!='d'&&recibe[0]!='a'&&recibe[0]!='b'&&recibe[0]!='c'&&recibe[0]!='e'){valorPWM2=recibe[0];set_pwm2_duty(valorPWM2);}
if(recibe[0]=='e'){if(input_state(pin_a0)==0x01){delay_ms(20); envia[1]='a';}else{envia[1]='b';}}
if(recibe[0]=='f'){if(input_state(pin_a1)==0x01){delay_ms(20); envia[2]='a';}else{envia[2]='b';}}
set_adc_channel(0);                                 // Seleccionamos el canal 0 y comenzamos a leer.
delay_us(10);                                       // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_1 = read_adc();
set_adc_channel(1);                                 // Seleccionamos el canal 1 y comenzamos a leer.
delay_us(10);                                       // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_2 = read_adc();
envia[3]=valor_adc_1 ;
envia[4]=valor_adc_2 ;
puts(envia);
}
}
}


----------



## Meta

pero el problema cual seria ?
 porque alli comentas lo que aparentemente tienes, pero no el problema o lo que quieres conseguir
 o es esta captura de byte desde el puerto lo que hace falta implementar ?
  imagino utilizar la funcionalidad del namespace System.IO.Ports quizas la clase  SerialPort (Clase)
  estas usando el evento  DataReceived ?
   info adicional

SerialPort (RS-232 Serial COM Port)  in C# .NET - #region Coad's Code


Serial Communication using C#


Serial Port Communication in C#


----------



## arthas1888

mira lo q pasa es que cuando recibo los datos en visual c# llega todo en una sola cadena todos los datos; osea toda la cadena envia; lo q quiero es q cuando lleguen se puedan separa de nuevo y tome los datos independientemente, que vuelva y aparezca envia[0], envia[1].....envia[4] con el fin de manipular cada uno y poderlos modificar o hacer lo q quiera yo...

a groso modo esto tengo en c# lo q pasa es q no llegan los datos cmo debe ser


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;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        List<byte> recibido = new List<byte>();
        string dato; 
        string [] dato2= new string[8];
        float t;
        uint ADCValue1 = 0;
        uint ADCValue2 = 0;

        byte[] buffer = new byte[16];


        bool inicioClick = false;

        public Form1()
        {
            InitializeComponent();
            deshabilita_controles();
            richTextBox1.Text = "\npresione el boton de conectar puerto serial antes de enviar otro comando";
            if (inicioClick == false)
            {
                return;
            }
        }

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

            int bytes = serialPort1.BytesToRead;
            //if (bytes > 16) bytes = 16;
            serialPort1.Read(buffer, 0, 8);

            dato2[0] += Convert.ToString(buffer[0]);
            dato2[1] += Convert.ToString(buffer[1]);
            dato2[2] += Convert.ToString(buffer[2]);
            dato2[3] += Convert.ToString(buffer[3]);
            dato2[4] += Convert.ToString(buffer[4]);

            foreach (Byte Bite in buffer)
            {

                dato += Convert.ToString(Bite) + " ";
            }

            if (buffer[1] ==0x61 ) { pictureBox1.BackColor = Color.Yellow; }
            if (buffer[1] == 0x62) { pictureBox1.BackColor = Color.GreenYellow; }
            if (buffer[2] == 0x61) { pictureBox2.BackColor = Color.Yellow; }
            if (buffer[2] == 0x62) { pictureBox2.BackColor = Color.GreenYellow; }
            ADCValue1 = (uint)buffer[3];
            ADCValue2 = (uint)buffer[4];
            // Muestra los valores en las barras de progreso.
            //progressBar1.Value = buffer[3];
            //progressBar2.Value = buffer[4];

            //dato = Convert.ToString(buffer[0]);



        }

        private void button1_Click(object sender, EventArgs e)
        {

            serialPort1.Open();
            recibido.Clear();
            inicioClick = true;
            habilita_controles();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x61; //ASCII letra "a".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            dato = "";
            resetea();



        }


        private void timer1_Tick(object sender, EventArgs e)
        {

            richTextBox1.Text = "           el pwm1 esta al: " + dato2[0] + " %\n           el pwm2 esta al: " + t + " %" + "\n           el adc1 esta al: " + dato2[3] + "\n           el adc2 esta al: " + dato2[4];


        }

        private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            byte[] miBuffer = new byte[1];

            // Luego enviamos los datos 
            // del duty_cicle del PWM1.

            miBuffer[0] = Convert.ToByte(pwm.Value);
            serialPort1.Write(miBuffer, 0, miBuffer.Length);
            t = ((float)pwm.Value * 100)/250;
            resetea();

        }

        private void button3_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x62; //ASCII letra "b".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            resetea();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x64; //ASCII letra "d".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            richTextBox2.Text = "           cambio estado pin b1+\nla entrada en bytes es: " + dato;
            resetea();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x63; //ASCII letra "c".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            richTextBox2.Text = "           cambio estado pin b0"+"\nla entrada en bytes es: " + dato;
            resetea();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = new byte[1];
            mBuffer[0] = 0x65; //ASCII letra "e".
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
            resetea();
        }
        private void habilita_controles()
        {

            // Habilita salidas digitales.
            button2.Enabled = true;
            button3.Enabled = true;
            button4.Enabled = true;
            button5.Enabled = true;
            button6.Enabled = true;

            // Habilita controles PWM.
            pwm.Enabled = true;


            // Habilita entradas digitales.

            timer1.Enabled = true;
            pictureBox1.Enabled = true;
            pictureBox1.BackColor = Color.GreenYellow;
            pictureBox2.Enabled = true;
            pictureBox2.BackColor = Color.GreenYellow;

        }

        private void deshabilita_controles()
        {
            // deshabilita salidas digitales.
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            button5.Enabled = false;
            button6.Enabled = false;

            // deshabilita controles PWM.
            pwm.Enabled = false;
            timer1.Enabled = false;

            // deshabilita entradas digitales.

            pictureBox1.Enabled = false;
            pictureBox1.BackColor = Color.Gray;
            pictureBox2.Enabled = false;
            pictureBox2.BackColor = Color.Gray;


        }

        private void button7_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            recibido.Clear();
            inicioClick = false;
            deshabilita_controles();
        }
        private void resetea()
        {
            dato = "";
            dato2[0] = ""; dato2[1] = ""; dato2[2] = ""; dato2[3] = ""; dato2[4] = ""; 
        }
    }
}
saludos te cuidas estamos en contacto y en el picc es el siguiente:
#include <16F873A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#byte puerto_b=6
#use RS232(BAUD=9600, BITS=8 ,PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
#use fast_io(b) 


main() {
float l;
char recibe[2], envia[8];

int8 d, b, k;
int8 valorPWM2=0, valor_adc_1, valor_adc_2;

set_tris_b(0xf0);//puerto B como salida y entrada
setup_adc_ports(all_analog); // Configura canales usados por el ADC.
setup_adc(ADC_CLOCK_internal); 
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 250, 1);
puerto_b=0;
d=50;

while(true){
if(kbhit()) //prueba si a llegado un caracter
{

recibe[0]=getc();
if(recibe[0]=='a'){if(d==100){d=100;} if(d<100){d=d+1;}l=d;envia[0]=d;
b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='b'){if(d==0){d=0;} if(d>0) {d=d-1;}l=d;envia[0]=d;
delay_ms(50);b=d*2.5;set_pwm1_duty(b);}
if(recibe[0]=='c'){output_toggle(PIN_B0);}
if(recibe[0]=='d'){output_toggle(PIN_B1);}
if(recibe[0]!='d'&&recibe[0]!='a'&&recibe[0]!='b'&&recibe[0]!='c'&&recibe[0]!='e'){valorPWM2=recibe[0];set_pwm2_duty(valorPWM2);}
if(recibe[0]=='e'){if(input_state(pin_b4)==0x01){delay_ms(20); envia[1]='a';}else{envia[1]='b';}}
if(recibe[0]=='e'){if(input_state(pin_b5)==0x01){delay_ms(20); envia[2]='a';}else{envia[2]='b';}}
set_adc_channel(0); // Seleccionamos el canal 0 y comenzamos a leer.
delay_us(10); // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_1 = read_adc();
set_adc_channel(1); // Seleccionamos el canal 1 y comenzamos a leer.
delay_us(10); // Esperamos un tiempo para estabalizar el dato leido.
valor_adc_2 = read_adc();
envia[3]=valor_adc_1 ;
envia[4]=valor_adc_2 ;
puts(envia);
delay_ms(100);
}

}
}

ahora si te cuidas estamos hablando vemos pues si me puedes ayudar te lo agradeceria...



miara aqui te envio lo q tengo tanto en visual c# como en picc ahi creo q con eso te daras cuenta de lo q pasa... espero me ayudes Meta te cuidas saludos estamos en contacto

no le pongas cuidado a todo ese codigo q tenvie mas bien ponle cuidado al .rar ahi sabras lo q quiero hacer y cual es mi problema muchas gracias por todo Meta,,,,

un saludo


----------



## Meta

Deja mirar el código.


----------



## arthas1888

oks gracias fijate solo del .rar hay esta todo estamos en contacto espero tu respuesta
gracias por todo 
exitos!!!


----------



## Meta

Hola:

Para los que me envían mensajes privados, se los dejo aquí.

Comunicación puerto serie y PIC en Visual C# y comunicación bajo Visual C++ y Visual Basic.






Un saludo.


----------



## jorgerive

la informacion es muy buena gracias


----------



## Meta

Hola:

Estoy con un nuevo proyecto, pero con Arduino.






En un mes presentaré algo con C#, VB, C++ y posiblemente Java incluido. Luego con Raspberry Pi 2 mejor que las shield de red.

Saludo.


----------



## EINNER C

Buen día,

hoy quiero pedir su colaboración acerca de realizar en visual basic.net CRC 16 Modbus, si tienen algun ejemplo les agradezco,

Gracias


----------



## Meta

Hola:







Tengo el tutorial más del 50 % hecho, por ahora hecho completo la parte de Visual C# para encender y apagar un Led con Arduino y recibir mensajes a PDF y XPS. También acabado en Visual Basic .net, Visual C++.

Me falta WPF de C# a pesar que lo tengo acbado y funcionando, aún no lo he incluido en el tutorial porque estoy con VB 6 haber si me sale algo. También me falta WPF VB .net, Java me falta solo la entrega de leer datos de texto y los trels lenguajes en modo consola.



EINNER C dijo:


> Buen día,
> 
> hoy quiero pedir su colaboración acerca de realizar en visual basic.net CRC 16 Modbus, si tienen algun ejemplo les agradezco,
> 
> Gracias



Si tuviera un CRC 16 Modbus hago ejemplos con todos los lenguajes.

Aquí les dejo el programa principal, la versión 3.00 (Alfa), solo eldiseño de la interfaz, que puede leer entradas y salidas.









Cuando lo acabe, lo presnetaré

Puedes aportar ideas para esta interfaz y quedar muy amigable para todos. 

Gracias por todo y sigo en este mismo momento trabajando.


----------



## Finskey

Meta te hago una consulta, porque decidiste trabajar con arduino?? Y no con micros de microchip? Me he armado un pinguino 4550 el cual pienso correrlo con el bootloader mi microchip. Que opinas sobre este mismo? Saludos.

Edit: Yo tambien realize una interfaz rs232, aunque no le di tanta importancia al soft, lo hice con VB6 y las imagenes y datos se encuentran en este hilo: https://www.forosdeelectronica.com/f26/puerto-serial-visual-basic-1311/index10.html


----------



## COSMICO

Hey Meta.
Gracias como simepre, espero ese gran tutorial, como los anteriores que lograste


----------



## Meta

Hola @Finskey:

He pasado a Arduino por pura curiosidad y me cansé del asm en grandes proyectos. Con Arduino hago lo que quiero en muy poco tiempo. A pesar que estoy en estos momentos con Arduino, no abandono los PIC ni loco. 

Repito. No abandono los PIC ni loco. Que sepas, desde hace años tengo en asm para estos PIC16F886/887, PIC18F2550/4550 controlando el puerto serie. Cuando acabe con Arduino que estoy más motivado, vuelvo a presentar tutoriales a mi estilo, que también estoy motivado. 

Es más, tengo intenciones de tocar Arduino y PIC juntos si llegara hacer falta.

_Y si, si le doy importancia crear una interfaz. Desde el 2008 apenas había gente que lo hacían, y los que lo hacían no era en .net. Lo aprendí hacer, hice mi propio tutorial y finalmente lo adapté al público. Hay otros tutoriales que han surgido otros tutoriales que se nota que vino del mio como este que no ha cambiado ni el nombre de las variables y tampoco las tramas de bytes en la página 12 de 55 frente al mío de la pagina 157 de 510. Xdddddddddddddd. Me he enterado porque lo encuentro por casualidad o simplemente me dicen que me plagian, pero eso no es plagiar, es copiarse, palgiar es decir que mi tutorial del PDF que creé sea de otra persona._

Si hicieste esto, estás hecho un profesional.
Ver imagen.

Para el próximo tutorial que estoy haciendo, precisamente necesito ayyuda con VB 6, como crear un botón, configurar puerto serie, enviar tramas de bytes por puerto serie, recibir tramas de bytes también en un textBox. Si te interesa colaborar, eres muy bien venido, con entender lo que pido, haré un buen tutorial incluido VB 6 también.

En este mismo momento que estoy escribiendo, estoy con Java, ya me funciona todo y me falta ampliar el tutorial sobre entrada de texto por puerto serie. Les dejo la primera parte de Java con NetBeans 8. 

Buenas @COSMICO:

Claro que si. Le he pasado una muestra de más de 200 páginas el que me ayudó con Java sobre leer puertos serie y se quedó plasmado.

Tengo hecho en el tutorial:
Visual C# 2013.
Visual Basic 2013.
Visual C++ 2013.
WPF C#.

Me falta acabar:
WPF VB 2013.
Java.
C#, VB .net y C++ 2013 en modo consola. Esto lo hago como último y como curiosidad, preparado para controlar 8 relés.
Extras para ampliar conocimientos de hacer una buena interfaz solo en C#.
Todo lo demás ya son electrónica, fotos, vídeos, enlaces...

Sigo con le tutorial, luego sigo con la interfaz, y en ella, cada cierto tiempo subo imágenes para que den sugerencia para llevarlo a buen camino.

Llevo casi un mes con el tutorial, es un poco grande y genérico. El Java me costó mucho tiempo. VB 6 me no encuentro información detallada posible para hacer pequeñas pruebas y entenderlo, por eso necesito ayuda para no pegarme media vida.






Gracias por comentar.


----------



## EINNER C

Buen día,

Adjunto el código que utilice para la realización del CRC16 Modbus por si es de ayuda para alguien, esto con los datos de tipo BYTE, y no string.



		Código:
	

#Region "Calculo CRC16 ModBus"
    Public Function CRC16(ByVal data() As Byte) As Int64

        Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC register
        Dim CL As Byte, CH As Byte 'Polynomial codes & HA001
        Dim SaveHi As Byte, SaveLo As Byte
        Dim i As Integer
        Dim Flag As Integer

        CRC16Lo = &HFF '&HFF
        CRC16Hi = &HFF '&HFF
        CL = &H1
        CH = &HA0

        For i = 0 To LenghtDatos
            CRC16Lo = CRC16Lo Xor data(i) 'for each data and CRC register XOR

            For Flag = 0 To 7
                SaveHi = CRC16Hi
                SaveLo = CRC16Lo
                CRC16Hi = CRC16Hi \ 2 'peak shift to the right one
                CRC16Lo = CRC16Lo \ 2 'shift to the right a low

                If ((SaveHi And &H1) = &H1) Then 'If the high byte last one for a
                    CRC16Lo = CRC16Lo Or &H80 'then the low byte shifted to the right after the meeting in front of a
                End If 'Otherwise, auto-fill 0

                If ((SaveLo And &H1) = &H1) Then 'If the LSB is 1, then XOR with the polynomial codes
                    CRC16Hi = CRC16Hi Xor CH
                    CRC16Lo = CRC16Lo Xor CL
                End If
            Next Flag
        Next i

        ReturnData(0) = CRC16Hi 'CRC high
        ReturnData(1) = CRC16Lo 'CRC low

    End Function
#End Region


La variable LenghtDatos es el tamaño en byte del array a analizar.


----------



## EINNER C

Buen día,

Comparto el código para utilización de 2 usart por hardware con interrupciones y funcionando correctamente, ya que busque bastante y no encontré ejemplos o ayuda sobre el tema, una particularidad por la que no me funcionaba bn y me quemo la cabeza un poco es que el pin C6, no se declaraba como salida y por ende no transmitía por dicho puerto, sin mas agrego el código funcionando perfecto, Gracias

estoy atento a correcciones, dudas o sugerencias,



		Código:
	

 #include <18F26J50.h>
  //#ifdefined(_PCH_)
  #device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                      //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPUDIV              

#use delay(clock=20000000)       //Utilizo frecuencia de 12Mhz la del oscilador

#pin_select  U2RX=PIN_B7
#pin_select  U2TX=PIN_B6

#use rs232(baud=9600,parity=N,xmit=PIN_b6,rcv=PIN_b7,bits=8,stream=AppPC) //Puerto1
#use rs232(baud=9600,parity=N,xmit=PIN_c6,rcv=PIN_c7,bits=8,stream=Campo)//Puerto2

  #include <stdlib.h>
  #include <string.h>
  #use standard_io(a)
  #use standard_io(b)
  #use standard_io(c)
  #define PIN_ON  output_high
  #define PIN_OFF output_low

//*************************************************************************************************************************************
//--------------------------------------variables globales
//************************************************************************************************************************************* 
int i,lenghtdatos;
int8 cbuff[255];   // Buffer de recepcion de datos serie

//************************************************************************************************************************************* 
//--------------------------------------Interrupcion serie
//************************************************************************************************************************************* 
#INT_RDA
void  Recepcion(void)   //
   {
   lenghtdatos=getc(Campo);
   for(i=0;i<=lenghtdatos;i++)
      {cbuff[i]=getc(Campo);}
       fputc(43,Campo);
   }
   
   #INT_RDA2
void  Recep(void)   //
   {
   lenghtdatos=getc(AppPC);
   for(i=0;i<=lenghtdatos;i++)
      {cbuff[i]=getc(AppPC);}
   fputc(43,AppPC);

   }
//************************************************************************************************************************************* 
//------------------------------------Programa Principal
//************************************************************************************************************************************* 
void main()
{  
   SET_TRIS_C(0B10111111);
   enable_interrupts(INT_RDA);     // Habilita la interrupcion serial
   enable_interrupts(INT_RDA2);     // Habilita la interrupcion serial
   enable_interrupts(GLOBAL);       // Habilito todas las interrupciones

//------------------------------------------------MI PROGRAMA!!-------------------------------------------------------------------
     
  while (true)               // bucle infinito 
   { 
        fputs("MensajePuerto1",Campo);
        fputs("MensajePuerto2",AppPC);
        delay_ms(3000);
   }
}


----------



## Meta

Buenas:

¿Qué tal gente del foro?

Con el nuevo .Net 5.0 bajo Visual C#, ha cambiado mucho a la hora de crear Interfaz que comunique con el puerto serie. Se usa ahora mismo Visual Studio community 2.019 gratuino.

Dejo un mini tutorial sobre envío de datos por el puerto serie.

*Paso 1.*
Usaremos Windows Form con .Net 5.0. Arrastramos dos botones al formulario.


*Paso 2.*
Esta parte ha cambiado, ahora hay que añadir referencia del System.IO.Ports, a parte de añadirlo también en using. Enel Explorador de soluciones, vete a Dependencias y con el segundo botón, Administrar paquetes NuGet.

*Paso 3.*
En buscar poner serialPort, que sea .NET que es el oficial, pulsa el botón instalar.



*Paso 4.*
Te pondrá un aviso que habrá cambios. Simplemente aceptas y ya lo tienes.


*Código fuente C#:*



		C#:
	

using System;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports; // No olvidar y añadir en referencia.

namespace Puerto_serie_con_Net_50
{
    public partial class Form1 : Form
    {
        SerialPort serialPort1 = new SerialPort();

        public Form1()
        {
            InitializeComponent();
            Configuracion();
        }

        void Configuracion()
        {
            // Configuramos el puerto serie.
            serialPort1.BaudRate = 9600;            // Baudios. 115200
            serialPort1.PortName = "COM2";          // Nombre del puerto serie.
            serialPort1.Parity = Parity.None;       // Sin paridad.
            serialPort1.DataBits = 8;               // 8 Bits.
            serialPort1.StopBits = StopBits.Two;    // Bits de parada.
            serialPort1.ReadBufferSize = 4096;      // Tamaño del Búffer de lectura en Bytes.
            serialPort1.WriteBufferSize = 2048;     // Tamaño del Búffer de escritura en Bytes.
            serialPort1.ReadTimeout = 500;
            serialPort1.WriteTimeout = 500;
            serialPort1.DtrEnable = false;
            serialPort1.RtsEnable = false;

            // Abrir puerto mientras se ejecuta la palicación.
            if (!serialPort1.IsOpen)
            {
                try
                {
                    serialPort1.Open(); // Abrir puerto.
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }


        private void button_ON_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led_ON");
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_OFF_Click(object sender, EventArgs e)
        {
            // Variable tipo arreglo codificado en ASCII.
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led_OFF");

            // Envía en la variable mBuffer "Led_OFF" al puerto serie.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        // Al cerrar la ventana o el formulario
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                serialPort1.Close(); // Cerrar puerto.
            }

            catch (Exception error)
            {
                MessageBox.Show(error.Message, "Aviso:",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}


Por ahora y parece que .Net 5.x y el futuro .Net 6.x y en adelante, no incluirá el componente serialPort para arrastrarlo al formulario. Ahora es hacerlo todo a códigos.

Gracias por tu tiempo.


----------

