Objetivos
Efectuar un programa en un lenguaje C para el encendido y apagado de luces de una casa
Ejecutar 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