uControl
Mayo 18, 2013, 08:01:58 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2 3   Ir Abajo
  Imprimir  
Autor Tema: Controlar entradas salidas por RS232 o conversor USB-RS232 sin micro.  (Leído 12420 veces)
0 Usuarios y 1 Visitante están viendo este tema.
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« : Marzo 07, 2011, 06:50:01 »

Esto no es un proyecto en sí, lo hice a solo fin de mostrar que uno puede controlar entradas y salidas a través de un puerto serie, o a través de un puerto USB, utilizando un converso comercial USB-RS232.

El puerto serie nos brinda tres entradas y dos salidas que pueden ser manejadas a voluntad por cualquier lenguaje en la PC.
Estas entradas y salidas en realidad fueron pensadas para ser utilizadas en el control de flujo por hardware, pero están ahí y vamos a utilizarlas.

Las entradas son:
CD (Carrier Detect) pin 1
DSR (Data Set Ready) pin 6
CTS (Clear to Send) pin 8

Y las salidas son:
DTR (Data Terminal Ready) pin 4
RTS (Request to Send) pin 7

1º circuito: Circuito de prueba con 3 entradas y dos salidas

El circuito de prueba es de lo mas sencillo, consta de 3 pulsadores, 2 LED, 5 resistencias, una batería de 9V y el conector DB9


Este circuito lo podemos conectar directamente a un com de la PC o a un puerto USB a través de un conversor USB-RS232, como se vé en la imagen:


Dejo un par de fotos del programa de prueba ejecutándose en la PC.




El código en VB6 es el siguiente:
Código:
Option Explicit

Private Sub Command2_Click()
    If MSComm1.RTSEnable = True Then
        MSComm1.RTSEnable = False
        Command2.Caption = "Prender LED2"
    Else
        MSComm1.RTSEnable = True
        Command2.Caption = "Apagar LED2"
    End If
End Sub

Private Sub Command1_Click()
    If MSComm1.DTREnable = True Then
        MSComm1.DTREnable = False
        Command1.Caption = "Prender LED1"
    Else
        MSComm1.DTREnable = True
        Command1.Caption = "Apagar LED1"
    End If
End Sub

Sub leer_entradas()
    Do
        DoEvents
        If MSComm1.CTSHolding = False Then
            Shape1.FillColor = QBColor(2)
        Else
            Shape1.FillColor = QBColor(10)
          
        End If
        If MSComm1.DSRHolding = False Then
            Shape2.FillColor = QBColor(2)
        Else
            Shape2.FillColor = QBColor(10)
          
        End If
        If MSComm1.CDHolding = False Then
            Shape3.FillColor = QBColor(2)
        Else
            Shape3.FillColor = QBColor(10)
          
        End If
    Loop
End Sub

Private Sub Form_Activate()
    If App.PrevInstance = True Then
        MsgBox " El programa ya está corriendo ", vbCritical + vbSystemModal
        End
    End If
    Form1.Caption = "On/Off Serial"
    MSComm1.CommPort = 3
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.PortOpen = True
    MSComm1.DTREnable = False
    MSComm1.RTSEnable = False
    Command1.Caption = "Prender LED1"
    Command2.Caption = "Prender LED2"
    Call leer_entradas
End Sub


Private Sub Form_Unload(Cancel As Integer)
    MSComm1.DTREnable = False
    MSComm1.RTSEnable = False
    MSComm1.PortOpen = False
    End
End Sub


El código está escrito para que trabaje en el COM3, porque allí tengo instalado mi conversor USB-RS232.
Aquellos que deseen utilizar otro COM simplemente deben cambiar la línea:
Código:
   MSComm1.CommPort = 3
Y poner el número de puerto que deseen en lugar del "3".

Como pueden observar es muy fácil controlar a través del puerto serie un par de led y leer tres entradas.
A partir de aquí se pueden hacer muchas cosas, siempre teniendo cuidado de no sobrecargar el puerto.



Adjunto el programa ejecutable para el COM3.

* in_out_serial_plano.JPG (40.59 KB - descargado 5751 veces.)
* in_out_serial_01.JPG (88.06 KB - descargado 4948 veces.)
* in_out_serial_02.JPG (76.26 KB - descargado 4938 veces.)
* in_out_serial_03.JPG (90.26 KB - descargado 5061 veces.)
* Serial_in_out.rar (4.29 KB - descargado 618 veces.)
« Última modificación: Marzo 21, 2011, 01:24:19 por HJ » En línea
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #1 : Marzo 07, 2011, 07:28:25 »

2º circuito: Circuito con 2 salidas y tres entradas habilitadas o no por una de las salidas

Otra alternativa es resignar una de las dos salidas, para alimentar los pulsadores desde allí, y así poder eliminar la batería externa.

el circuito modificado sería el siguiente:

Donde hemos eliminado la batería y alimentamos los pulsadores desde el pin 7 (RTS) a través de un diodo 1N4148.

En este caso para que el circuito quede alimentado y las entradas funcionen, se debe prender el LED2 desde el programa en la PC. Lo que significa que tenemos control de cuando nuestro equipo está energizado o nó... y esto da para mucho.


El LED1 sigue siendo una salida del "equipo"

Para hacer pruebas sobre esta versión del circuito se puede utilizar el mismo programa, pero con los significados anteriormente expuestos.
Recuerden, el LED2 debe estar encendido para que las entradas funcionen.

* in_out_serial_04.JPG (41.84 KB - descargado 4912 veces.)
* in_out_serial_05.JPG (52.95 KB - descargado 4836 veces.)
« Última modificación: Marzo 21, 2011, 01:25:51 por HJ » En línea
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #2 : Marzo 07, 2011, 07:55:59 »

Quiero aclarar que se que esto es elemental, pero considero que puede ser un punto de partida para quien desee comenzar a controlar cosas con la PC. La forma mas rápida, y creo que con la que todos comenzamos, es el puerto paralelo, ya casi inexistente en las computadoras modernas.
Ese es el motivo del presente montaje, que permite jugar un poco controlando cosas vía USB a partir de un conversor USB-RS232.


Les dejo un vídeo del segundo circuito funcionando (el que NO requiere batería).
Disculpen la calidad del vídeo, la cámara no da mas...

<a href="http://www.youtube.com/v/VOQMc4DfFnA" target="_blank">http://www.youtube.com/v/VOQMc4DfFnA</a>

« Última modificación: Marzo 07, 2011, 09:06:12 por HJ » En línea
palitroquez
Moderador
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 738


de vuelta a la Electrónica


WWW
« Respuesta #3 : Marzo 07, 2011, 11:02:12 »

Hola.

está muy muy buena la idea. o sea que sería una solución menos costosa para enviar/recibir datos por usb, sin programar ni una sola línea en usb.



En línea

HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #4 : Marzo 08, 2011, 01:09:37 »

está muy muy buena la idea. o sea que sería una solución menos costosa para enviar/recibir datos por usb, sin programar ni una sola línea en usb.

Ojo que se utiliza un conversor USB-RS232 (utilizo uno marca MANHATTAN) y aunque te conectes a través del puerto USB, en el programa de la PC lo tratas como si fuese un COM mas.

Saludos

Edito: También puedes conectarlo a un puerto COM real si tu PC lo tiene.
En línea
jorgeaf_59
PIC10F
*
Desconectado Desconectado

Mensajes: 45


« Respuesta #5 : Marzo 11, 2011, 08:55:13 »

Hola HJ:

Muchísimas gracias por el post, para mí estás dando en forma muy clara una información muy buena.
Realmente me aclaraste cómo desde un lenguaje visual acceder a los pines individuales, para mí era muy fácil hacerlo en DOS o en linux en modo texto, pero nunca lo pude encontrar tan didáctico en VB.
Sos un capo técnica y didácticamente.
Un abrazo,

Jorge
En línea
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #6 : Marzo 11, 2011, 09:09:50 »

Gracias Jorge, me alegra que te haya sido útil.
Esto te abre una ventana muy amplia de posibilidades.



Edito:
Cualquier duda consultáme.
« Última modificación: Marzo 11, 2011, 09:11:40 por HJ » En línea
Ariel
Global Moderator
dsPIC
****
Conectado Conectado

Sexo: Masculino
Mensajes: 10230



WWW
« Respuesta #7 : Marzo 11, 2011, 09:40:55 »

Quiero aclarar que se que esto es elemental, pero ....

Hola HJ!
Es que muchas veces justamente esas son las cosas dificiles de encontrar. Hoy dia es mas facil encontrar un "paso a paso" para conectar una tarjeta SD a un micro ARM que corre Linux a 900MHz que algo asi como lo que expones. Asi que esto viene muy bien!
En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
galiel38
PIC10F
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #8 : Marzo 20, 2011, 04:54:32 »

Hola que tal amigo HJ bueno espero y puedas resolver una duda mía resulta que ahorita tenemos en la escuela un proyecto en mente y una parte de eso es que requerimos prender y apagar un ventilador a través de la computadora, mi pregunta es si a tu trabajo expuesto en ves de un led puede ser un ventilador de bajo consumo(osea un motor chiquito de esos que traen los coche sitos de control remoto)? ser el dispositivo que se encienda sin necesidad de batería o algo externo que lo alimente, solo la corriente del puerto, espero y si se pueda adaptar tu trabajo a lo que necesito y es que lo interesante del tuyo es que no se necesita ningún micro para realizar esa tarea cosa que es lo que e estado buscando, por que lo que siempre encuentro es que se necesita micro, y no quiero meterme a programación de micro, otra pregunta seria si me puedes listar los materiales que usas, en la imagen veo que usas push button? es esto correcto y para que los usas para dejar pasar la corriente??? disculpa mi ignorancia lo que pasa es que no me dedico a lo electrónico pero el proyecto requiere parte de esto bueno de antemano un saludo y espero puedas resolver esta duda a la brevedad posible :D.
En línea
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #9 : Marzo 20, 2011, 11:06:47 »

Hola galiel38, en realidad, deberías utilizar tanto el Pin 4 como el Pin 7 para obtener la tensión positiva, sumándolas y podrías controlar un motor cuya corriente de arranque no supere los 100mA, esto es sumamente IMPORTANTE para no dañar el puerto de la PC o el adaptador USB-RS232.

Entre todas las pruebas que realicé, solo algunos motores de reproductores de CD cumplen ese requisito y uno de un viejo grabador periodista.

Ampliaremos...


Edito:
He probado 2 motores de autos a radio-control, uno de con control remoto por cable y tres de tipo Scalextric (si... se escribe con "x") y ninguno de ellos es apto para este montaje, ya que tienen un pico de consumo en el arranque de entre 350 y 500mA.

Saludos
« Última modificación: Marzo 20, 2011, 11:34:46 por HJ » En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #10 : Marzo 21, 2011, 12:00:17 »

Se podría usar una fuente externa y mediante los pines del puerto controlar una etapa de potencia para alimentar el motor . duda


Saludos!
En línea

galiel38
PIC10F
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #11 : Marzo 21, 2011, 12:04:02 »

Hola galiel38, en realidad, deberías utilizar tanto el Pin 4 como el Pin 7 para obtener la tensión positiva, sumándolas y podrías controlar un motor cuya corriente de arranque no supere los 100mA, esto es sumamente IMPORTANTE para no dañar el puerto de la PC o el adaptador USB-RS232.

Entre todas las pruebas que realicé, solo algunos motores de reproductores de CD cumplen ese requisito y uno de un viejo grabador periodista.

Ampliaremos...


Edito:
He probado 2 motores de autos a radio-control, uno de con control remoto por cable y tres de tipo Scalextric (si... se escribe con "x") y ninguno de ellos es apto para este montaje, ya que tienen un pico de consumo en el arranque de entre 350 y 500mA.

Saludos


Hola saludos amigo gracias por tu pronta respuesta entonces tratas de decir que los 5V que da el puerto USB no funcionan para este caso???, y si lo hiciera digamos tomando los 5V de otro puerto usb(al motor) y por el cable usb-rs232 solo el encendido y apagado del motor si se puede??? espero y no se incoherente en mis ideas es que en verdad se muy poco de electrónica saludos.
En línea
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #12 : Marzo 21, 2011, 12:13:40 »

Hola galiel38, tal cual acotó Suky, lo mejor sería, alimentar el motor con una fuente externa (una batería por ejemplo) y controlar el encendido y apagado mediante un transistor o un relé de baja corriente, sino vamos ha estar en lo mismo.

Pero controlar un pequeño motor directamente se puede, pero depende del motor y su corriente de arranque como indique anteriormente.

Saludos
HJ

P.D: en un rato subo una demostración... (me agarraste en un día bueno  Grin)
En línea
HJ
Administrator
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5097



« Respuesta #13 : Marzo 21, 2011, 12:50:23 »

3º circuito: Control de un pequeño motor mediante

La intención es poder controlar vía RS232 o con un adaptador USB-RS232 un pequeño motor de un reproductor de CD.
Se seleccionó este motor ya que era el que presentaba la menor corriente de arranque, 55mA

El circuito utilizado es el siguiente:


Y en esta foto se puede apreciar el montaje en un protoboard.


El programa de la Pc cambió con respecto a los anteriores, como se vé en las siguientes capturas de pantalla.


La interfaz cuenta ahora con un solo botón que nos permite prender y apagar el motor, activando y desactivando las lineas DTR y RTS.
El código en VB6 es el siguiente, solo deben colocar en el formulario un botón y el MSComm.
Código:
Option Explicit


Private Sub Command1_Click()
    If MSComm1.DTREnable = True Then
        MSComm1.DTREnable = False
        MSComm1.RTSEnable = False
        Command1.Caption = "Prender Motor"
    Else
        MSComm1.DTREnable = True
        MSComm1.RTSEnable = True
        Command1.Caption = "Apagar Motor"
    End If
End Sub


Private Sub Form_Activate()
    If App.PrevInstance = True Then
        MsgBox " El programa ya está corriendo ", vbCritical + vbSystemModal
        End
    End If
    Form1.Caption = "On/Off Motor"
    MSComm1.CommPort = 3
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.PortOpen = True
    MSComm1.DTREnable = False
    MSComm1.RTSEnable = False
    Command1.Caption = "Prender motor"
End Sub


Private Sub Form_Unload(Cancel As Integer)
    MSComm1.DTREnable = False
    MSComm1.RTSEnable = False
    MSComm1.PortOpen = False
    End
End Sub

Al igual que en los casos anteriores, el programa está preparado para trabajar sobre el COM 3, ya que mi adaptador está configurado allí.
Como mencioné anteriormente, aquellos que deseen utilizar otro COM simplemente deben cambiar la línea:
 
Código:
 MSComm1.CommPort = 3
Y poner el número de puerto que deseen en lugar del "3".

En el siguiente vídeo, podemos ver el circuito en funcionamiento. (vuelvo a pedir disculpas por la calidad del mismo)
<a href="http://www.youtube.com/v/t9-cYvK1w_U" target="_blank">http://www.youtube.com/v/t9-cYvK1w_U</a>


Adjunto el ejecutable configurado en el COM 3.

* in_out_serial_06.jpg (38.29 KB - descargado 6049 veces.)
* in_out_serial_07.jpg (7.54 KB - descargado 5916 veces.)
* in_out_serial_08.jpg (7.92 KB - descargado 5926 veces.)
* in_out_serial_09.jpg (48.05 KB - descargado 6080 veces.)
* On-off_motor.exe (20 KB - descargado 199 veces.)
« Última modificación: Marzo 21, 2011, 12:52:21 por HJ » En línea
galiel38
PIC10F
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #14 : Marzo 21, 2011, 01:07:42 »

Ok amigo muchas gracias por tu ayuda de verdad :D por tomarte la molestia en contestar por cierto si que eres rapido armando todo  Grin por cierto una solo pregunta no podrias adaptar el codigo a visual 2008 o 2010 es que en estos ya no existe la funcion MSComm si no una llamada SerialPort en el que se ocupa configurar

port = new System.IO.Ports.SerialPort(portname);

            port.Parity = parity;
            port.BaudRate = BaudRate;
            port.StopBits = stopbits;
            port.DataBits = databits;

bueno esto es un ejemplo de los datos que se desean configurar pero a lo que voy es que ya no es tan facil como en el MsComm al igual que a la hora en enviar el 1 logico o no se en realidad que señal mandas para activar y desactivar espero y tengas un vago conocimiento ya en la aplicacion SerialPort que se incorpora creo desde el visual 2005 asta el mas actual para que puedas resolver esta duda saludos amigo.
En línea
Páginas: [1] 2 3   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.18 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.119 segundos con 29 consultas. (Pretty URLs adds 0.015s, 3q)
loggkey