Objetivos
Efectuar un programa en un lenguaje C para el
encendido y apagado de luces de una casaEjecutar el armado de un circuito para el encendido
y apagado de leds mediante un puerto paralelo
Marco
teórico
Visual Basic
Los compiladores de Visual Basic generan código
que requiere una o más librerías de enlace
dinámico para que funcione, conocidas comúnmente
como DLL (sigla en inglés de dynamic-link library); en
algunos casos reside en el archivo llamado MSVBVMxy.DLL (siglas
de "MicroSoft Visual Basic Virtual Machine x.y", donde x.y es la
versión) y en otros en VBRUNXXX.DLL ("Visual Basic Runtime
X.XX"). Estas bibliotecas DLL proveen las funciones
básicas implementadas en el lenguaje, conteniendo rutinas
en código ejecutable que son cargadas bajo
demanda en tiempo de ejecución. Además de las
esenciales, existe un gran número de bibliotecas del tipo
DLL con variedad de funciones, tales como las que facilitan el
acceso a la mayoría de las funciones del sistema operativo
o las que proveen medios para la integración con otras
aplicaciones.
Dentro del mismo Entorno de desarrollo integrado (IDE)
de Visual Basic se puede ejecutar el programa que esté
desarrollándose, es decir en modo intérprete (en
realidad pseudo-compila el programa muy rápidamente y
luego lo ejecuta, simulando la función de un
intérprete puro). Desde ese entorno también se
puede generar el archivo en código ejecutable (exe); ese
programa así generado en disco puede luego ser ejecutado
sin requerir del ambiente de programación (incluso en modo
stand alone), aunque sí será necesario que las
librerías DLL requeridas por la aplicación
desarrollada se encuentren también instaladas en el
sistema para posibilitar su ejecución.
El propio Visual Basic provee soporte para empaquetado y
distribución; es decir, permite generar un
módulo instalador que contiene al programa
ejecutable y las bibliotecas DLL necesarias para su
ejecución. Con ese módulo la aplicación
desarrollada se distribuye y puede ser instalada en cualquier
equipo (que tenga un sistema operativo compatible).
Así como bibliotecas DLL, hay numerosas
aplicaciones desarrolladas por terceros que permiten disponer de
variadas y múltiples funciones, incluso mejoras para el
propio Visual Basic; las hay también para el empaquetado y
distribución, y hasta para otorgar mayor funcionalidad al
entorno de programación (IDE).
Armado del
circuito
Puerto Paralelo:
El puerto paralelo (protocolo centronics) se utiliza
generalmente para manejar impresoras. Sin embargo, dado que este
puerto tiene un conjunto de entradas y salidas digitales, se
puede emplear para hacer prácticas experimentales de
lectura de datos y control de dispositivos. Esta obra pretende
dar a conocer los aspectos más relevantes del puerto
paralelo, de modo que se pueda utilizar como una interface de
entrada/salida que funcione de modo subordinado a rutinas de
software. Este trabajo surge de la necesidad de una
guía para la práctica de la adquisición
de datos y control de dispositivos como una
alternativa al uso de Controladores Lógicos Programables
(PLC) y Tarjetas de Adquisición de Datos (DAC), de modo
que se puedan hacer experiencias con sistemas en
Tiempo-Real.
Leds:
Un led es un componente electrónico cuya
función principal es convertir la energía
eléctrica en una fuente luminosa, la palabra led proviene
del acrónimo ingles Light Emmiting Diode o diodo emisor de
luz.
Específicamente un led corresponde a un tipo
especial diodo el cual transforma la energía
eléctrica en luz, su principio de funcionamiento se basa
en la emisión de fotones (luz) cuando los electrones
portadores de la electricidad atraviesan el diodo, dicho
fenómeno se conoce como electroluminiscencia
Protoboard:
Es una especie de tablero con orificios, en la cual se
pueden insertar componentes electrónicos y cables para
armar circuitos. Como su nombre lo indica, esta tableta sirve
para experimentar con circuitos electrónicos, con
lo que se asegura el buen funcionamiento del mismo.
Circuito integrado
Un circuito integrado (CI), también
conocido como chip o microchip,
es una pastilla pequeña de material semiconductor, de
algunos milímetros cuadrados de área, sobre la
que se fabrican circuitos
electrónicos generalmente
mediante fotolitografía y que está
protegida dentro de un encapsulado de plástico
o cerámica. El encapsulado posee conductores
metálicos apropiados para hacer conexión entre
la pastilla y un circuito impreso.
Resultados obtenidos
Al finalizar nuestro proyecto, obtuvimos un
prototipo de lo que podría ser una casa inteligente. Se
construyó una casa la cual consta de 8 leds de presencia
los cuales hacen que se prenda la luz de las habitaciones como
también se apaguen.
O como también se prendan todos o se
apaguen todos
Sala
Cocina
Dormitorio 1
Dormitorio 2
Dormitorio 3
Pasillo
Baño 1
Baño 2
Este proyecto necesito de una
inversión un poco mayor a la que habíamos
considerado, ya que perdimos mucho material en las pruebas y en
el armado de los circuitos.
Código
lenguaje C
Option Explicit
Public Out_TTL As Byte 'contiene el BYTE
a sacar por el puerto
Public In_Port As Integer 'continen la
direccion de lectura del Registro de Estado
Public Out_Port As Integer 'contiene la
direcc.para escribir al Registro de Datos
Public Ctr_Port As Integer 'contiene la
direcc.para escribir al Registro de Control
Private Sub Form_Load() 'procedimiento
inicial
'Configura la COMBOLIST
cmbLptSelect
cmbLptSelect.AddItem "0x378"
cmbLptSelect.AddItem "0x278"
cmbLptSelect.AddItem "0x3BC"
'Establece LPT1 como default
cmbLptSelect.ListIndex = 0
SetLPTAddress 'estable direccion base del
LTP
Port_Reset 'reseteo salidas
TTL
End Sub
Private Sub Form_QueryUnload(Cancel As
Integer, UnloadMode As Integer)
Cancel = 1 'evita que se salga mediante
la 'X'
End Sub
Private Sub Form_Unload(Cancel As
Integer) 'si sale del programa
Port_Reset 'entonces reseteo salidas
TTL
End
End Sub
Private Sub cmdSalir_Click() 'si presiono
SALIR, reseteo
Port_Reset 'las salidas TTL y salgo del
programa
End
End Sub
Private Sub cmdReset_Click()
Port_Reset 'las salidas TTL y salgo del
programa
chkOut2.Value = 0
chkOut3.Value = 0
chkOut4.Value = 0
chkOut5.Value = 0
chkOut6.Value = 0
chkOut7.Value = 0
chkOut8.Value = 0
chkOut9.Value = 0
chkOut1.Value = 1
chkOut14.Value = 1
chkOut16.Value = 0
chkOut17.Value = 1
End Sub
Private Sub Port_Reset() 'procedimiento
para resetear salidas TTL
PortOut Out_Port, 0
PortOut Ctr_Port, 11 'Bits 0, 1 y 3
trabajan invertidos, un 11=1011 => todo en CERO
End Sub
Private Sub
cmbLptSelect_Click()
SetLPTAddress 'llamo rutina para
determinarar la direccion
'base del nuevo LPT elegido
End Sub
Private Sub
cmdHelpOnLpt_Click()
frmHelpOnLpt.Show
End Sub
Private Sub SetLPTAddress() 'establece la
direccion correpondiente
'al puerto seleccionado
Select Case
cmbLptSelect.ListIndex
Case Is = 0
Out_Port = &H378
Case Is = 1
Out_Port = &H278
Case Is = 2
Out_Port = &H3BC
End Select
In_Port = Out_Port + 1
Ctr_Port = Out_Port + 2
End Sub
Private Sub chkOut2_Click() 'invierto
estado de DATA 0
If chkOut2.Value = 1 Then
SetPortBit Out_Port, 0
chkOut2.Caption = "Data 0 (pin 2) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 0
chkOut2.Caption = "Data 0 (pin 2) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut3_Click() 'invierto
estado de DATA 1
If chkOut3.Value = 1 Then
SetPortBit Out_Port, 1
chkOut3.Caption = "Data 1 (pin 3) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 1
chkOut3.Caption = "Data 1 (pin 3) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut4_Click() 'invierto
estado de DATA 2
If chkOut4.Value = 1 Then
SetPortBit Out_Port, 2
chkOut4.Caption = "Data 2 (pin 4) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 2
chkOut4.Caption = "Data 2 (pin 4) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut5_Click() 'invierto
estado de DATA 3
If chkOut5.Value = 1 Then
SetPortBit Out_Port, 3
chkOut5.Caption = "Data 3 (pin 5) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 3
chkOut5.Caption = "Data 3 (pin 5) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut6_Click() 'invierto
estado de DATA 4
If chkOut6.Value = 1 Then
SetPortBit Out_Port, 4
chkOut6.Caption = "Data 4 (pin 6) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 4
chkOut6.Caption = "Data 4 (pin 6) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut7_Click() 'invierto
estado de DATA 5
If chkOut7.Value = 1 Then
SetPortBit Out_Port, 5
chkOut7.Caption = "Data 5 (pin 7) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 5
chkOut7.Caption = "Data 5 (pin 7) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut8_Click() 'invierto
estado de DATA 6
If chkOut8.Value = 1 Then
SetPortBit Out_Port, 6
chkOut8.Caption = "Data 6 (pin 8) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 6
chkOut8.Caption = "Data 6 (pin 8) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut9_Click() 'invierto
estado de DATA 7
If chkOut9.Value = 1 Then
SetPortBit Out_Port, 7
chkOut9.Caption = "Data 7 (pin 9) = 1 –
ALTO"
Else
ClrPortBit Out_Port, 7
chkOut9.Caption = "Data 7 (pin 9) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut1_Click() 'invierto
estado de STROBE (este pin trabaja invertido)
If chkOut1.Value = 1 Then
ClrPortBit Ctr_Port, 0
chkOut1.Caption = "STROBE (pin 1) = 1 –
ALTO"
Else
SetPortBit Ctr_Port, 0
chkOut1.Caption = "STROBE (pin 1) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut14_Click() 'invierto
estado de AUTOFD (este pin trabaja invertido)
If chkOut14.Value = 1 Then
ClrPortBit Ctr_Port, 1
chkOut14.Caption = "AUTOFD (pin 14) = 1 –
ALTO"
Else
SetPortBit Ctr_Port, 1
chkOut14.Caption = "AUTOFD (pin 14) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut16_Click() 'invierto
estado de INIT
If chkOut16.Value = 1 Then
SetPortBit Ctr_Port, 2
chkOut16.Caption = "INIT (pin 16) = 1 –
ALTO"
Else
ClrPortBit Ctr_Port, 2
chkOut16.Caption = "INIT (pin 16) = 0 –
BAJO"
End If
End Sub
Private Sub chkOut17_Click() 'invierto
estado de SLCTIN (este pin trabaja invertido)
If chkOut17.Value = 1 Then
ClrPortBit Ctr_Port, 3
chkOut17.Caption = "SLCTIN (pin 17) = 1 –
ALTO"
Else
SetPortBit Ctr_Port, 3
chkOut17.Caption = "SLCTIN (pin 17) = 0 –
BAJO"
End If
End Sub
Private Sub Timer1_Timer() 'timer de 50ms
para refrescar en
Dim Lectura As Byte 'pantalla el estado
de las
Dim Estado(4) As Byte
'entradas
Dim Estado_Str(4) As String
Dim Bucle As Byte
Lectura = PortIn(In_Port) 'leo el puerto
de entrada
'filtro solo los bit's que necesito
conocer
Estado(0) = Lectura And &H8 '=
00001000 en Binario (bit 3/ìn 15)
Estado(1) = Lectura And &H10 '=
00010000 en Binario (bit 4/ìn 13)
Estado(2) = Lectura And &H20 '=
00100000 en Binario (bit 5/ìn 12)
Estado(3) = Lectura And &H40 '=
01000000 en Binario (bit 6/ìn 10)
Estado(4) = Lectura And &H80 '=
10000000 en Binario (bit 7/ìn 11)
For Bucle = 0 To 4
If Estado(Bucle) <> 0
Then
Estado_Str(Bucle) = "1"
Else
Estado_Str(Bucle) = "0"
End If
Next Bucle
lblInput15.Caption = "ERROR (pin 15) = "
& Estado_Str(0)
lblInput13.Caption = "SLCT (pin 13) = "
& Estado_Str(1)
lblInput12.Caption = "PE (pin 12) = "
& Estado_Str(2)
lblInput10.Caption = "ACK (pin 10) = "
& Estado_Str(3)
lblInput11.Caption = "BUSY (pin 11) = "
& Estado_Str(4)
End Sub
Autor:
Avilés Ana
Coronel Marilia
Fuentes Alvaro
Monzón Marcelo
Sevilla Mickaela
UNIVERSIDAD CATOLICA BOLIVIANA
SEMESTRE 1 / 2013