Interfaz RS232 PIC PC (Proyecto Completo VB6)

D@rkbytes

Moderador general
En esta ocasión les traigo un proyecto completo de interfaz RS232 escrito en VB6
El programa consta del control de las principales características del puerto serial.
Permite el envío de datos en dos modos. (Decimal y Texto)
Recibe los datos seriales en tres modos. (Binario, Decimal y Texto)
Cuenta con una interfaz de usuario amigable, fácil de usar y configurar.

Esta es la ventana principal del programa.

attachment.php


Este proyecto fue inicialmente realizado para el control de 8 relevadores conectados al puerto B de un PIC16F628A, y con el tiempo le fui agregando más cosas.
El aporte no estaría completo si no incluyera el respectivo código fuente del programa, por lo cual adjunto el proyecto con su código fuente en VB6, algunos ejemplos y esquemas para su uso.
Los proyectos están realizados en PIC BASIC PRO y también incluí uno en ensamblador. (No podía faltar)
Cada proyecto contiene su respectiva simulación en Proteus y su esquema para los que no lo tienen.
Incluyo el programa compilado (EXE) al igual que los archivos (HEX) y su código fuente.

El programa interfaz usa el control ActiveX MsComm32.ocx, el cual también adjunto para los que no tengan Visual Studio 6 Instalado.
Este componente ActiveX debe ser registrado con el programa REGSVR32.EXE que se encuentra en el directorio de sistema de Windows o con otro programa que registre componentes ActiveX.

Para la adaptación de los niveles RS232 utilicé la clásica interfaz a transistores, consiguiendo buena comunicación entre el PIC y la PC
Para mejores resultados es recomendable usar un MAX232

Nota: Este programa fue probado en Windows XP, Vista y Windows 7

Bien, espero que este proyecto didáctico les sea de utilidad.
Suerte y hasta luego. :apreton:
Atte. D@rkbytes
 

Adjuntos

  • Interfaz_VB6.gif
    Interfaz_VB6.gif
    17.8 KB · Visitas: 3,750
  • Manejo Puertos.rar
    33.3 KB · Visitas: 1,093
  • Interfaz VB6.rar
    222.7 KB · Visitas: 1,269
  • PICSIM.rar
    216.5 KB · Visitas: 1,172
  • MSCOMM32.rar
    44.4 KB · Visitas: 249
Hola:

¿Qué es eso de "Enviar CR"?

Para completar, añadiría el RTS CTS, para saber cuando un dispositivo está conectado o no.
http://es.wikipedia.org/wiki/RS-232

Un saludo.
Envíar un CR es envíar un Car Return (Retorno de Carro)
Lo usé para que al recibir los mensajes no se junten uno después de otro.
Envío un 13 (Car Return) seguido de un 10 (Line Feed) es como en VB hacer vbCrLf
Para pasar al siguiente renglón de un texto.

En los ejemplos que realice no es necesario usar el RTS ni el CTS. Pero la interfaz los puede activar.
Ya es cosa de cada uno agregar estas funciones de detección al código si las requieren. ;)
Saludos.
 
Ahora la versión 2 de esta interfaz RS232 en VB6.

Mejoré, añadí algunos algoritmos y la compacté un poco mas, cambiando también el diseño.

Esta es la nueva apariencia de la interfaz.
attachment.php


Escribí también algunos programas nuevos en PBP para experimentar con la interfaz.
Algunos de los programas los escribí con MicroCode Studio v5.0
Utilizando el nuevo compilador PICBASIC PRO v3.0
Pero nada impide compilarlos con PBP2 modificando la cabecera FSR, que incluí en cada programa.

Algunos de los nuevos ejemplos son...
.- Un Expansor de puertos para el PIC12F675 con el 74LS164
.- Envío de mensajes a un LCD 16x2 vía serial. (Lectura y escritura del LCD)
.- Un recuperador del valor del registro OSCCAL para el 12F675
.- Un calculador para el registro SPBRG en los PIC16
.- Un decodificador de estado de los pins en los PIC. (Interfaz incluida)
.- Termómetros usando el ADC del 12F675 y el 16F88 con el Sensor LM35. (Interfaz incluida)
Y algunos otros programas extra.

Como siempre, espero que estos aportes sean de ayuda,
para los que quieran experimentar con el casi extinto puerto serial de la PC.

Nota: Todos los ejemplos y proyectos incluyen el código fuente.
Más su respectivo diagrama esquemático y simulación en ISIS.

Cualquier duda y comentario quedo a sus ordenes.

Suerte y hasta luego.

Atte. D@rkbytes :)
 

Adjuntos

  • SPCTRLv2.gif
    SPCTRLv2.gif
    19.2 KB · Visitas: 3,585
  • NEW PICSIM.rar
    1.2 MB · Visitas: 1,110
  • PIC Pin Decoder.rar
    8.9 KB · Visitas: 769
  • Termometro LM35.rar
    59.8 KB · Visitas: 1,007
  • Interfaz VB6 v2.0.rar
    275.4 KB · Visitas: 1,524
  • SPBRG Calc.rar
    10.4 KB · Visitas: 682
Última edición por un moderador:
Buen trabajo. Estás hecho un profesional.

¿Haz probado un sensor digital como el DS1820? Cada vez está en forma junto al LM35 analógico.

Saludo.
 
Buen trabajo. Estás hecho un profesional.

¿Haz probado un sensor digital como el DS1820? Cada vez está en forma junto al LM35 analógico.

Saludo.
Saludos Meta.
Pues no, no he experimentado con ese sensor.
Vi que por acá en México venden el DS18B20 con encapsulado TO92.
Y que se trata de un sensor de temperatura del tipo One-Wire.
En cuanto tenga un tiempo iré a comprarlo y experimentare con el.
Y si logro algo posteare los resultados del proyecto.

Como se trata de una comunicación digital y no analógica como el LM35,
espero que los resultados de la lectura sean mas exactos.
Ya que con el LM35 no pude conseguir una lectura precisa. Muy aproximada eso si. ;)
Probé configurando el ADC a 10 Bits y a 8 Bits.
Pero no obtuve mucha diferencia, así que lo deje en 8 Bits,
y use esta conversión: Temp = (AD_Value * 150 / 77)
Donde 150 es la temperatura máxima de sensor LM35 y 77 la lectura del ADC a 150°C.
Esa fue la mejor forma de aproximarme al valor del sensor.

Un dato curioso...
Estuve buscando la forma de poner el símbolo ° en el LCD y no salía. :LOL:
Ya que antes de hacerlo vía serial, lo hice en protoboard con un LCD.
Buscando encontré dos formas de hacerlo.
Una es escribiendo el símbolo ascii ß seguido de la C
Y la otra escribiendo su valor hex. (DF) dec. (223) y luego la C
Con eso logre un cuadrito en el LCD representando el símbolo de grados.

Bien, gracias por los comentarios y a seguir experimentando.

Suerte y hasta luego.
 
hola dark,

soy novato en la utilización del VB6 y poseo algunos conocimientos en Picbasic, pero ahora veo a los dos programas como una herramienta necesaria para el proyecto que estoy haciendo, el proyecto consite en contabilizar el tiempo perdido en el paro de una determinada maquina y el número de veces que se resetea el cronometro, esa parte ya la tengo funcionando pero el maestro me dijo que le agregara el número de paros que hace la maquina, un reloj que indique la hora en que se detuvo la maquina y la hora en que arranco nuevamente y toda esa información mostrarla en el display y transmitirla a un programa en VB6 en su defecto a una hoja de excel.

anexo codigo en Pic basic y simulación en proteus

Saludos desde Colombia!!!
 

Adjuntos

  • PROYECTO.rar
    35.1 KB · Visitas: 535
Última edición por un moderador:
Saludos harrito89.
Bien, pues estuve revisando tu código, y hay algunas cosas que modificar para que funcione bien.
Como exactamente tú sabes que es lo que tiene que hacer, eso te corresponde hacerlo tú.

Le agregue los cambios necesarios para poder enviar los datos a la interfaz.
Y la interfaz tiene la opción de guardar un log como archivo de texto.
Para poder guardar el log en un archivo de excel también se puede hacer desde VB6
Busca esa información por internet, y si no la consigues, yo la tengo por alguna carpeta.

Para usar la interfaz con tu programa, debes configurarla a 9600/N/8/1 Hanshaking: NONE
Puerto virtual COM2, ya que use el COM3 para la simulación.
Si no tienes puertos virtuales, deberás usar un puerto disponible de la PC.

Adjunto el programa con los cambios.
Cualquier duda o comentario, estoy para servirte.

Suerte.
 

Adjuntos

  • harrito89.rar
    23.1 KB · Visitas: 443
  • log.txt
    1.4 KB · Visitas: 272
Última edición:
hola dark


Disculpas por lo de las reglas del foro, gracias por tu aporte, pero no logro encontrar lo de VB6, tampoco puedo ver los datos enviados por el puerto serial, acaso se hace por hyperterminal???.

el funcionamiento del programa consiste en que apenas el relay cambia de posición activa el cronometro y suma uno en el contador de paro, los otros dos interruptores funcionan para colocar en cero el cronometro, los resets y lleva la cuenta de cuantas veces se ha reseteado el cronometro.

modifique el programa de tal manera de que cada vez que cambie el relay aumente el contador de paro, pero no logro hacerlo volverlo a cero con el interruptor que encera el contador de reset, aparte el cronometro va mas lento que antes no lo entiendo ¿por que?


cualquier duda del funcionamiento del programa me avisas

Saludos!!
 

Adjuntos

  • harrito89.rar
    39.3 KB · Visitas: 247
Última edición por un moderador:
se me olvidaba comentarte que agregando la pausa el cronometro no funciona.

tengo una duda.. se podría manejar con mas interrupciones para que no afecte al funcionamiento del cronometro, si es asi me podrías colaborar explicándome como colocarla estoy, :S con el tema de las interrupciones he buscado en la red pero nada que entiendo.

gracias!!!!!!
 
Última edición por un moderador:
Al parecer hay un error en el manejo de los registros para las interrupciones.
Y es por eso que el timer no esta funcionando como debe.
También hay algunas cosas del programa que estan mal orientadas.

Para ver el envío de datos del micro a la PC,
necesitas usar la interfaz que adjunte en el post #10 y tener puertos virtuales en tu PC.
Revisa los ejemplos que se adjuntan para que puedas ir entendiendo.
Busca por internet como crear puertos serie virtuales.
O como te mencione antes, montar el circuito en protoboard y usar un puerto de la PC.
Dejame ver que le puedo modificar y posteo el resultado.
 
gracias por tu valiosa ayuda!!!

umm, las interrupciones hasta ahora las estoy conociendo, revisare los ejemplos y descargare el emulador de puertos seriales para practicarlos. al armar el circuito en la protoboard podria q la pc envie picos de voltaje que puedan afectar al pic??, con respecto al funcionamiento del programa en la parte donde dice reloj es para agregarle un reloj q indique la hora real, no se si es posible.

revisare lo que me sugieres y estare posteando mis resultados.

saludos!!
 
gracias por tu valiosa ayuda!!!

umm, las interrupciones hasta ahora las estoy conociendo, revisare los ejemplos y descargare el emulador de puertos seriales para practicarlos. al armar el circuito en la protoboard podria q la pc envie picos de voltaje que puedan afectar al pic??, con respecto al funcionamiento del programa en la parte donde dice reloj es para agregarle un reloj q indique la hora real, no se si es posible.

revisare lo que me sugieres y estare posteando mis resultados.

saludos!!
Saludos.
Espero que ya hayas visto los ejemplos de comunicación PIC PC RS232.
Te podrás dar cuenta que use dos tipos de interfaz de adaptación de niveles RS232 a TTL
para el PIC, una con 2 transistores, y otra con el IC MAX232.
Cualquiera de los dos tipos funciona bien, pero mi preferida fue la de 2 TR NPN.
Como te mencione anteriormente, el programa tú lo tienes que realizar.
Yo en lo que te puedo ayudar es en la transmisión serial de datos del PIC a la PC o viceversa.
Ya que el tema trata de eso precisamente.
Ahora, para que vayas viendo algo acerca de como usar los timers del PIC para crear conteos,
adjunto dos ejemplos en PBP que posiblemente los puedas usar en tu programa.
también podrás ver como se puede mezclar lenguaje ensamblador en un programa de PBP.
En uno se envían los datos por medio del módulo USART del PIC hacia la PC.
Y para que tengas más conocimiento de los timers del PIC, hay varios ejemplos en el foro.
Espero que los ejemplos que he subido dentro del tema te sirvan de ayuda.

Suerte.
 

Adjuntos

  • Cronómetro.rar
    16.1 KB · Visitas: 343
  • TMR1.rar
    14.8 KB · Visitas: 252
hola!!

estuve revisando los ejemplos de comunicacion pic pc rs232, me son de gran ayuda pude comprender el tema a la perfección, pero tengo una duda, se podria pasar la señal rs232 a tcp/ip,sin necesidad de cambiar o agregar un pic adicional... ya que el puerto serial esta casi extinto.

por lo que veo en los ejemplos que acabas de adjuntar me toka modificar el programa en varios aspectos que no me habia fijado y adicionarle la transmision rs232.

buscare mas informacion en el foro

gracias men!!
 
Hola:
Como veo que aún hay gente por aquí me lanzo con una consulta.

Antes aclarar, que no estoy dando mis primeros pasos en esto de los PICs, mas bien recién estoy tratando de separar las manos de la pared.:oops:

Y ahora sí, la pregunta: ¿Se puede utilizar la instrucción SEROUT en dos pines de un mismo micro?

La situación es la siguiente: Estoy con dos proyectos de Darkbytes
El de los 8 leds, (PC/Pic _ Pic/Pc)
Y el de Serin/Serout (Pic/Pic)

Los cuales en forma individual funcionan a la perfección (Obvio)

Hardware super standad : Pic 16F628A y los clásicos modulitos de 433Mhz
Software : PBP sobre MPLAB y Proteus.

La idea era :
Del primer Pic conectado al PC (Master) enviar la información, del estado de algunos de los pins o leds, a otro Pic (Slave) vía RF.
Pero al querer Tx por otro pin un segundo “serout” (Recordemos que el primero es el retorno al PC)……Estos entran en conflicto.
He pensado en interrupciones alternativas, pero todavía no me da el bocho para implementarlas y ver que pasa.

Bueno de momento agradecería si me dicen si se puede, ya que info sobre Serin/Out hay mucha pero para este caso en particular no encuentro nada.

Un Saludo y Muchas Gracias.

PD: Muchas Gracias a Darkbytes. Su proyecto de “Interfaz” y los ejemplos adjuntos, empezaron a echar un poco de luz sobre mi desorientada ignorancia.

Dejo los zip originales.
 

Adjuntos

  • RELAYS.rar
    58.1 KB · Visitas: 277
  • COMU SERIAL PIC A PIC.rar
    24.7 KB · Visitas: 347
Última edición:
Hola carlitosferar.
PD: Muchas Gracias a Darkbites. Su proyecto de “Interfaz” y los ejemplos adjuntos, empezaron a echar un poco de luz sobre mi desorientada ignorancia.
De nada, espero les sean de ayuda estos proyectos. (y)
Ya le quitaste varios bits a mi nick. :LOL:
La idea era :
Del primer Pic conectado al PC (Master) enviar la información, del estado de algunos de los pins o leds, a otro Pic (Slave) vía RF.
Pero al querer Tx por otro pin un segundo “serout” (Recordemos que el primero es el retorno al PC)……Estos entran en conflicto.
He pensado en interrupciones alternativas, pero todavía no me da el bocho para implementarlas y ver que pasa.

Bueno de momento agradecería si me dicen si se puede, ya que info sobre Serin/Out hay mucha pero para este caso en particular no encuentro nada.

Un Saludo y Muchas Gracias.

PD: Muchas Gracias a Darkbites. Su proyecto de “Interfaz” y los ejemplos adjuntos, empezaron a echar un poco de luz sobre mi desorientada ignorancia.
La pregunta es... ¿Que llevas realizado del proyecto que pretendes, hasta ahora?
Ya que para poder ayudarte, es necesario que subas tu proyecto.
Esto hará que nos podamos dar una idea de lo que exactamente quieres hacer.
Porque los archivos que adjuntas, son ejemplos que subí anteriormente en el post #1.

Por lo mientras, te puedo decir que si puedes usar otro pin para SEROUT
No para HSEROUT porque el puerto B tiene ocupado el módulo USART.
Pero puedes declarar otra salida del puerto A y usarla como salida T:LOL:2

Esperamos tu proyecto.

Suerte.
 
Gracias Darkbytes por responder.
Y perdón por el error en el nick, la próxima te llamo Darkword para compensar los bits robados. :LOL:

No puse nada de lo mio :

1ro_ Porque no hay nada para destacar, he hecho cientos de pruebas inútiles, lo he probado hasta con dos pics Masters y nada ….......me es imposible hacer 2 tx .

2do_ Puse tus ejemplos para dejar en claro que partía de proyectos con GARANTÍA de funcionamiento.

3ro_ Todos mis intentos no van mas allá de agregar alguna/as lineas al programa original de los “Relays”.

4to_ Por todo esto (Inconsistencia del proyecto, por MI falta de conocimientos) es que no pedí ayuda con el proyecto en si, sino simplemente; saber si se podía, usar la instrucción dos veces.

5to_ Ahora que mi ego està un poco menos dolido, ya que tu respuesta coincide con lo que pensaba.
(Por eso pregunte por Serout y no por Hserout). Aunque en los tantos intentos también pensé en cambiar los puertos y hacer una y una.

Con respecto a las salidas las probé TODAS de la A.0 al A.7 y como dicen por aquí “No pasa ná”. :cabezon:

Pongo unas imágenes para que se vea cual es la idea. Su simplicidad explica porqué la había omitido antes.

Se ve claramente que en el Master, se mantiene la configuración original del poy. "Relays", y simplemente agrego una linea para prender en forma permanente un led vía RF.
Mientra que en el Slave pretendo OBLIGAR a que se prenda si o si (esto para saber si la tx se produce con éxito).

Resultado: siempre NEGATIVO incluso, muere la tx al PC cuando cierro la conexión con el módulo RF.

Este ejemplo lo hice simplificado para tratar de explicarme. Logicamente la idea es que prendan todos los leds en el Master y todos los posibles en el Slave, pero eso es para mas adelante, si logro la comunicación RF.

Por las dudas reitero: La comunicación entre SOLO dos Pics via RF me funciona perfecto; lo que no puedo es juntar los dos proyectos.

Dejo también los arch. correspondientes a MPLAP y Poteus.
Y un RAR con las imágenes con mayor resolución.

Un Saludo y Mil Gracias por la atención.:apreton:
 

Adjuntos

  • Salida RF abierta .jpg
    Salida RF abierta .jpg
    134.4 KB · Visitas: 232
  • Cerrada la salida RF .jpg
    Cerrada la salida RF .jpg
    136.7 KB · Visitas: 180
  • Proyecto Darle de comer al Gato.rar
    64.2 KB · Visitas: 237
  • Imágenes.rar
    672.8 KB · Visitas: 257
  • MPLAB M_S.jpg
    MPLAB M_S.jpg
    123.8 KB · Visitas: 157
Última edición:
Gracias Darkbytes por responder.
Y perdón por el error en el nick, la próxima te llamo Darkword para compensar los bits robados. :LOL:
Saludos, dejemoslo en D@rkbytes ;)
Por las dudas reitero: La comunicación entre SOLO dos Pics via RF me funciona perfecto; lo que no puedo es juntar los dos proyectos.
Bien, no tengo módulos de RF para realizar mejor las pruebas,
pero veamos si el proyecto que adjunto es más o menos lo que pretendes hacer.

Nota: Yo utilizo como editor MicroCode Studio, desde ahí compilo los programas para el PIC.

Suerte.
 

Adjuntos

  • Master_Slave.rar
    25.6 KB · Visitas: 234
Última edición:
Atrás
Arriba