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

Temas similares

01/03/2012 #1
Moderador

Avatar de D@rkbytes

Interfaz RS232 PIC PC (Proyecto Completo VB6)
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 envió 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.


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 mas 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 y 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 utilice la clásica interfaz a transistores.
Consiguiendo buena comunicación entre el PIC y la PC
Pero 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 didactico, les sea de utilidad.
Suerte y hasta luego.
Atte. D@rkbytes
20/04/2012 #2

Avatar de Meta

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.
21/04/2012 #3
Moderador

Avatar de D@rkbytes

Meta dijo: Ver Mensaje
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.
21/04/2012 #4

Avatar de Meta

Hola:

Ahora loentiendo, no había caído. Está en la tabla ASCII y si lo uso también en mis proyectos del puerto serie.


http://www.asciitable.com/

Saludo.
30/04/2012 #5
Moderador

Avatar de D@rkbytes

Interfaz RS232 VB6 v2.0
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.


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
Imágenes Adjuntas
Tipo de Archivo: gif SPCTRLv2.gif (19,2 KB (Kilobytes), 2965 visitas)
Archivos Adjuntos
Tipo de Archivo: rar NEW PICSIM.rar (1,20 MB (Megabytes), 1017 visitas)
Tipo de Archivo: rar PIC Pin Decoder.rar (8,9 KB (Kilobytes), 685 visitas)
Tipo de Archivo: rar Termometro LM35.rar (59,8 KB (Kilobytes), 911 visitas)
Tipo de Archivo: rar Interfaz VB6 v2.0.rar (275,4 KB (Kilobytes), 1406 visitas)
Tipo de Archivo: rar SPBRG Calc.rar (10,4 KB (Kilobytes), 597 visitas)
01/05/2012 #6

Avatar de Meta

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.
01/05/2012 #7
Moderador

Avatar de D@rkbytes

Meta dijo: Ver Mensaje
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.
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.
04/05/2012 #8

Avatar de Meta

Aquí hay ejemplso de códigos, te lo peudo pasar.
http://www.pic16f84a.org/proteus.htm...us_Capitulo_28

También tengo ejemplos del LM35 y DS18B20 para el 16F886 tanto en C como en ASM.

Informándome por injternet desde hace un tiempo, me comentaron que el DS18B20 es más preciso y estable que el LM35, sobre todo estabilidad.
12/06/2012 #9


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!!!
Archivos Adjuntos
Tipo de Archivo: rar PROYECTO.rar (35,1 KB (Kilobytes), 467 visitas)
12/06/2012 #10
Moderador

Avatar de D@rkbytes

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.
Archivos Adjuntos
Tipo de Archivo: rar harrito89.rar (23,1 KB (Kilobytes), 390 visitas)
Tipo de Archivo: txt log.txt (1,4 KB (Kilobytes), 227 visitas)
12/06/2012 #11


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!!
Archivos Adjuntos
Tipo de Archivo: rar harrito89.rar (39,3 KB (Kilobytes), 215 visitas)
13/06/2012 #12


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!!!!!!
13/06/2012 #13
Moderador

Avatar de D@rkbytes

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.
13/06/2012 #14


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!!
15/06/2012 #15
Moderador

Avatar de D@rkbytes

harrito89 dijo: Ver Mensaje
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.
Archivos Adjuntos
Tipo de Archivo: rar Cronómetro.rar (16,1 KB (Kilobytes), 302 visitas)
Tipo de Archivo: rar TMR1.rar (14,8 KB (Kilobytes), 210 visitas)
15/06/2012 #16


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!!
07/07/2012 #17

Avatar de carlitosferar

serout x 2
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.

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.
Archivos Adjuntos
Tipo de Archivo: rar RELAYS.rar (58,1 KB (Kilobytes), 237 visitas)
Tipo de Archivo: rar COMU SERIAL PIC A PIC.rar (24,7 KB (Kilobytes), 294 visitas)
07/07/2012 #18
Moderador

Avatar de D@rkbytes

Hola carlitosferar.
carlitosferar dijo: Ver Mensaje
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.
Ya le quitaste varios bits a mi nick.
carlitosferar dijo: Ver Mensaje
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 TxD2

Esperamos tu proyecto.

Suerte.
08/07/2012 #19

Avatar de carlitosferar

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

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

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.
Imágenes Adjuntas
Tipo de Archivo: jpg Salida RF abierta .jpg (134,4 KB (Kilobytes), 190 visitas)
Tipo de Archivo: jpg Cerrada la salida RF .jpg (136,7 KB (Kilobytes), 140 visitas)
Tipo de Archivo: jpg MPLAB M_S.jpg (123,8 KB (Kilobytes), 126 visitas)
Archivos Adjuntos
Tipo de Archivo: rar Proyecto Darle de comer al Gato.rar (64,2 KB (Kilobytes), 195 visitas)
Tipo de Archivo: rar Imágenes.rar (672,8 KB (Kilobytes), 215 visitas)
08/07/2012 #20
Moderador

Avatar de D@rkbytes

carlitosferar dijo: Ver Mensaje
Gracias Darkbytes por responder.
Y perdón por el error en el nick, la próxima te llamo Darkword para compensar los bits robados.
Saludos, dejemoslo en D@rkbytes
carlitosferar dijo: Ver Mensaje
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.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

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

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

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

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