Descargar

Leds de casa controlados por Lenguaje C

Enviado por Juan Marcelo Monzón


  1. Objetivos
  2. Marco teórico
  3. Armado del circuito
  4. Código lenguaje C

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).

edu.red

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.

edu.red

  • 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 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ásticocerá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.

edu.red

edu.red

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