domingo, 17 de mayo de 2009

Mecatronico y Puerto Paralelo...

El mekatronico puede utilizar una computadora como centro de control (creo que para eso me dan clases de programación) con la cual tendremos un numero ilimitado de posibilidades en el diseño de nuestros proyectos.

En una computadora hay muchas formas de comunicación con periféricos por ejemplo: un puerto USB, infrarrojo, puerto serial, puerto paralelo, Bluetooth, Wii-fi...

Como soy solo un pequeño pato y voy apenas iniciando mi tercer cuatrimestre de la carrera solo he tenido experiencia con el puerto paralelo y serial, programando en Windows con Visual Basic, lenguaje C y Visual C++, En linux con MONOdeveloped y Gambas 2.

Dare un aporte de mis trabajos de programación y por otra parte la electrónica para el control :P

El puerto paralelo como ya sabemos esta compuesto por:

# 8 Pines de Salida [D0 hasta D7]
# 5 Pines de Status [S4 hasta S7 y S3]
# 4 Pines de Control [C0 hasta C3]
# 8 Pines de Tierra [18 hasta 25]

Estos pines pueden tener dos estados 1 ó 0 (prendido ó Apagado)
1=5v 0=0v

Pondré un pequeño ejemplo de una Aplicación, recuerden que son infinitas...

“” Somos los encargados de diseñar un sistema de luces para un Antro. Queremos diseñar varias secuencias de las luces para lograr los mejores efectos posibles””

¿Como lo logro?

una opción de muchas posibles seria :

Cada pin de salida controle todas las luces del mismo color, tendría 8 colores. [D0-D7]
Los pines de entrada (Status) los utilizare para seleccionar la combinación deseada. [S4-S7yS3]
Utilizando la programación de Software diseñare las secuencias en las que mandare las señales por el puerto estas secuencias dependerán de la combinación active en las señales de entrada por ejemplo:

Al tener en estado “0” las entradas S4 y S5, las salidas D0 a D7 tendrán la secuencia

D0 , D2, D4, D6 en estado “1” (prendidos estos 4 colores de luz)
D0 y D4 en estado “0” (se apagan 2 luces y 2 se mantienen encendidas)
D1 y D3 en estado “1” (se suman 2 nuevos colores)
D2 y D6 en estado “0” (se apagan 2 luces y 2 se mantienen encendidas)
Se repite todo el ciclo

Con esto logramos que mientras se mantengan las señales “0” en S4 y S5 la secuencia se gira reiniciando sin cambiar, pero si cambio los estados de entrada se ejecutara otra secuencia con lo cual podremos programar muchísimas secuencias.

Como veras es una Aplicación en luces pero puede se aplicada en otro proyecto, que tal mover un robot, un poseso industrial, Automatismo, etc

¡Pero como puede encender un Motor eléctrico con solo 5V que manda la computadora!!!!

Pues la corriente del puerto es muy baja solo de unos miliAmperes, que son suficientes para entender por ejemplo un LED (foquito electrónico). Pero si conectamos por ejemplo un Relevador, un motor de CD, etc directo a nuestro puerto podríamos ocasionar un daño a nuestra computadora. Hay que tener cuidado con eso!!

La solución es utilizar una Interfaz Entre el puerto paralelo y la carga a controlar. De esta forma podremos alimentar la carga con mayor intensidad de corriente y con nuestro puerto seguro de sufrir algún daño.

Esta señal se pueden diseñar con Transmisores-Receptores Octales, yo utilizo el Circuito integrado 74LS245, este CI puede manejar ocho señales con tensiones de 5V

http://www.datasheetcatalog.org/datasheets/105/488347_DS.pdf'

El 74LS245 es muy funcional en la mayoría de los proyectos electrónicos, pero si necesitamos mas corriente podemos optar por el Circuito Integrad ULN2803 que es capas de manejar de 6V a 16V
Enlace
http://www.ucontrol.com.ar/wiki/index.php/M%C3%B3dulo_Reles_x_4

Todo diseño de la interfaz dependerá de la Aplicación deseada!!

***********************************************
Por la parte de la programación!!!!!!!!!!!!!!!

En Sistemas Operativos (SO) Windows XP, Windows 2000 , Vista y lógico el Windows 7 también se cambia la forma en la que el SO interactúa con los puertos serie y paralelo ya que no es de forma directa como en los Windows anteriores como el ME, el W98, W95, etc.
y como la mayoría usamos W XP o mas nuevo debemos hacer que nuestros SO puedan interactuar con estos puertos.

Para lograrlo es necesario instalar librerías de control, yo me he familiarizado con la librería “ IO.DLL” la he probado solo en XP no se como trabaje en SO posteriores, pero existen otras como “INPOUT32.DLL” y demás que andan por la red

Para instalar librerías en Win XP debemos copiar nuestra Libreria.DLL en el directorio
c:/windows/system32 (tener cuenta de administrador para poder modificar estas carpetas)
LISTO YA PUEDES PROGRAMAR EN TU XP EL PUERTO PARALELO!!!!!

Con Visual Basic -----------

Visual Basic es un IDE muy fasil de utilizar y por lo tanto podremos diseñar programas muy rápidamente. En la UTN me dieron clases con la versión VB 6, pero como soy bien necio comense a utilizar el VB 2008, este programa lo puedes descargar desde la pagina web oficial de forma gratuita

http://www.microsoft.com/express/download/Enlace

Si no sabes utilizar VB intenta estudiar un poco lo básico, próximamente daré algunos apuntes :D

Muy bien daremos lo primero
crea un proyecto nuevo
Debes agregar un Modulo a tu proyecto este modulo sera el que defina la librería IO.DLL
creas tu formulario y agregas los controles con el siguiente código

(No explicare el código en este texto ya que no tengo tiempo, pero mas adelante are una nueva entrada de como programar en VB desde cero)

'Esto va en el módulo bas

Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Data As Byte)
Public Declare Sub PortWordOut Lib "io.dll" (ByVal Port As Integer, ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib "io.dll" (ByVal Port As Integer, ByVal Data As Long)
Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte
Public Declare Function PortWordIn Lib "io.dll" (ByVal Port As Integer) As Integer
Public Declare Function PortDWordIn Lib "io.dll" (ByVal Port As Integer) As Long
Public Declare Sub SetPortBit Lib "io.dll" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib "io.dll" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib "io.dll" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Function GetPortBit Lib "io.dll" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib "io.dll" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib "io.dll" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib "io.dll" () As Boolean
Public lpt1 As String
------------------------------------------------------------
'Esto va en el Form

Private Sub Command1_Click()
'------------------CONVERSIONES----------------------------------
'------------------BINARIO A DECIMAL-----------------------------
'CONVERTIR LPT1
total1 = 0
lpt1 = Text1.Text
If Mid(lpt1, 1, 1) = "1" Then total1 = (1 * 2) ^ 7
If Mid(lpt1, 2, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 6)
If Mid(lpt1, 3, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 5)
If Mid(lpt1, 4, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 4)
If Mid(lpt1, 5, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 3)
If Mid(lpt1, 6, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 2)
If Mid(lpt1, 7, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 1)
If Mid(lpt1, 8, 1) = "1" Then total1 = total1 + ((1 * 2) ^ 0)
PortOut &H378, total1
Label5.Caption = total1
End Sub

Private Sub Command2_Click()
PortOut &H378, 0
End
End Sub

Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Label5.Caption = "Esperando una Entrada"
End Sub


Private Sub Timer1_Timer()
'------------------DECIMAL A BINARIO-----------------------------
Dim i As Long, J As Long, K As Long, A As Long, H As Long
Dim Cadena
On Error Resume Next
A = PortIn(&H379)
For J = 7 To 0 Step -1
If A And 2 ^ J Then
H = 1
Else
H = 0
End If
Cadena = Cadena & H
Label49.Caption = Cadena
Next
Text2.Text = Cadena
Text3.Text = PortIn(&H379)
End Sub





Como veras el comando de control es “PortOut (Salida) y PortIn (entrada)”
La dirección del Hadware D0 a D7 es con la dirección H378 y las entradas S4a S7 y S13 con H379

En caso de querer mandar una señal esta debe ser en Forma Decimal. por ejemplo:
Si queremos poner todas las señales de salida con Estado “1”
en binario seria 11111111 (las 8 salidas en 1) la conversión de binario a Decimal sera 255 por lo tanto para mandar esta señal sera de esta forma PortOut (&H378, 255)

Si queremos poner todas las señales de salida con Estado “0”
en binario seria 00000000 (las 8 salidas en 0) la conversión de binario a Decimal sera 0 por lo tanto para mandar esta señal sera de esta forma PortOut (&H378, 0)

Si queremos poner otro orden de salida de salida con combinación de Estados
ejemplo 01101100 = 108 decimal
esto significa que D0=0,D1=1,D2=1,D3=0, ETC
la orden sera PortOut (&H378, 108)

Date cuenta que en el código anterior se maneja el valor del decimal con constantes y con variables

No hay comentarios:

Publicar un comentario