Controlar entradas salidas por RS232 sin micro

Sección dedicada a imágenes de circuitos, diagramas que no requieren explicación previa, Proyectos sencillos.
Area para desarrollo de proyectos, colaboración de toda la comunidad en proyectos. Solución de dudas y aportes.

No publicar manuales, no publicar temas ajenos a los proyectos. de ser necesario, hacer indicación con enlace entre etiquetas CODE
Avatar de Usuario
Enigma
Administrador del Sitio
Administrador del Sitio
Mensajes: 1268
Registrado: 20 Oct 2013, 16:26
Genero: Mujer
Profesion: Webmaster CEO SEO
Ubicacion: Matrix
Navegador: Chrome
Contactar:

Controlar entradas salidas por RS232 sin micro

Mensaje sin leer por Enigma » 05 Dic 2015, 12:27

Controlar entradas salidas por RS232 o conversor USB-RS232 sin micro.

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
Imagen

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:
Imagen

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

Imagen

Imagen

El código en VB6 es el siguiente:

Código: Seleccionar todo

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 el conversor USB-RS232.
Aquellos que deseen utilizar otro COM simplemente deben cambiar la línea:

Código: Seleccionar todo

 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.

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:

Imagen

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.

Imagen

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.

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:

Imagen

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

Imagen

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

Imagen

Imagen

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: Seleccionar todo

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: Seleccionar todo

MSComm1.CommPort = 3
Y poner el número de puerto que deseen en lugar del "3".

Agrego un par de TIP's para que lo implementen desde un inicio. Los TIP's son sobre el primer programa y a modo de ejemplo

* Deben crear un proyecto nuevo

* Sobre el formulario Form1, agregan dos Marcos (Frame), uno arriba y el otro mas abajo.

* A ambos Marcos le cambian la propiedad Caption. Al de arriba le ponen Entradas y al de Abajo Salidas, les pueden modificar la fuente si lo desean, en mi caso, si mal no recuerdo, los puse en negritas solamente.

* En el Marco de arriba agregan tres Figuras (Shape) llamadas Shape1, Shape2 y Shape3, que son los nombres por defecto. Las deben colocar de modo que Shape1 quede a la izquierda, Shape2 al centro y Shape3 a la derecha.

* A las tres figuras le modifican la Propiedad Shape a Circle

* A las tres figuras le modifican la Propiedad FillStyte a Solid.

* Sobre cada Figura colocan una Label, de izquierda a derecha Label1, Label2 y Label3, A la Label1 le cambian la propiedad Caption por IN1, a la Label1 por IN2 y a la Label3 por IN3. Deberían ampliar el tamaño de la fuente y ponerla en negrita, para que se vea como en el ejemplo.

*En el Marco de abajo colocan dos Botones (CommandButton) con el nombre por defecto Command1 y Command2, de modo que quede el Command1 a la izquierda y el Command2 a la derecha.

* Deben agregar sobre le Formulario Form1, un controlador de puerto serie MSComm, y dejarle el nombre por defecto MSComm1.

* Abren la ventana de Código y agregan el código que les pasé en el primer mensaje, teniendo la precaución de seleccionar el puerto que estén por utilizar.

* Ya pueden ejecutar el programa o compilarlo y generar el .exe.

Nota: El MSComm, no esta entre los componentes que tenemos por defecto en la Barra de Herramientas, por tanto debemos agregarlo, para ello presionan <Ctrl> + T o hacen menú/ Proyectos / Componentes... para abrir la ventana de Componentes.

Imagen

Seleccionan el Microsoft Comm Control 6.0, verificando la casilla correspondiente y le dan a Aceptar.

Imagen

Ahora en la barra de tareas se ha agregado el Componente MSComm y ya lo pueden utilizar.

Imagen

La instrucción Option Explicit se coloca al comiendo del Código de cada formulario, o en cada Módulo, etc. Y te obliga a definir las variables que utilizas en el código, si bien no es necesario, es una buena costumbre de programación el hecho de acostumbrarse a definir todas las variables que utilizaremos en el programa.

Con respecto al código

Código: Seleccionar todo

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
Simplemente haces doble clic sobre el botón que agregaste al formulario y te aparece lo siguiente en la ventana de código respectiva.

Código: Seleccionar todo

Private Sub Command1_Click()
End Sub
Luego escribes el resto en su interior.



Volver a “Proyectos y Circuitos Didacticos”