Está en la página 1de 52

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA

TECNOLOGÍA DE SOFTWARE

NRC: 3669

CUADERNO DIGITAL

GRUPO DE TRABAJO N:6.

INTEGRANTES:

ALEX LAMIÑO

ANDRÉS PÉREZ

BRYAN BATIOJA

DIEGO MERA

PROFESOR:

DR. LUIS R. CADENA L.

Mayo 3 de 2017

Contenido
1.1. INTERFACES DE LA PC .......................................................................................................... 2
1.1.1. Arquitectura de 32 y 64bits ......................................................................................... 2
1.1.2. Tipos de Buses ............................................................................................................. 4
1.1.3. Puerto Paralelo .......................................................................................................... 14
1.1.3.1. Conectores definidos por el Estandar IEEE 1284 .............................................. 32
1.1.3.2. Direcciones de E/S ............................................................................................. 33
1.1.4. Puerto Serie ............................................................................................................... 33
1.1.4.1. Conectores DB9 y DB25 ..................................................................................... 44
1.1.4.2. Direcciones de puertos...................................................................................... 48
1.1.4.3. RS-232, RS-422 y RS-485.................................................................................... 49
1.1.4.4. Drivers/Receivers .............................................................................................. 57
1.1.4.5. Comunicación Asíncrona ................................................................................... 60
1.1.4.6. Comunicación Síncrona ..................................................................................... 62
1.1.5. Puerto USB ............................................................................................................... 62
1.2. ACONDICIONAMIENTO DE SEÑALES DIGITALES................................................................ 65
1.2.1. Tratamiento anti rebotes para pulsadores por software y hardware....................... 65
1.2.2. Aplicación de circuitos electrónicos para protección y el aislamiento eléctrico de
los dispositivos electrónicos del PC. ....................................................................................... 69
1.2.2.1. Buffer unidireccional y bidireccional ................................................................. 74
1.2.2.2. Relé electromecánico y de estado sólido .......................................................... 75
1.2.2.3. Optoacoplador .................................................................................................. 81
1.2.2.4. Triac ................................................................................................................... 83
1.2.2.5. Conversor de niveles de voltaje ........................................................................ 92
1.2.2.6. Conversores ADC/DAC....................................................................................... 93
1.3. COMUNICACIONES CON LA PC ........................................................................................ 104
1.3.1. API de Comunicaciones de Java .............................................................................. 108
UNIDAD 1: CONTROL DE PUERTOS

1.1. INTERFACES DE LA PC
1.1.1. Arquitectura de 32 y 64bits

La principal diferencia entre un procesador de 32 bits y uno de 64 bits es que el primero puede
procesar secuencia de bits de hasta 32 bits, mientras que los procesadores de 64 bits pueden
extender al doble esta capacidad. Como sabemos, el procesador de una PC es el encargado de
realizar todos los cálculos lógicos y matemáticos con el fin de obtener los resultados solicitados por
el usuario, y para ello deben manejar paquetes de información a una determinada velocidad. En
este punto la principal diferencia entre ambas plataformas es que en el caso de los procesadores de
64 bits, estos pueden trabajar con el doble de información en el mismo ciclo de reloj que uno de 32
bits, lo que les permite pueden acceder a mayor capacidad de memoria y procesar bloques de datos
mucho más grandes, aumentado el rendimiento y la velocidad de proceso general.
Las arquitecturas de 64 bits
Cuando hablamos de 64 bits nos referimos, generalmente, al tamaño de cualquier estructura de
datos que, en este caso, permite almacenar 64 bits de ‘algo’. Puede ser el género de un alumno, su
edad o su estatura. En estos dos últimos casos debemos tener en cuenta que cada alumno ocupa
más de un bit, ya que la información no puede ser representada sólo con 0 o 1.

ARM Cortex-A57Cortex-A57, uno de los primeros ARM 64 bits que saldrán al mercado

Las arquitecturas de 32 bits


Los buses de datos y de direcciones son usualmente más anchos que 32 bits, a pesar de que éstas
se almacenen y manipulen internamente en el procesador como cantidades de 32 bits. Por ejemplo,
el Pentium Pro es un procesador de 32 bits, pero el bus de direcciones externo tiene un tamaño de
36 bits, y el bus de datos externo de 64 bits.

Aspectos a tener en cuenta


- Si queremos ejecutar un sistema operativo de 64 bits, el procesador debe tener
arquitectura de 64 bits.
- Debemos tener al menos 4 Gb de RAM para sacarle el máximo rendimiento a este tipo
de sistema operativo.
- Normalmente, los controladores de dispositivos de 32 bits no trabajan en ordenadores
con versiones 64 bits de Windows.
- No podemos actualizar de una versión de Windows de 32 bits a 64 bits, pero si hacer
una instalación limpia.
- Podemosinstalar un Windows de 32 bits en un procesador de 64 bits
-
Principales diferencias: 32 bits 64 bits
Es necesario 1GB de RAM Se necesita 4GB de RAM
Reconoce solo 3.5 GB de RAM Reconoce 128 GB de RAM
Máximo de memoria por Memoria limitada para cada
programa 2GB programa
Funcionan todos los dispositivos Es necesario controladores de 64
compatibles con Windows 8 bits para los dispositivos
Funcionan todos los programas Funcionan solo programas
compatibles con Windows 8 creados para 64 bits
Se pueden usar drivers de Todos los drivers tienen que estar
dispositivos sin firmar firmados digitalmente
Sistemas más económicos, Funciones adicionales de
ideales para el uso general seguridad como D.E.P y mayor
rendimiento en general

1.1.2. Tipos de Buses

Bus.- Un bus es un conjunto de líneas utilizadas para la transición de datos. Los buses se
caracterizan por el número de bits que pueden transmitir en un determinado momento. Si un
bus está compuesto por 16 líneas, podrá enviar 16 bits de información al mismo tiempo. [1]

La función del bus es la de permitir la conexión lógica entre distintos subsistemas de un sistema
digital, enviando datos entre dispositivos de distintos órdenes: desde dentro de los mismos circuitos
integrados, hasta equipos digitales completos que forman parte de supercomputadoras.
La mayoría de los buses están basados en conductores metálicos por los cuales se trasmiten señales
eléctricas que son enviadas y recibidas con la ayuda de integrados que poseen una interfaz del bus
dado y se encargan de manejar las señales y entregarlas como datos útiles. Las señales digitales que
se trasmiten son de datos, de direcciones o señales de control.
TIPOS DE BUS

• Bus Serial

Los datos son enviados de bit a bit, se construye por medio de registros o rutinas de software.
Es usado desde hace menos de 10 años en buses para discos duros, unidades de estado sólido.
Está formado por pocos conductores y su ancho de banda depende de la frecuencia

Los puertos seriales (también llamados RS-232, por el nombre del estándar al que hacen
referencia) fueron las primeras interfaces que permitieron que los equipos intercambien
información con el "mundo exterior".

• Bus Paralelo

Ha sido utilizado de manera intensiva desde: el bus del procesador, los buses de discos
duros, tarjetas de expansión y de video, hasta las impresoras.
La transmisión de datos paralela consiste en enviar datos en forma simultánea por
varios canales (hilos). Los puertos paralelos en los PC pueden utilizarse para enviar 8 bits
(un octeto) simultáneamente por 8 hilos.
Ha sido utilizado de manera intensiva desde: el bus del procesador, los buses de discos
duros, tarjetas de expansión y de video, hasta las impresoras.

- LINEAS DE DIRECCION: (posición)


- LINEAS DE CONTROL: (señales de arbitraje)
- LINEAS DE DATOS: (transmiten los bits)

PUERTO USB

El Bus Universal en Serie (BUS) (en inglés: Universal Serial Bus), más conocido por la sigla USB,
es un bus estándar industrial que define los cables, conectores y protocolos usados
en un bus para conectar, comunicar y proveer de alimentación eléctrica entre computadoras,
2
periféricos y dispositivos electrónicos.
Su desarrollo partió de un grupo de empresas del sector que buscaban unificar la forma de conectar
periféricos a sus equipos, por aquella época poco compatibles entre sí, entre las que estaban Intel,
Microsoft, IBM, COMPAQ, DEC, NEC y Nortel. La primera especificación completa 1.0 se publicó en
1996, pero en 1998 con la especificación 1.1 comenzó a usarse de forma masiva.

El bus USB permite adjuntar dispositivos periféricos a la computadora rápidamente, sin necesidad
de reiniciar la computadora ni de volver a configurar el sistema.
El bus USB puede trabajar en dos modos, a baja velocidad (1.5 Mbps, para dispositivos como
teclados, ratones, que no manejan grandes cantidades de información) y a alta velocidad (12 Mbps,
para dispositivos como unidades de CDROM, altavoces, módems RTC e ISDN, etc.)
El USB es utilizado como estándar de conexión de periféricos como: teclados, ratones, memorias
USB, joysticks, escáneres, cámaras digitales, teléfonos móviles, reproductores multimedia,
impresoras, dispositivos multifuncionales, sistema de adquisición de datos, módems, tarjetas de
red, tarjetas de red, tarjetas de sonido, tarjetas sintonizadores de televisión y grabadoras de DVD
externa, discos duros externos y disqueteras externas. Su éxito ha sido total, habiendo desplazado
a conectores como el puerto serie, puerto paralelo, puerto de juegos, Apple Desktop Bus o PS/2 a
mercados-nicho o a la consideración de dispositivos obsoletos a eliminar de las modernas
computadoras, pues muchos de ellos pueden sustituirse por dispositivos USB que implementen esos
conectores.

USB 2.0

USB 3.0
1.2. ACONDICIONAMIENTO DE SEÑALES DIGITALES
1.2.1. Tratamiento anti rebotes para pulsadores por software y hardware.
Para detectar que se presionó el botón se está revisando el estado del pin 0 del puerto A
con la instrucción btfsc, mientras el estado del pin sea 1 la ejecución del programa
quedará ciclada en el mismo punto, una vez que el estado cambia a 0, es decir se presionó
el botón, el programa salta a la rutina anti rebote.
En el momento de presionar un botón pulsador o cualquier conmutador electromecánico es
inevitable que se produzca un pequeño arco eléctrico durante el breve instante en que las placas
del contacto se aproximan o se alejan de sus puntos de conexión, ya que las distancias microscópicas
entre los puntos a diferente potencial son suficientes para romper por un instante la resistividad del
aire. Este fenómeno se conoce como rebote (bounce) y se ilustra en la siguiente figura:

Circuito Anti rebote


 Circuito anti rebote con hardwar
 Circuito anti rebote con software

La ventaja de este circuito es que elimina el problema de inducciones en nuestra entrada digital de
Arduino, un problema debido a la poca corriente necesaria para activar la entrada de nuestra placa.
Otro programa:

La teoría es bastante sencilla, el programa espera a que se pulse una tecla, cuando detecta la pulsación
guarda el número de tecla pulsada en una variable, luego comprueba que sea la primera vez que se
pulsó, si es así actúa en consecuencia y si es que está pulsada desde antes, comprueba que haya
pasado un tiempo determinado para volver a tenerla en cuenta. De este modo se puede hacer, por
ejemplo un reloj que cuando se incremente alguno de sus parámetros, por ejemplo los minutos, y la
tecla correspondiente se mantenga pulsada, luego del primer incremento comience a avanzar mas
rápido.

He aquí el código en CCS C:


#include <16f88.h>
#use delay(clock=8MHz)
#use fast_io(all)
#fuses MCLR,NOPUT,INTRC_IO,NOWDT,NOBROWNOUT

#define Tec1 PIN_B0


#define Tec2 PIN_B1
#define Tec3 PIN_B2
#define Tec4 PIN_B3 //Pines del PIC correspondientes a cada tecla.

#define Nada 0
#define Mas 1 // valores validos para Flag
#define Menos 2

int Segs; // Segundos.


int Minu; // Minutos.
int Hora; // Hora.
int Tmp; // Temporal.
int Tecla; // Tecla pulsada.
int anTecla; // Tecla pulsada en la comprobacion anterior
int Tiempo; // Tiempo transcurrido desde la ultima comprobacion
// de teclado.
int CuantoTiempo; // Cuanto tiempo debe esperar para la
// proxima comprobacion.
int Flag; // Flag para incrementar o decrementar
// el valor deseado.
int Set; // Flag para seleccionar el valor a cambiar.

void main(){

setup_oscillator(OSC_8MHz);

set_tris_a(0); // Puerto A como salida


set_tris_b(0b00001111); // Puerto B<7:4> salida B<3:0> entradas

// Inicio Variables
anTecla=255;
Set=0;
Hora=0;
Minu=0;
Segs=0;

do{

Tecla=0;
if (input(Tec1))Tecla=1; // Comprueba que pulsador se activó
if (input(Tec2))Tecla=2; // y lo guarda en Tecla
if (input(Tec3))Tecla=3;
if (input(Tec4))Tecla=4;

if (++Tiempo>CuantoTiempo||Tecla!=anTecla) { // Incrementa el
// tiempo transcurrido, Si se pasa de
// CuantoTiempo o cambia el estado de
// de las teclas con respecto a la
// iteracion anterior.
Flag=Nada; // Limpia el flag

if(Tecla!=0){ // Si hay una tecla pulsada


if(Tecla!=anTecla){ // si la tecla es la primera
// vez que se pulsa.
CuantoTiempo=100; // establece el tiempo de
// espera en 100.
if(Tecla==1){ // Si se pulsó la tecla 1
if(++Set>3) Set=1; // Avanza el flag para setear
// segs/minu/hora
}
if(Tecla==4) Set=0; // Se pulsó la tecla 4, desactiva
// el modo configuracion

}else{ // Si no es la primera vez que se


// pulsa la tecla
CuantoTiempo=30; // la proxima comprobacion la
// hará en menos tiempo.
}

if(Tecla==2) Flag=Menos; // Si la tecla pulsada es la 2


// flag de decremento
if(Tecla==3) Flag=Mas; // y si es la 3 flag de incremento
}

if (Set!=0){ // Si está en modo configuracion

if(Set==1) Tmp=Segs; // Si se está configurando los


// segundos Segs a temporal
if(Set==2) Tmp=Minu; // lo mismo si está configurando
// los minutos
if(Set==3) Tmp=Hora; // o la hora

if (Flag==Menos){ // si el flag es de decremento


if(--Tmp>200)Tmp=59; // le resta 1 al temporal si es
// menor a 0 pasa a 59
if(Set==3&&Tmp==59)Tmp=23;// Si está configurando las
// horas el limite es 23
}

if (Flag==Mas){ // Si el flag es de incremento


if(++Tmp>59)Tmp=0; // Incrementa el temporal y si
// se pasa de 59 vuelve a 0
if(Set==3&&Tmp>23)Tmp=0;// Si configura las horas y
// se pasa de 23 vuelve a 0
}

if(Set==1) Segs=Tmp;
if(Set==2) Minu=Tmp; // Guarda el valor temporal
if(Set==3) Hora=Tmp; // en donde corresponda...
}
anTecla=Tecla; // Almacena la tecla pulsada
// para la próxima
Tiempo=0; // iteración, Tiempo a 0 para
// volver a contar el tiempo

}
delay_ms(5); // Entre iteración e iteración espera 5 ms que
// multiplicado por CuantoTiempo, es el tiempo
// que tarda en reaccionar a las pulsaciones y
// cuanto tarda en avanzar cuando se mantiene
// pulsado un botón.

}while(true);
}

Implementación en proteus

1.2.2. Aplicación de circuitos electrónicos para protección y el aislamiento eléctrico de los


dispositivos electrónicos del PC.

Introducción
La mayoría de los equipos eléctricos y electrónicos (entre ellos los computadores personales) han sido
diseñados para poder conectarse directamente en cualquier oficina o residencia típica de los países
desarrollados donde, desde hace muchos años, se exige el cumplimiento de estrictas normas de
seguridad para las instalaciones eléctricas. El "National Electrical Code" o NEC de los Estados Unidos ha
sido traducido recientemente a nuestro idioma y adaptado a las condiciones específicas de varios
países latinoamericanos.
La norma NTC-2050, disponible en el Instituto Colombiano de Normas Técnicas ICONTEC, fue
declarada "Código Eléctrico Colombiano" o CEC y oficializada con carácter de obligatoria para todo
el territorio colombiano mediante la resolución 1936-87 de la Superintendencia de Industria y
Comercio.
Ya que el CEC está fuera del alcance de la mayoría de los colombianos por su
extensión, lenguaje técnico y alto precio, en este artículo se ha querido resumir las principales normas
y conceptos técnicos relacionados con la instalación de computadores. Se estima que más del 95% de
las instalaciones eléctricas de computadores en Colombia violan el CEC y si entre ellas está la de su
computador, la compañía de seguros o su proveedor podrán rehusarse a reconocerle cualquier daño.
Conceptos básicos
Los conductores utilizados para alimentar los aparatos eléctricos se conocen como fase y neutro. La
fase, es la encargada de llevarle la corriente al equipo desde el transformador público, pasando por el
"breaker" (disyuntor que se dispara cuando la corriente excede la capacidad de los cables) y el
interruptor (switch) que permite encenderlo o apagarlo. Una vez la corriente haya alimentado el
equipo, debe regresar nuevamente hasta el transformador utilizando el conductor neutro.
La mayoría de las instalaciones residenciales y rurales tienen dos fases de 110 voltios (220 entre ellos)
mientras que las de los edificios y las zonas industriales tienen tres fases de 120 voltios (208 entre
ellos). En todas las instalaciones, las empresas de energía conectan el neutro a una varilla enterrada
(electrodo) al pie del poste del transformador, con lo cual le aplican el mismo voltaje (tensión) del
terreno donde está situada la edificación (cero voltios), de tal manera que cualquier persona podría
tocarlo sin electrizarse. Sin embargo, hay que tener la precaución de no tocar los conductores fases a
menos que la persona se aísle completamente. Recuerde que la corriente eléctrica sólo circula si
varias partes del cuerpo tocan voltajes diferentes (observe que las golondrinas sólo tocan un cable
de alta tensión a la vez).
Con el fin de garantizar que al apagar el interruptor se desconecte el conductor fase, para impedir la
entrada de la corriente al equipo (y no el neutro para evitar su salida), el CEC exige la utilización
de tomacorrientes polarizados que se distinguen por tener el conector del neutro un poco mayor que
el de la fase. Todos los equipos que tengan gabinete metálico deben utilizar tomacorrientes con polo
de tierra, los cuales, además de ser polarizados, tienen un tercer conector conocido como "polo de
tierra".
Para ver el gráfico seleccione la opción "Descargar" del menú superior
El concepto de tierra es uno de los más importantes y menos entendido por los responsables de
diseñar las instalaciones eléctricas, al igual que por los jefes de sistemas, técnicos e instaladores de
computadores, constituyéndose en el capítulo más violado del CEC.
La finalidad primordial de la tierra es garantizar la protección de las personas que estén en contacto
directo con equipos eléctricos o con sus gabinetes metálicos, limitando su tensión en caso de una
descarga atmosférica y garantizando el disparo inmediato de los breakers o fusibles en caso de un
cortocircuito. Además, en el caso de los computadores, la tierra debe servirles de referencia común
para loscircuitos digitales y las comunicaciones electrónicas.
A pesar de que el CEC lo exige, la mayoría de las instalaciones eléctricas en Colombia no cuentan con
una varilla enterrada (electrodo) al pie del tablero principal (algunas la tienen al pie del contador) que
"ponga a tierra" el conductor neutro (reforzando la labor del electrodo de tierra del transformador
público) y en muy pocos casos poseen un conductor de tierra que a partir de dicho tablero, conecte
todos los conductos y cajas metálicas de la instalación, además de los equipos que requieran conexión
a tierra.
¿De dónde se debe tomar la tierra?
Cuando se requiere instalar un tomacorriente con polo de tierra para instalar un computador,
generalmente se opta por alguna de las siguientes alternativas:
Para ver el gráfico seleccione la opción "Descargar" del menú superior
1. Dejar desconectado el polo de tierra del tomacorriente no es más que un engaño: el computador
queda completamente desprotegido ante un cortocircuito y expuesto a las descargas estáticas y
al ruido eléctrico de modo común (voltaje entre el neutro y la tierra) que representan su mayor
peligro.
2. Conectar el polo de tierra a una varilla independiente es el procedimiento más común a pesar de
estar expresamente prohibido por el CEC (a menos que se utilice un transformador de aislamiento)
ya que no protege contra cortos y en caso de presentarse un rayo en el transformador público se
producen arcos de corriente entre el neutro y la tierra que pueden quemar el computador aunque
se encuentre apagado o tenga regulador de voltaje, UPS o cortapicos.
3. Conectar el polo de tierra al conductor neutro está expresamente prohibido por el CEC ya que no
sólo el computador queda expuesto al voltaje residual del neutro (ruido eléctrico) sino que podría
electrizarse en caso de desconectarse accidentalmente el neutro o de invertirse la polaridad del
circuito. El neutro y la tierra deben ser conductores completamente diferentes y sólo se deben unir
en el tablero principal o en un transformador de aislamiento. Está prohibido hacer un "puente"
entre el neutro y la tierra del tomacorriente como lo han sugerido algunas publicaciones.
4. Conectar el polo de tierra al conductor general de tierra proveniente del tablero
principal parecería la solución ideal ya que así lo permite el CEC. Sin embargo, la mayoría de los
fabricantes de computadores recomiendan seguir ciertos requisitos.

Requisitos especiales de los computadores


 Utilizar una línea de tierra aislada que no sea compartida por otros equipos ni toque los conductos,
las cajas, ni los gabinetes metálicos de la instalación eléctrica para evitar el "ruido eléctrico" inducido
por cortos o fallas en otros circuitos.
 Verificar que el voltaje entre el neutro y la tierra en el tomacorriente del computador permanezca
por debajo de uno o dos voltios para garantizar la seguridad de las comunicaciones electrónicas entre
los distintos componentes de computador (y entre éste y los demás computadores interconectados
en red).

Para lograr una línea de tierra aislada se debe instalar un cable aislado (no desnudo) y preferiblemente
sin empalmes, desde la "barra de tierras" del tablero principal hasta las tomas de los computadores,
verificando que éstos sean tomacorrientes especiales de tierra aislada, donde el polo de tierra no
haga contacto con la caja metálica de conexiones como sí ocurre en las tomas normales con polo a
tierra.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ya que las normas internacionales exigen la unión del neutro y tierra en las "barras" del tablero
principal (o en el transformador de aislamiento), el voltaje que se presenta entre ellos no es más que
la caída de tensión en el cable del neutro entre dicha unión y el tomacorriente, y es proporcional a la
corriente que circula a través del cable y a su resistencia eléctrica (Voltaje = Corriente x Resistencia).
Observe que la línea de tierra aislada conserva cero voltios en toda su extensión ya que, en
condiciones normales, no circula ninguna corriente a través de ella (Voltaje = cero x Resistencia).
Por lo tanto, las únicas formas de reducir el voltaje entre neutro y tierra, permitidas por el CEC, son:

1. Disminuir la corriente por las líneas de alimentación, instalando nuevos cables de fase(s), neutro
y tierra aislada desde el tablero principal, que alimenten exclusivamente los tomas de los
computadores y evitando conectar en ellos otros equipos diferentes.
2. Reducir la resistencia de los cables de alimentación, reemplazándolos por otros de mayor calibre
(menor resistencia por cada metro de longitud). Pero tenga en cuenta que el CEC exige que la línea
de tierra sea de igual calibre que los cables de alimentación y que todos vayan por el mismo
conducto desde el tablero principal.
3. Reducir la longitud de los cables de alimentación y por lo tanto su resistencia, instalando un
transformador de aislamiento lo más cerca posible a los computadores.

¿Cuál es entonces la solución ideal?


Del panorama anterior se desprende que la solución más fácil, práctica y económica para corregir una
instalación que no haya sido diseñada originalmente para cumplir con el CEC y satisfacer las
recomendaciones de los fabricantes de computadores, es crear un nuevo sistema eléctrico "derivado
separadamente" por medio de un transformador de aislamiento.
Para ver el gráfico seleccione la opción &uml;Descargar trabajo¨ del menú superior

Las principales ventajas al usar un transformador de aislamiento son:


 No hay que modificar la instalación eléctrica general.
 Se puede utilizar un electrodo de tierra independiente (varilla enterrada, tubería metálica o
estructura del edificio) sin importar si el tablero principal cuente o no con instalación de tierra.
 Se obtiene protección contra cortos, descargas estáticas y tormentas eléctricas.
 Se obtiene un voltaje de cero voltios entre neutro y tierra al pie de los computadores.
 No se requiere instalar cables exclusivos de alimentación desde el tablero principal a menos que la
corriente total requerida por los computadores así lo exija. Si la corriente es superior a 20 amperios,
se recomienda alimentar el transformador de aislamiento con dos líneas vivas (220 voltios), con lo cual
se reduce la corriente a la mitad.

¿Qué es un acondicionador?
Es casi imposible encontrar en el mercado un transformador de aislamiento de propósito general, pues
existen muchas variables técnicas y un sinfín de accesorios que dependen de la aplicación específica
que se les quiera dar. Sin embargo, existen equipos que incorporan el transformador de aislamiento y
se conocen con el nombre de "acondicionadores de voltaje" o "acondicionadores de línea".
Para ver el gráfico seleccione la opción "Descargar" del menú superior
La mayoría de los y de los reguladores o estabilizadores de voltaje convencionales no poseen
transformador de aislamiento sino un pequeño y económico auto-transformador. Por lo tanto, ya que
son incapaces de corregir una mala instalación (como sí lo hacen los acondicionadores), sólo se
deberían usar donde la instalación eléctrica cumpla con las exigencias del CEC o conectarlos a la salida
de un buen acondicionador.
Antes de adquirir un acondicionador de voltaje debe verificar que se trate de una marca reconocida y
que posea realmente el transformador de aislamiento (debe marcar "corto" entre la tierra y el neutro
de salida y "circuito abierto" entre éstos y el neutro de entrada). Algunas marcas, incluso extranjeras,
ofrecen simples reguladores con supresores de picos como "acondicionador de voltaje" o "line
conditioner / stabilizer".
En el mercado actualmente se producen acondicionadores monofásicos, bifásicos y trifásicos, en 4
diferentes modelos y en potencias que van desde 200 VA, suficiente para soportar un pequeño
computador, hasta 100 kVA para soportar grandes redes de computadores, cumpliendo con las
normas del CEC y las más estrictas recomendaciones de los fabricantes de computadores.
En instalaciones temporales o donde no sea posible tomar la tierra de una varilla enterrada, de una
tubería metálica o de la estructura del edificio, un Acondicionador de Voltaje proporciona una
instalación eléctrica aislada (ideal desde el punto de vista del computador) equivalente a la instalación
eléctrica de un avión, donde los computadores de la nave trabajan perfectamente sin ninguna
conexión a tierra.
¿Cómo calcular la capacidad del acondicionador?
Aunque casi todos los equipos electrónicos modernos trabajan entre 102 y 132 VAC (voltios de
corriente alterna) a 50 ó 60 Hertz (ciclos por segundo), no todos consumen la misma potencia (vatios
o voltio-amperios). Para calcular la potencia total en voltio-amperios (VA) de los computadores y sus
accesorios, sume todos los "consumos de placa" (localizada generalmente por detrás o por debajo) de
los equipos. Si el consumo aparece en vatios o "watts" (W) divídalo por 0.7 (factor de potencia típico
de los computadores) y si aparece en amperios (A) multiplíquelo por 120 (voltios) o por el voltaje
nominal que aparezca en la placa.
Es posible que el cálculo anterior le sugiera adquirir un acondicionador mayor al el que realmente
necesita, ya que en muchos equipos la corriente de placa sólo se presenta al encenderlos (cuando
están fríos) y puede ser hasta 20 veces mayor que en estado estable. Por lo tanto, si tiene la precaución
de encender cada componente por separado, podrá conectar fácilmente dos, tres o más
computadores personales (dependiendo de su configuración) a un buen acondicionador de 1 kVA
(1000 VA) o entre cinco y diez a uno de 2 kVA. La impresoras modernas de inyección de tinta consumen
menos de 50 VA, pero las láser suelen consumir alrededor de 1 kVA.
Instalación de redes de computadores

Recuerde que una de las finalidades de la de tierra es proporcionar una referencia común para las
comunicaciones electrónicas de los computadores, por lo tanto, para garantizar una comunicación
confiable y evitar daños en los módulos de comunicaciones (al presentarse voltajes diferentes en los
extremos de los cables de datos), todos los computadores, impresoras y equipos de comunicaciones
de una redlocal deben utilizar la misma tierra como referencia a menos que su comunicación sea
inalámbrica (fibra óptica, radio-frecuencia, rayos infrarrojos, etc.).
Cuando hay muchos computadores situados en una misma área, se recomienda utilizar un
acondicionador general y diseñar, a partir de él, una instalación eléctrica exclusiva para los
computadores: A la salida del acondicionador se debe instalar un tablero auxiliar con "barras aisladas"
para neutros y tierras, y para minimizar la caída de tensión en los conductores no se deben manejar
más de 10 ó 15 amperios en cada circuito ni compartir cables entre circuitos diferentes. Los neutros
deben ser blancos o grises, las tierras verdes (continuo o con rayas amarillas) y las fases negros o de
cualquier otro color diferente.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Si se utilizan conductos, canaletas, cajas o divisiones metálicas para instalar los tomacorrientes, hay
que manejar dos conductores de tierra para cada circuito: uno general (tierra de blindaje) para
conectar las piezas metálicas de la instalación y otro aislado para conectar las tomas (de tierra aislada),
por lo tanto, donde sea posible, es preferible utilizar conductos y cajas de PVC para los tomas y usar
canaletas plásticas para distribuir los cables de datos.
En un sistema eléctrico "derivado separadamente" hay que garantizar el aislamiento total entre todos
sus conductores y los de la instalación eléctrica general (incluyendo los cables de tierra). De lo
contrario, el CEC exige utilizar el mismo electrodo para ambos o unir sólidamente el electrodo
separado con el del tablero principal por medio de un cable calibre 6 o superior, dependiendo de la
distancia entre los electrodos. Igualmente, si en una instalación existen varios acondicionadores que
protejan equipos de una misma red, todos deberán utilizar el mismo electrodo de tierra, a menos que
se unan todos los electrodos para formar una "malla de tierras".
Si la instalación es trifásica, el transformador de aislamiento debe tener configuración "delta-estrella"
y el neutro de salida debe tener el doble del calibre de los conductores vivos, ya que las corrientes
retornadas por los computadores no se anulan en el neutro, como sí ocurre con otros tipos de cargas
balanceadas alimentadas con transformadores trifásicos.
Protección para la línea telefónica
Cada vez es más común encontrar computadores con fax, módem o contestador telefónico
incorporado, los cuales, además de las tres líneas eléctricas (vivo, neutro y tierra) permanecen
conectados a las dos líneas que conforman el par telefónico. Teniendo en cuenta que cualquier
sobrevoltaje que se presente entre dos de las cinco líneas puede dañar el computador (aún estando
apagado ya que el interruptor sólo desconecta la línea viva), es fundamental "acondicionar" también
la entrada de la línea telefónica al computador.
Para lograrlo, existen pequeños pero sofisticados protectores, adaptables a cualquier equipo
telefónico: fax, módem, planta telefónica, teléfono inalámbrico, etc. Estos protectores son
un modelo avanzado que poseen un pararrayos de gas (GDT), varios limitadores termosensibles de
corriente y un supresor de picos de altísima velocidad, que proporcionan la mejor protección posible
contra los rayos y sobrevoltajes, equivalente a la suministrada por protectores mucho más costosos
utilizados en las grandes plantas telefónicas digitales.
No olvide que para lograr la máxima protección es importante que sus equipos cuenten con una
adecuada instalación de tierra (tal como lo exige el CEC) o que los conecte a un Acondicionador de
Voltaje con transformador de aislamiento que les simule una instalación eléctrica ideal.

1.2.2.1. Buffer unidireccional y bidireccional

En el ámbito de la electrónica, un buffer es un dispositivo que se utiliza para evitar el efecto de carga
(también conocido como regulación) en un circuito. El buffer, en este sentido, es un amplificador
operacional que funciona como seguidor y que permite compensar las pérdidas de corriente a través
del voltaje de su fuente de alimentación.

En la electrónica digital existen dos valores 0 y 1 el buffer de tres estados logra la creación de un nuevo
estado, es el estado de alta impedancia donde la salida no va tener tensiones altas ni bajas, sino un
aislamiento de protección para los elementos de un circuito, que normalmente se utiliza para realizar
interconexiones con los buses en las microcomputadoras como parte de microprocesador y de RAM.

Actualmente están disponibles muchos dispositivos denominados adaptadores de interfaces de


periféricos (PIA) que contienen cerrojos, buffers, registros y líneas de control, están disponibles para
cada microprocesador y cuidan las necesidades de entrada y salida del sistema.

Los cerrojos se encuentran en las familias TTL y CMOS, vienen normalmente en versiones de flip-flops
D de 4 u 8 bits, algunos tienen salidas de tres estados. Los cerrojos que hemos estudiado sólo permiten
que los datos fluyan de la entrada a la salida pero el transceptor de bus es la diferencia, ya que este
dispositivo permite que los datos fluyan en ambas direcciones.

Para ejemplificar se ilustraran a continuación dos buffers uno unidireccional y uno bidireccional
para observar su configuración de pines:

1.2.2.2. Relé electromecánico y de estado sólido

Un relé es un interruptor accionado por un electroimán. Un electroimán está formado por una barra
de hierro dulce, llamada núcleo, rodeada por una bobina de hilo de cobre .
Al pasar una corriente eléctrica por la bobina (Fig. 2) el núcleo de hierro se magnetiza por efecto del
campo magnético producido por la bobina, convirtiéndose en un imán tanto más potente cuanto
mayor sea la intensidad de la corriente y el número de vueltas de la bobina. Al abrir de nuevo el
interruptor y dejar de pasar corriente por la bobina, desaparece el campo magnético y el núcleo
deja de ser un imán.

El relé nos permite controlar mediante una pequeña corriente en el circuito de entrada, un circuito
de salida de mayor potencia, aislando ambos circuitos y permitiendo que puedan operar con
tensiones diferentes. Cuando son utilizados para controlar potencias muy elevadas, como por
ejemplo para accionar el motor de un ascensor, al relé se le denomina "contactor".
Existen diferentes tipos de relés en función del número de contactos o polos fijos y móviles de que
dispone, de la tensión de su bobina, de la corriente que pueden soportar sus contactos, de su
estructura y de su modo de operación.
Aunque han irrumpido con fuerza en el mercado los relés de estado sólido, basados en un circuito
híbrido, generalmente compuesto por un Opto-Triac. Aún siguen siendo más utilizados en la gran
mayoría de aplicaciones, los relés electromecánicos. [5]

Un Rele electromecanico consta de una bobina que, al ser atravesada por una corriente eléctrica,
genera un campo magnético que atrae una placa y con ella cierra un contacto. Es una manera fácil y
rápida de adaptar dos circuitos y aislados eléctricamente. Por ejemplo se podría usar para controlar
el encendido de una bombilla con un señal proveniente de un µC.
Su aspecto es similar a estos:
in embargo tiene inconvenientes, uno de ellos es que al ser mecánico tiene partes móviles que se
desgastan y pueden terminar fallando. Tampoco permite grandes velocidades de conmutación, pasar
de un estado de reposo a conmutado supone mover una placa metálica y eso lleva su tiempo. Otro
problema quizá más grave es que con el tiempo se puede generar carbonilla entre los contactos de
trabajo debido a las chispas que saltan al conmutar o soltar un circuito de alta tensión. Además el relé
produce un ruido, un “clack” característico cada vez que se activa o desactiva; en algunos entornos
puede resultar molesto, sobre todo si la conmutación se hace a velocidades altas.

Estos son dos símbolos comunes del relé:

Se aprecian los dos contactos de la bobina marcados como L1 y L2. Si no circula corriente por la bobina
la placa está en reposo conectando de este modo la patilla “común” con la patilla NC (Normally Close,
normalmente cerrada), pero si se aplica corriente entonces la placa hará contacto con el otro borne,
el NO (Normally Open, o normalmente abierto). Los dos circuitos están aislados así que podremos
alimentar la bobina con 5V, por ejemplo con la salida del Arduino, y conectar en el otro circuito una
carga de más tensión, por ejemplo 220V / 3 A; las características dependerán del relé.
Algo que se debe tener muy presente siempre en un circuito con relé es la fuerza electromotriz
autoinducida (FEM). Al circular corriente por la bobina se crea un campo magnético, pero en el
momento de desconectarla ese campo magnético induce un campo eléctrico de signo opuesto en la
bobina que puede llegar a dañar el circuito de control conectado a ésta. Por esto muchas veces verás
los circuitos de control de un relé protegidos de la siguiente manera:
En lugar de conectar directamente la salida del Arduino a la bobina, se suele intercalar un transistor
funcionando en corte-saturación (si hay un “1” lógico a la salida del Arduino, el transistor se satura y
se comporta como un interruptor cerrado; si hay un “0” lógico el transistor se comporta como un
interruptor abierto) Las dos resistencias sirven para limitar la corriente y polarizar la base del
transistor. El diodo no afectará al funcionamiento normal del circuito, sólo cuando el transistor se
encuentre en corte (no conduciendo) cerrará el circuito de la bobina permitiendo descargarse y
absorbiendo de este modo la corriente autoinducida. En el ejemplo hemos conectado la carga a una
tensión de +150V con respecto a masa, al estar aislada del circuito de la bobina, ésta se mantendrá
protegida.

Hoy en día el relé electromecánico se ha sustituido por otros dispositivos como los triacs que no
poseen partes móviles y pueden funcionar a frecuencias de conmutación mayores.

Un relé de estado sólido (SSR en inglés) es un dispositivo interruptor electrónico que conmuta el paso
de la electricidad cuando una pequeña corriente es aplicada en sus terminales de control. Los SSR
consisten en un sensor que responde a una entrada apropiada (señal de control), un interruptor
electrónico de estado sólido que conmuta el circuito de carga, y un mecanismo de acoplamiento a
partir de la señal de control que activa este interruptor sin partes mecánicas. El relé puede estar
diseñado para conmutar corriente alterna o contínua. Hace la misma función que el relé
electromecánico, pero sin partes móviles.
Los relés de estado sólido utilizan semiconductores de potencia como tiristores y transistores para
conmutar corrientes hasta más de 100 amperios. Los relés SSR pueden conmutar a muy altas
velocidades (del orden de milisegundos) en comparación a los electromecánicos, y no tienen contactos
mecánicos que se desgasten. A la hora de aplicar este tipo de relés debe tenerse en cuenta su baja
tolerancia para soportar sobrecargas momentáneas, comparado con los relés electromecánicos, y su
mayor resistencia al paso de la corriente en su estado activo.
Ventajas con respecto a los relés electromecánicos
La mayoría de las ventajas son comunes en los equipos de estado sólido sobre los equipos
electromecánicos:

 Menor tamaño, permitiendo elementos más compactos y automatizables.


 Menor tensión de trabajo, se activan desde 1,5V o menos.
 Funcionamiento totalmente silencioso.
 Los SSR son más rápidos que los relés electromecánicos; su tiempo de conmutación depende
del tiempo requerido para encender el LED de control, del orden de microsegundos a
milisegundos.
 Vida útil más larga, incluso si se activa muchas veces, ya que no hay partes mecánicas que se
desgasten o contactos que se deterioren a altos amperajes.
 La resistencia de salida se mantiene constante independientemente del uso.
 Limpieza de conexión, no hay rebote en la conmutación de los contactos.

 Sin chispas, no se producen arcos eléctricos, lo que permite ser usados en ambientes
explosivos donde es crítico que no se produzcan chispas en la conexión.
 Mucho menos sensible al almacenaje y ambiente operativo, como los golpes, vibraciones,
humedad, y campos magnéticos externos.
 No produce ondas electromagnéticas que puedan producir interferencias en otros equipos.
Desventajas con respecto a los reles electromecánicos
 Características de voltaje/corriente del semiconductor más que de los contactos mecánicos:
 Con circuito cerrado, mayor resistencia (pérdidas en forma de calor).
 En abierto, menor resistencia, con una pequeña corriente inversa de pérdida (del orden de
µA).
 Las propiedades Voltaje/corriente no son lineales (no puramente resistivas), distorsionando
las alternas conmutadas hasta cierto punto. Un relé electromecánico tiene baja resistencia
óhmica (lineal) del interruptor mecánico asociado cuando se activa, y una enorme resistencia
de la separación de aire y las partes aislantes cuando está en abierto.
 La polaridad de la salida afecta a algunos tipos de SSR; a los mecánicos no les afecta.
 Posibilidad de falsas conmutaciones debido a cargas transitorias, debido a la capacidad de
conmutación mucho más rápida.
 Se requiere una alimentación aislada para el circuito de la puerta de activación.
 Mayor tiempo de recuperación de la corriente inversa transitoria debido a la presencia del
cuerpo del diodo.
 Tienen tendencia a quedar en circuito cerrado cuando fallan, mientras que los mecánicos
tienden a quedar en abierto, que suele ser preferible.
1.2.2.3. Optoacoplador

Un optoacoplador, también llamado optoaislador o aislador acoplado ópticamente, es un


dispositivo de emisión y recepción que funciona como un interruptor activado mediante la luz
emitida por un diodo LED que satura un componente opto electrónico, normalmente en forma de
fototransistor o fototriac. De este modo se combinan en un solo dispositivo semiconductor, un
fotoemisor y un fotorreceptor cuya conexión entre ambos es óptica. Estos elementos se encuentran
dentro de un encapsulado que por lo general es del tipo DIP. Se suelen utilizar para aislar
eléctricamente a dispositivos muy sensibles.
La figura muestra un optoacoplador 4N35 formado por un LED y un fototransistor. La tensión de la
fuente de la izquierda y la resistencia en serie establecen una corriente en el LED emisor cuando se
cierra el interruptor S1. Si dicha corriente proporciona un nivel de luz adecuado, al incidir sobre el
fototransistor lo saturará, generando una corriente en R2. De este modo la tensión de salida será
igual a cero con S1 cerrado y a V2 con S1 abierto.
Si la tensión de entrada varía, la cantidad de luz también lo hará, lo que significa que la tensión de
salida cambia de acuerdo con la tensión de entrada. De este modo el dispositivo puede acoplar una
señal de entrada con el circuito de salida, aunque hay que tener en cuenta que las curvas tensión/luz
del LED no son lineales, por lo que la señal puede distorsionarse. Se venden optoacopladores
especiales para este propósito, diseñados de forma que tengan un rango en el que la señal de salida
sea casi idéntica a la de entrada.
La ventaja fundamental de un optoacoplador es el aislamiento eléctrico entre los circuitos de
entrada y salida. Mediante el optoacoplador, el único contacto entre ambos circuitos es un haz de
luz. Esto se traduce en una resistencia de aislamiento entre los dos circuitos del orden de miles de
MΩ. Estos aislamientos son útiles en aplicaciones de alta tensión en las que los potenciales de los
dos circuitos pueden diferir en varios miles de voltios.

Diferentes tipos de Optoacopladores

Fototransistor: se compone de un optoacoplador con una etapa de salida formada por un transistor
BJT.
Fototriac: se compone de un optoacoplador con una etapa de salida formada por un triac

Fototriac de paso por cero: Optoacoplador en cuya etapa de salida se encuentra un triac de cruce por
cero. El circuito interno de cruce por cero conmuta al triac sólo en los cruce por cero de la corriente
alterna.
1.2.2.4. Triac
Es un dispositivo semiconductor de tres terminales que se usa para controlar el flujo de corriente
promedio a una carga, con la particularidad de que conduce en ambos sentidos y puede ser
bloqueado por inversión de la tensión o al disminuir la corriente por debajo del valor de
mantenimiento. El triac puede ser disparado independientemente de la polarización de puerta, es
decir, mediante una corriente de puerta positiva o negativa.
Un triac es fundamentalemente un diac con una terminal de compuerta para controlar las
condiciones de encendido del dispositivo bilateral en cualquier dirección. Su funcionamiento es
similar a la del SCR. [2,Página 940]

DESCRIPCION GENERAL

Cuando el triac conduce, hay una trayectoria de flujo de corriente de muy baja resistencia de una
terminal a la otra, dependiendo la dirección de flujo de la polaridad del voltaje externo aplicado.
Cuando el voltaje es más positivo en MT2, la corriente fluye de MT2 a MT1 en caso contrario fluye
de MT1 a MT2. En ambos casos el triac se comporta como un interruptor cerrado. Cuando el triac
deja de conducir no puede fluir corriente entre las terminales principales sin importar la polaridad
del voltaje externo aplicado por tanto actúa como un interruptor abierto. Debe tenerse en cuenta
que si se aplica una variación de tensión importante al triac (dv/dt) aún sin conducción previa, el
triac puede entrar en conducción directa.
CONSTRUCCION BASICA, SIMBOLO, DIAGRAMA EQUIVALENTE

La estructura contiene seis capas como se indica en la FIG. 1, aunque funciona siempre como un
tiristor de cuatro capas. En sentido MT2-MT1 conduce a través de P1N1P2N2 y en sentido MT1-
MT2 a través de P2N1P1N4. La capa N3 facilita el disparo con intensidad de puerta negativa. La
complicación de su estructura lo hace más delicado que un tiristor en cuanto a di/dt y dv/dt y
capacidad para soportar sobre intensidades. Se fabrican para intensidades de algunos amperios
hasta unos 200 A eficaces y desde 400 a 1000 V de tensión de pico repetitivo. Los triac son
fabricados para funcionar a frecuencias bajas, los fabricados para trabajar a frecuencias medias son
denominados alternistores En la FIG. 2 se muestra el símbolo esquemático e identificación de las
terminales de un triac, la nomenclatura Ánodo 2 (A2) y Ánodo 1 (A1) pueden ser reemplazados por
Terminal Principal 2 (MT2) y Terminal Principal 1 (MT1) respectivamente. El Triac actúa como dos
rectificadores controlados de silicio (SCR) en paralelo Fig. 3, este dispositivo es equivalente a dos
latchs

La FIG. 4 describe la característica tensión – corriente del Triac. Muestra la corriente a través del
Triac como una función de la tensión entre los ánodos MT2 y MT1. El punto VBD (tensión de ruptura)
es el punto por el cual el dispositivo pasa de una resistencia alta a una resistencia baja y la corriente,
a través del Triac, crece con un pequeño cambio en la tensión entre los ánodos. El Triac permanece
en estado ON hasta que la corriente disminuye por debajo de la corriente de mantenimiento IH.
Esto se realiza por medio de la disminución de la tensión de la fuente. Una vez que el Triac entra en
conducción, la compuerta no controla más la conducción, por esta razón se acostumbra dar un pulso
de corriente corto y de esta manera se impide la disipación de energía sobrante en la compuerta. El
mismo proceso ocurre con respecto al tercer cuadrante, cuando la tensión en el ánodo MT2 es
negativa con respecto al ánodo MT1 y obtenemos la característica invertida. Por esto es un
componente simétrico en cuanto a conducción y estado de bloqueo se refiere, pues la característica
en el cuadrante I de la curva es igual a la del III

Conversor de niveles de voltaje

Conversor de niveles lógicos

Es muy complejo tratar de conectar un dispositivo de 3.3 V a un sistema de 5 V. El convertidor de nivel


lógico es un convertidor de o que baja de forma segura las señales de 5 V a 3.3 V y pasos de hasta 3.3
V y 5 V. Algunos convertidores de nivel también funcionan con dispositivos de 2.8 V y 1.8 V. Cada
convertidor de nivel tiene la capacidad de conversión de la parte alta a la parte baja. Dos entradas y
dos salidas se proporcionan para cada lado. Puede ser utilizado con serie normal, I2C, SPI, y cualquier
señal digital. No funciona con una señal analógica. El convertidor de nivel es muy fácil de usar. La placa
tiene que ser alimentada por las dos fuentes de tensiones (de alta tensión y baja tensión) que el
sistema está utilizando. El alto voltaje (5 V, por ejemplo) a los pines 'HV', bajo voltaje (2.8 V, por
ejemplo) a 'BT', y la tierra del sistema para fijar el "GND". Los orificios se etiquetan como entradas y
salidas. Éstos son relativos a la placa. Uno digital de entrar en el pasador de RXI en el lado de 5 V se
mostrará en el pin RXO en el lado de 3.3 V a 3.3 V. Uno digital de entrar en el pasador de TXI en el lado
de 3.3 V se mostrará en el pin TXO en el lado de 5 V con 5 V.

Los pines señalados anteriormente corresponden al modelo Sparkfun BOB 12009

1.2.2.5. Conversores ADC/DAC

Conversión Digital-Analógica

El proceso es realizado por un conversor digital-analógico (CDA). Dicho proceso es justamente el


inverso al que realiza el conversor analógico-digital (CAD). Se parte de muestras en formato digital
(valores discretos), y éstas se deben convertir en una señal analógica (valores continuos).

El conversor D/A asocia a cada valor binario un nivel de tensión previamente establecido, y genera
muestras de tensión utilizando dichos niveles, aplicando un intervalo de tiempo constante entre
muestras.

D C B A VS
AL
0 0 0 0 0V
0 0 0 1 1V
0 0 1 0 2V
0 0 1 1 3V
0 1 0 0 4V
0 1 0 1 5V
0 1 1 0 6V
0 1 1 1 7V
1 0 0 0 8V
1 0 0 1 9V
1 0 1 0 10V
1 0 1 1 11V
1 1 0 0 12V
1 1 0 1 13V
1 1 1 0 14V
1 1 1 1 15V

Para ello, se debe unir cada muestra con la que le sucede. Dicha unión es necesaria para hacer
que la señal vuelva a ser continua en el tiempo. Existen muchas técnicas que hacen esto posible.
La más sencilla consiste en mantener el nivel de tensión de una muestra hasta que llegue la
muestra siguiente. Otras técnicas más complejas emplean la muestra actual y las muestras
anteriores para predecir la siguiente muestra.

Después de este proceso, la señal aún presenta cierto grado de distorsión. Por ello, se suele aplicar
un proceso de filtrado que suaviza la señal. Si la frecuencia de muestreo y la resolución han sido
apropiadas, la señal resultante será una buena reconstrucción de la señal original.
Para realizar esa tarea, el conversor ADC (Analog-to-Digital Converter - Conversor Analógico Digital)
tiene que efectuar los siguientes procesos:

1.- Muestreo de la señal analógica.


2.- Cuantización de la propia señal
3.- Codificación del resultado de la cuantización, en código binario.

Representación gráfica de medio ciclo positivo (+) , correspondiente a una señal eléctrica analógica
de< sonido, con sus correspondientes armónicos. Como se podrá observar, los valores de variación
de la< tensión o voltaje en esta sinusoide pueden variar en una escala que va de “0” a “7” volt.

Para convertir una señal analógica en digital, el primer paso consiste en realizar un muestreo
(sampling) de ésta, o lo que es igual, tomar diferentes muestras de tensiones o voltajes en diferentes
puntos de la onda senoidal. La frecuencia a la que se realiza el muestreo se denomina razón, tasa o
también frecuencia de muestreo y se mide en kilohertz (kHz). En el caso de una grabación digital de
audio, a mayor cantidad de muestras tomadas, mayor calidad y fidelidad tendrá la señal digital
resultante.

Durante el proceso de muestreo se asignan valores numéricos equivalentes a la tensión o voltaje


existente en diferentes puntos de la sinusoide, con la finalidad de realizar a continuación el proceso
de cuantización.

Las tasas o frecuencias de muestreo más utilizadas para audio digital son las siguientes:

 24 000 muestras por segundo (24 kHz)

 30 000 muestras por segundo (30 kHz)

 44 100 muestras por segundo (44,1 kHz) (Calidad de CD)

 48 000 muestras por segundo (48 kHz)

Para realizar el muestreo (sampling) de una señal eléctrica analógica y convertirla después en digital,
el< primer paso consiste en tomar valores discretos de tensión o voltaje a intervalos regulares en
diferentes< puntos de la onda senoidal.
Por tanto, una señal cuyo muestreo se realice a 24 kHz, tendrá menos calidad y fidelidad que otra
realizada a 48 kHz. Sin embargo, mientras mayor sea el número de muestras tomadas, mayor será
también el ancho de banda necesario para transmitir una señal digital, requiriendo también un
espacio mucho mayor para almacenarla en un CD o un DVD.
En la grabación de CDs de música, los estudios de sonido utilizan un estándar de muestreo de 44,1
kHz a 16 bits. Esos son los dos parámetros requeridos para que una grabación digital cualquiera
posea lo que se conoce como “calidad de CD”.

Cuantización de la señal analógica


Una vez realizado el muestreo, el siguiente paso es la cuantización (quantization) de la señal
analógica. Para esta parte del proceso los valores continuos de la sinusoide se convierten en series
de valores numéricos decimales discretos correspondientes a los diferentes niveles o variaciones de
voltajes que contiene la señal analógica original.
Por tanto, la cuantización representa el componente de muestreo de las variaciones de valores de
tensiones o voltajes tomados en diferentes puntos de la onda sinusoidal, que permite medirlos y
asignarles sus correspondientes valores en el sistema numérico decimal, antes de convertir esos
valores en sistema numérico binario.

Proceso de cuantización (quantization) de la señal eléctrica analógica para su conversión en señal


digital.

Codificación de la señal en código binario

Después de realizada la cuantización, los valores de las tomas de voltajes se representan


numéricamente por medio de códigos y estándares previamente establecidos. Lo más común es
codificar la señal digital en código numérico binario.

Voltajes que conforman la señal eléctrica analógica original.


En este ejemplo gráfico de codificación, es posible observar cómo se ha obtenido una señal digital y
el código binario correspondiente a los niveles de voltaje que posee la señal analógica.
La siguiente tabla muestra los valores numéricos del 0 al 7, pertenecientes al sistema decimal y sus
equivalentes en código numérico binario. En esta tabla se puede observar que utilizando sólo tres
bits por cada número en código binario, se pueden representar ocho niveles o estados de
cuantización.
Conversor Digital-Analógico (CDA)

Un conversor digital-analógico (CDA) es un dispositivo que convierte señales digitales con datos
binarios en señales de corriente o de tensión analógica.

Un CDA se basa en el siguiente diagrama:


El registro acepta una entrada digital, sólo durante la duración de la señal convert. Después de la
adquisición, el registro mantiene constante el número digital hasta que se reciba otro comando. Las
salidas del registro controlan interruptores que permiten el paso de 0[V] o el valor de la fuente de
voltaje de referencia. Los interruptores dan acceso a una red sumadora resistiva que convierten
cada bit en su valor en corriente y a continuación la suma obteniendo una corriente total. El valor
total alimenta a un amplificador operacional que realiza la conversión a voltaje y el escalamiento de
la salida.

Cada resistor de la rama está ajustado según el bit que tenga a la entrada como se muestra en el
siguiente esquema:

Luego, la tensión de salida de un conversor de n bits, está dada por:

Donde cada an representa la información binaria”0” ó”1”.

1.3. COMUNICACIONES CON LA PC


1.3.1. API de Comunicaciones de Java

API de Comunicaciones de Java

En java es una Interfaz de Programación de Aplicaciones (API siglas en ingles).

API es una proposición para poder establecer un método estándar de acceso a los puertos de
comunicaciones, así como Java es un lenguaje orientado a objetos, API nos da un conjunto de clases
utilitarias para efectuar varias clases de tareas necesarias dentro de un programa.

El paquete tiene soporte para dispositivos en serie y paralelo, y utiliza una semántica parecida a la
que se usa con streams y eventos. Para comunicarse con un dispositivo serie a través de unos de los
puertos serie de un ordenador, quizás sea la más popular conexión que se realiza en una PC, ya que
nos permite comunicarse con tipos de dispositivos periféricos tales como módems, impresoras
escáneres etc.
Para la Inicialización de las API, Java solamente puede controlar puertos de los cuales tenga
conocimiento. Y como en la última versión de JavaSoft ya viene el API de comunicaciones no es
necesario que nosotros iniciales los puertos, en el arranque el API busca los puertos disponibles y
los incorpora automáticamente.

Pasos para conectar Java con Arduino

Paso 1: Abrimos Netbeans y nos vamos a File>New project.

Seleccionamos java y java application.

Escoja un nombre para el proyecto nuevo, desmarque la opción que dice Create Main Class.

Le damos en Next >.

Ya podemos ver nuestro nuevo proyecto creado lo seleccionamos y le damos un click derecho y
seleccionamos properties.

Paso 2: Librerías

Localizamos nuestro proyecto y le damos click a la flecha que esta junto y se abrirán nuevas
carpetas y seleccionamos la que dice Libraries como se ve enseguida.

La seleccionamos con un click derecho.

Le damos click en el botón que dice Create.

En Libreries Name ponemos ARDUINO y pulsamos ok.

Tendremos que buscar la carpeta de Arduino que nos descargamos y dentro de esas carpeta
localizamos otra llamada > lib ahí se encuentran todas las librerías que necesitamos para que java
pueda comunicarse con Arduino.
Seleccionamos todos lo Jars que ahí vemos y pulsamos add JAR/Folder.

Ahora veremos la ventana anterior seleccionamos la librería que acabamos de crear y pulsamos
en. Add Libra...

Paso 3: Añadir clases

Le damos click derecho a nuestro proyecto nuevo y seleccionamos New>Java class y le ponemos
nombre a nuestra clase, en mi caso le puse "led". Presionamos Finish.

Paso 4.- Preparar Arduino.

Colocamos un led en Arduino en el pin 13.

Abrimos el ejecutable de Arduino nos vamos a File>Examples>Blink

1. Al accionar el pulsador enciendo un diodo LED, al soltar se apaga:

int buttonPin = 2;
int ledPin = 13;

int estado = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop(){
estado = digitalRead(buttonPin);

if (estado == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}

2. Ahora con dos pulsadores, al accionar el pulsador 1, enciende el Diodo, al accionar el pulsador
2, apaga el diodo.

int ledPin = 13;


int inputPin1 = 2; // pulsador 1
int inputPin2 = 3; // pulsador 2
int p1;
int p2;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}

void loop(){
p1=digitalRead(inputPin1);
p2=digitalRead(inputPin2);
if (p1 == HIGH) {
digitalWrite(ledPin, HIGH);
} else if (p2 == HIGH) {
digitalWrite(ledPin, LOW);
}
}

3. Ahora usamos los pulsadores para iluminar más o atenuar la luz del led, para ello debemos
cambiar la conexión del Led al pin 9, que usa la salida PWM, modulación por ancho de pulso,
como si de una salida analógica se tratara.

int ledPin = 9;
int inputPin1 = 2; // pulsador 1
int inputPin2 = 3; // pulsador 2
int p1;
int p2;
int value = 0;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop(){

p1=digitalRead(inputPin1);
p2=digitalRead(inputPin2);
if (p1 == HIGH) { value--; }
else if (p2 == HIGH) { value++; }
value = constrain(value, 0, 255);
analogWrite(ledPin, value);
delay(10);
}
1.3.2. Utilización de terminales de comunicaciones.
1.3.3. Monitores de puertos

Los monitores se denominan de tal manera debido a que como su nombre lo indica,
monitorizan o registran toda la actividad del puerto y analizan los datos específicos del flujo
genérico de los mismos. Existen varios tipos de monitores de puertos como por ejemplo el
monitor de puerto COM es una utilidad profesional que le permite monitorear la actividad
de los puertos RS232/422/485. El analizador de puertos serie también muestra, registra, y
analiza todo el flujo de datos entre los puertos serie y puede enviar datos en varios formatos,
funcionando así, como terminal. Este monitor de puerto RS232 está pensado principalmente
para quienes desarrollan y depuran soluciones de software y hardware para puertos serie.
Más que eso, esta aplicación provee una interfaz comprensible y amigable [9]

Puerto:
El puerto se define como el lugar donde los datos entran o salen o ambas cosas. Se
denominan “puertos de entrada/salida" (o abreviado puertos E/S) y son interfaces para
conectar dispositivos mediante cables.
Generalmente tienen un extremo macho con clavijas que sobresalen o tipo hembra la
cual tiene una serie de agujeros para alojar los conectores machos. [10 ,Página3]
Puerto Paralelo:
El puerto paralelo integrado usa un conector tipo D subministra de 25 patas en el panel posterior
del sistema. Este puerto de E/S envía datos en formato paralelo (ocho bits de datos, formando un
byte, se envían simultáneamente sobre ocho líneas individuales en un solo cable). El puerto paralelo
se utiliza principalmente para impresoras.

Puerto USB:
Es una arquitectura de bus desarrollada por las industrias de computadoras y telecomunicaciones, que
permite instalar periféricos sin tener que abrir la máquina para instalarle hardware, es decir, que basta
con conectar dicho periférico en la parte posterior del computador. Los periféricos para puertos USB
son reconocidos automáticamente por el computador (y se configuran casi automáticamente) lo cual
evita dolores de cabeza al instalar un nuevo dispositivo en el PC. Los puertos USB son capaces de
transmitir datos a 12 Mbps. [3, pág6]

Puerto VGA:

El puerto VGA es el puerto estandarizado para conexión del monitor a la PC, es un puerto hembra con
15 orificios de conexión en tres hileras de cinco. [10, Página 8]

Puerto de Sonido:
El puerto de audio tiene la función de capturar audio procedente del exterior, grabar señales de audio,
reproducir sonido hacia bocinas y capturar la señal del micrófono, consta de un conector cilíndrico con
2 ó 3 terminales que permite la transmisión de datos a un dispositivo externo (periférico), básicamente
bocinas y micrófonos, desde la computadora; por ello se le denomina puerto.
1.4. CODIGO NATIVO JAVA

Según vamos haciendo programas de ordenador, nos damos cuenta que algunas partes del
código se utilizan en muchos de ellos. Por ejemplo, podemos tener varios programas que
utilizan números complejos y las funciones de suma, resta, etc son comunes. También es
posible, por ejemplo, que nos guste hacer juegos, y nos damos cuenta que estamos
repitiendo una y otra vez el código para mover una imagen (un marcianito o a Lara Croft) por
la pantalla. Sería estupendo poder meter esas funciones en un directorio separado de los
programas concretos y tenerlas ya compiladas, de forma que podamos usarlas siempre que
queramos. Las ventajas enormes de esto son:
No tener que volver a escribir el código (o hacer copy-paste). [10]
Nos ahorraremos el tiempo de compilar cada vez ese código que ya está compilado. Además,
ya sabemos que mientras hacemos un programa, probamos y corregimos, hay que compilar
entre muchas y "más muchas" veces. [10]
El código ya compilado estará probado y será fiable. No las primeras veces, pero sí cuando ya
lo hayamos usado en 200 programas distintos y le hayamos ido corrigiendo los errores. [10]

Cómo tenemos que organizar nuestro código


Para poder poner nuestro código en una librería, necesitamos organizarlo de la siguiente
manera:
Uno o más ficheros fuente .c con el código de nuestras funciones.
Uno o más ficheros de cabecera .h con los tipos (typedefs, structs y enums) y prototipos de
las funciones que queramos que se puedan utilizar.
Como siempre, vamos a hacer un ejemplo. Los ficheros serían estos: [10]
libreria1.h
#ifndef _LIBRERIA_1_H #define _LIBRERIA_1_H int suma (int a, int b); int resta (int a, int b);
#endif
libreria1.c
int suma (int a, int b) { return a+b; } int resta (int a, int b) { return a-b; }
Es un fichero con un par de funciones simples de suma() y resta().
Un detalle importante a tener en cuenta, son los #define del fichero de cabecera (.h). Al hacer
una librería, no sabemos en qué futuros programas la vamos a utilizar ni cómo estarán
organizados. Supongamos en un futuro programa que hay un fichero de cabecera fichero1.h
que hace #include del nuestro. Imaginemos que hay también un fichero2.h que también hace
#include del nuestro. Finalmente, con un pequeño esfuerzo más, imaginemos que hay un
tercer fichero3.c que hace #include de fichero1.h y fichero2.h, es decir, más o menos lo
siguiente:

fichero1.h
#include <libreria1.h> ...
fichero2.h
#include <libreria1.h> ...
fichero3.c
#include <fichero1.h> #include <fichero2.h> ... [10]

Cuando compilemos fichero3.c, dependiendo de lo que haya definido en libreria1.h,


obtendremos un error. El problema es que al incluir fichero1.h, se define todo lo que haya
en ese fichero, incluido lo de libreria1.h. Cuando se incluye fichero2.h, se vuelve a intentar
definir lo contenido en libreria1.h, y se obtiene un error de que esas definiciones están
definidas dos veces. [10]
La forma de evitar este problema, es meter todas las definiciones dentro de un bloque #ifndef
- #endif, con el nombre (_LIBRERIA_1_H en el ejemplo) que más nos guste y distinto para
cada uno de nuestros ficheros de cabecera. Es habitual poner este nombre precedido de _,
acabado en _H y que coincida con el nombre del fichero de cabecera, pero en mayúsculas.
[10]
Dentro del bloque #ifndef - #endif, hacemos un #define de ese nombre (no hace falta darle
ningún valor, basta con que esté definido) y luego definimos todos nuestros tipos y prototipos
de funciones. [10]
Cuando incluyamos este fichero por primera vez, _LIBRERIA_1_H no estará definido, así que
se entrará dentro del bloque #ifndef - #endif y se definirán todos los tipos y prototipos de
funciones, incluido el mismo _LIBRERIA_1_H. Cuando lo incluyamos por segunda vez,
_LIBRERIA_1_H ya estará definido (de la inclusión anterior), por lo que no se entrará en el
bloque #ifndef - #endif, y no se redefinirá nada por segunda vez. [10]
Es buena costumbre hacer esto con todos nuestros .h, independientemente de que sean o
no para librerías. Si te fijas en algún .h del sistema verás que tienes este tipo de cosas hasta
aburrir. Por ejemplo, en /usr/include/stdio.h,

1.4.1. Librerías de enlace dinámico y estático

En una librería dinámica NO se copia en nuestro programa al compilarlo. Cuando tengamos


nuestro ejecutable y lo estemos ejecutando, cada vez que el código necesite algo de la
librería, irá a buscarlo a ésta. Si borramos la librería, nuestro programa dará un error de que
no la encuentra.
Las bibliotecas de enlace dinámico, o bibliotecas compartidas, suelen encontrarse en
directorios específicos del sistema operativo, de forma que, cada vez que un programa
necesite usar alguna, el sistema operativo conozca el lugar en el que se encuentra, para así
poder enlazarla. Esto ocasiona algunos problemas de dependencias, principalmente entre
diferentes versiones de una misma biblioteca.
Muchos programas tienen procedimientos a los que no llaman, salvo en circunstancias
excepcionales. Haciendo uso de bibliotecas de enlace dinámico, después del ensamblaje,
podemos enlazar cada procedimiento en el momento en que es llamado.

Ventajas y desventajas:
Un programa compilado con librerías estáticas es más grande, ya que se hace copia de todo
lo que necesita.
Un programa compilado con librerías estáticas se puede llevar a otro ordenador sin necesidad
de llevarse las librerías.
Un programa compilado con librerías estáticas es, en principio, más rápido en ejecución.
Cuando llama a una función de la librería, la tiene en su código y no tiene que ir a leer el
fichero de la librería dinámica para encontrar la función y ejecutarla.
Si cambiamos una librería estática, a los ejecutables no les afecta. Si cambiamos una
dinámica, los ejecutables se ven afectados. Esto es una ventaja si hemos cambiado la librería
para corregir un error (se corrige automáticamente en todos los ejecutables), pero es un
inconveniente si tocar eso nos hace cambiar los ejecutables (por ejemplo, hemos añadido un
parámetro más a una función de la librería, los ejecutables ya hechos dejan de funcionar).
¿Qué tipo de librería uso entonces?
Para programas no muy grandes y por simplicidad, se recomienda usar librerías estáticas. Las
dinámicas están bien para programas enormes o para librerías del sistema, que como están
en todos los ordenadores con linux, no es necesario andar llevándoselas de un lado a otro.
Compilar y enlazar con librerías estáticas
Una vez que tenemos nuestro código, para conseguir una librería estática debemos realizar
los siguientes pasos:
Obtener los ficheros objeto (.o) de todos nuestros fuentes (.c). Para ello se compilan con cc -
c fuente.c -o fuente.o. La opción -c le dice al
compilador que no cree un ejecutable, sino sólo un fichero objeto. Aquí pongo el compilador
cc, porque es el que he usado para el ejemplo, pero puede usarse gcc, o el g++ (para C++) o
uno de fortran, pascal, etc.
Crear la librería (.a). Para ello se usa el comando ar con los siguientes parámetros: ar -rv
libnombre.a fuente1.o fuente2.o ... La opción -r le dice al comando ar que tiene que insertar
(o reemplazar si ya están dentro) los ficheros objeto en la librería. La opción -v es "verbose",
para que muestre información mientras está haciendo las cosas. A continuación se ponen
todos los fichero objeto que deseemos. ar es en realidad un comando mucho más genérico
que todo esto y sirve para empaquetar cualquier tipo de fichero (no sólo ficheros objeto).
Tiene además opciones para ver qué ficheros hay dentro, borrar algunos de ellos,
reemplazarlos, etc.
Hacer todo este proceso a mano cada vez puede ser un poco pesado. Lo habitual es hacer un
fichero de nombre Makefile en el mismo directorio donde estén los fuentes de la librería y
utilizar make para compilarla. Las reglas implícitas de make ya saben hacer librerías estáticas.
El fichero Makefile quedaría tan sencillo como esto:

Makefile
CFLAGS=-I<path1> -I<path2> ... libnombre.a: libnombre.a (objeto1.o ojbeto2.o ...)
En CLAGS se debe poner tantas opciones -I<path> como directorios con ficheros .h se tenga
que le hagan falta a las fuentes de la librería para compilar.

La librería depende de los ficheros objetos que hay dentro de ella. Eso se pone poniendo el
nombre de la librería y entre paréntesis los ficheros objeto. Hay algunas versiones de make
que sólo admiten un fichero objeto dentro de los paréntesis. Debe ponerse entonces
libnombre.a: libnombre.a(objeto1.o) libnombre.a(objeto2.o) ...
Ya tenemos la librería. Ahora, al compilar nuestro programa con el compilador, debemos
decirle dónde están las librerías y cuales son. La orden de compilación quedaría entonces
$ cc -o miprograma miprograma.c -I<path1> -I<path2> ... -L<path1> -L<path2> ... -llibreria1 -
llibreria2
Los -I<path> son para indicar dónde están los ficheros de cabecera necesarios para la
compilación (tanto propios del programa como los de nuestras librerías).
Los -L<path> son para indicar los directorios en los que se encuentran las librerías.
Los -llibreria son para indicar que se debe coger esa librería. En el comando sólo ponemos
"librería". El prefijo lib y la extensión .a ya la pone automáticamente el compilador.
Hay un detalle importante a tener en cuenta. Las librerías deben ponerse de forma que
primero esté la de más alto nivel y al final, la de más bajo nivel. Es decir, tal cual lo tenemos
en el ejemplo, libreria1 puede usar funciones de libreria2, pero no al revés. El motivo es que
al compilar se van leyendo las librerías consecutivamente y cargando de cada una de ellas
sólo lo necesario. Vamos a verlo con un ejemplo:

Supongamos que miprograma.o llama a la funcion1 de libreria1 y esta funcion1 llama a


funcion2 de libreria2. El compilador lee miprograma.o. Como este necesita funcion1, la
apunta como "necesaria". Luego lee libreria1. Busca en las funciones necesarias, encuentra
funcion1 y la carga. Como funcion1 llama a funcion2, apunta funcion2 como función
necesaria. Luego lee libreria2 y como funcion2 es necesaria, la carga. Todo correcto.

Supongamos ahora que le hemos dado la vuelta al orden, que hemos puesto -llibreria2 antes
que -llibreria1. El compilador lee miprograma.c. Como este necesita funcion1, se apunta
como "necesaria". Luego lee libreria2. Como funcion1 no es de esta libreria y no hay más
funciones "necesarias" (hasta ahora), ignora libreria2 y no carga nada de ella. Luego lee
libreria1, carga funcion1 y ve que esta necesita funcion2. Apunta funcion2 como necesaria
pero ya se han acabado las librerias. Se obitiene un error de "linkado" en el que dice que "no
encuentro funcion2".

Esto nos dice también que tenemos que tener un cierto orden a la hora de diseñar librerías.
Debemos hacerlas teniendo muy claro que unas pueden llamar a otras, pero no las otras a
las unas, es decir, organizarlas como en un arbol. Las de arriba pueden llamar a funciones de
las de abajo, pero no al revés.

Existe una pequeña trampa, pero no es muy elegante. Consiste en poner la misma librería
varias veces en varias posiciones. Si en el supuesto que no funcionaba hubiesemos puesto
otra vez al final -llibreria2, habría compilado.

Compilar y enlazar con librerías dinámicas:

Para compilar los mismos ficheros, pero como librería dinámica, tenemos que seguir los
siguientes pasos:

Compilar las fuentes, igual que antes, para obtener los objetos.

Crear la librería con el comando ld. Las opciones para este comando serían ld -o liblibreria.so
objeto1.o objeto2.o ... -shared. La opción -o liblibreria.so le indica el nombre que queremos
dar a la librería. La opción -shared le indica que debe hacer una librería y no un ejecutable
(opción por defecto). objeto1.o, objeto2.o ... son los ficheros objeto que queremos meter en
la librería.

Makefile
liblibreria.so: objeto1.c objeto2.c ... cc -c -o objeto1.o objeto1.c cc -c -o objeto2.o objeto2.c ...
ld -o liblibreria.so objeto1.o objeto2.o ... -shared rm objeto1.o objeto2.o ...
La librería depende de las fuentes. Se compilan para obtener los .o (habría que añadir además
las opciones -I<path> que fueran necesarias), se construye la librería con ld y se borran los
objetos generados. He hecho depender la librería de las fuentes para que se compile sólo si
se cambia un fuente. Si la hago depender de los objetos, como al final los borro, siempre se
recompilaría la librería.

El comando ld es más específico que ar, y no he encontrado opciones para modificar o borrar
los objetos que hay dentro de la librería. No queda más remedio que construir la librería
entera cada vez que se modifique algo.

Una vez generada la librería, para enlazar con ella nuestro programa, hay que poner:
cc -o miprograma miprograma.c -I<path1> -I<path2> ... -L<path1> -L<path2> ... -Bdynamic -
llibreria1 -llibreria2

El comando es igual que el anterior de las librerías estáticas con la excepción del -Bdynamic.
Es bastante habitual generar los dos tipos de librería simultáneamente, con lo que es
bastante normal encontrar de una misma librería su versión estática y su versión dinámica.
Al compilar sin opción -Bdynamic puden pasar varias cosas:

Existen liblibreria.a y liblibreria.so. Se coge por defecto liblibreria.a


Sólo existe una de ellas. Se coge la que existe.
No existe ninguna de ellas. Error

La opción -Bdynamic cambia el primer caso, haciendo que se coja liblibreria.so en vez de
liblibreria.a. La opción -Bdynamic afecta a todas las librerías que van detrás en la línea de
compilación. Para volver a cambiar, podemos poner -Bstatic en cualquier momento.
Una vez compilado el ejecutable, nos falta un último paso. Hay que decirle al programa,
mientras se está ejecutando, dónde están las librerías dinámicas, puesto que las va a ir a
buscar cada vez que se llame a una función de ellas. Tenemos que definir la variable de
entorno LD_LIBRARY_PATH, en la que ponemos todos los directorios donde haya librerías
dinámicas de interés.

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path1>:<path2>:<path3> $ export
LD_LIBRARY_PATH
Siendo <path> los directorios en los que están las librerías dinámicas. Se ha puesto el
$LD_LIBRARY_PATH pata mantener su valor anterior y añadirle los nuevos directorios. [10]

1.4.2. Tipos de datos nativos.

Los tipos de datos básicos o primitivos no son objetos y se pueden utilizar directamente
en un programa sin necesidad de crear objetos de este tipo. La biblioteca Java
proporciona clases asociadas a estos tipos que proporcionan métodos que facilitan su
manejo.

Los tipos de datos primitivos que soporta Java son:


Tipo de Representa Tamaño Rango de Valor por Clase
dato ción (Bytes) Valores defecto Asociada
byte Numérico 1 -128 a 127 0 Byte
Entero con
signo
short Numérico 2 -32768 a 0 Short
Entero con 32767
signo
int Numérico 4 - 0 Integer
Entero con 2147483648
signo a
2147483647
long Numérico 8 - 0 Long
Entero con 9223372036
signo 854775808
a
9223372036
854775807
float Numérico 4 3.4x10-38 a 0.0 Float
en Coma 3.4x1038
flotante de
precisión
simple
Norma
IEEE 754
double Numérico 8 1.8x10-308 a 0.0 Double
en Coma 1.8x10308
flotante de
precisión
doble
Norma
IEEE 754
char Carácter 2 \u0000 a \u0000 Character
Unicode \uFFFF
boolean Dato lógico - true ó false false Boolean
void - - - - Void

Datos numéricos enteros:

En Java los representan los tipos: byte, short, int, long.


El tipo de dato numérico entero es un subconjunto finito de los números enteros del mundo
real. Pueden ser positivos o negativos.
Ejemplo de declaración de variables enteras:

int a;
byte n1, n2;
Datos numeros reales

En Java los representan los tipos: float, double.


El tipo de dato numérico real es un subconjunto finito de los números reales. Siempre llevan
un punto decimal y también pueden ser positivos o negativos. Los números reales

tienen una parte entera y una parte decimal.


Por ejemplo: 0.08 -54.0001
Ejemplo de declaración de variables reales:

float peso;
double longitud;
float altura = 2.5F;
double area = 1.7E4; // equivale a 1.7 * 104
double z = .123; //si la parte entera es 0 se puede omitir

Datos de tipo carácter:

En Java se representa con el tipo char.


Un dato de tipo carácter se utiliza para representar un carácter dentro del rango \u0000 a
\uFFFF (números desde 0 hasta 65535) en Unicode.
En realidad un dato de tipo char contiene un número entero dentro del rango anterior que
representa un carácter.
En Java se utiliza el código Unicode para la representación de caracteres. Este
códigoactualmente representa los caracteres de la mayoría de idiomas escritos en todo el
mundo.
Los 127 primeros caracteres de Unicode corresponden al código ASCII.
El Código ASCII (American Standard Code for Information Interchange o Código Estándar
Americano para el Intercambio de Información) asigna valores numéricos a las letras,
números, signos de puntuación y algunos otros caracteres especiales.
ASCII incluye 256 códigos divididos en dos conjuntos, estándar y extendido, de 128 cada uno.
El conjunto ASCII básico, o estándar, utiliza 7 bits para cada código, lo que da como resultado
128 códigos de caracteres desde 0 hasta 127.

Datos de tipo lógico:


Se representan con el tipo boolean. Los datos de este tipo sólo pueden contener dos valores:
true (verdadero) ó false (falso).

Ejemplo de declaración de variables lógicas:


boolean primero;
boolean par = false;
Los tipos de datos lógicos son también conocidos como booleanos en honor del matemático
inglés George Bool, que desarrolló la teoría conocida como álgebra de bool que fue la base
para la representación de los circuitos lógicos. [2]
1.3.1. Acceso a los métodos y variables.

El modificador 'static' tiene un profundo impacto en el comportamiento de una variable o


método por ello es que normalmente se trata a este modificador completamente separado
de los demás. Para entender la forma en que un miembro estático (static) trabaja, veremos
primeramente una razón para la cual utilizarlo.
Imaginemos que se cuenta con una clase de utilidad que tiene un método que siempre se
ejecuta de la misma manera, por decir un ejemplo, un método que siempre devuelve un valor
aleatorio. No importa qué instancia de la clase esté llamando a éste método, siempre se
comportará de la misma manera. En otras palabras, el comportamiento del método es
independiente de la instancia de la clase o, lo que es lo mismo, del estado actual del objeto.
Imaginemos otro escenario. Supongamos que se desea realizar un conteo de todas las
instancias que se tienen de una clase en particular, ¿dónde debería de almacenarse dicha
variable? no funcionará el mantenerla como una variable de instancia dentro de la clase a la
cual se quiere realizar el conteo ya que al momento de instanciarla el contador se inicializará
a su valor por defecto (como sucede con todas las variables de instancia), entonces, ¿cómo
haremos para realizar este conteo?

Para resolver un poco la situación planteada anteriormente pongamos en claro que las
variables y los métodos marcados con el modificador 'static', es decir, variables y métodos
estáticos pertenecen a la clase, no a una instancia de dicha clase en particular. De hecho, se
pueden utilizar componentes estáticos sin tener una instancia de la clase. Pero en caso de
que existan instancias de dicha clase, el componente estático de la misma será compartido
por todas aquellas instancias existentes en un momento dado; solo existe una copia.

El código a continuación declara y utiliza una variable para nuestro contador estático:

class MiClase{
//declaramos e inicializamos la variable estática
static int contador = 0;
public MiClase(){
//Se modifica el valor en el constructor
contador += 1;
}
public static void main (String[] args){
new MiClase();
new MiClase();
new MiClase();
System.out.println("El número de clases son: "+contador);
}
}
En el código anterior, la variable estática 'contador' es inicializada en cero cuando MiClase es
cargada por primera vez en la JVM, antes de que cualquier instancia sea creada. Cada vez
que una nueva instancia de la clase se crea se manda a llamar al constructor de la clase y el
contador aumenta en uno. Cuando el código se ejecuta ya fueron creadas 3 instancias de la
clase y el resultado es el siguiente:

El número de clases son: 3


Ahora imaginemos lo que puede suceder si 'contador' fuera una variable de instancia, en
otras palabras, no estática:

class MiClase{
//declaramos e inicializamos la variable de instancia
int contador = 0;
public MiClase(){
//Se modifica el valor en el constructor
contador += 1;
}
public static void main (String[] args){
new MiClase();
new MiClase();
new MiClase();
System.out.println("El número de clases son: "+contador);
}
}
Acceder a métodos y variables estáticas:
De manera que no se necesita tener una instancia de la clase para invocar a un método o
acceder a una variable estática, entonces, ¿cómo se invoca o se usa un componente estático?
¿cuál es la sintaxis?. La respuesta es
simple, para acceder a un componente estático de una clase solamente basta con utilizar el
operador punto (.) después del nombre de la clase y posteriormente hacer referencia al
método o variable estática. P. ejemplo:

class MiClase{
static int contador = 0;
public MiClase(){
contador += 1;
}
}
class ProbarMiClase{
public static void main(String[] args){
new MiClase();
new MiClase();
new MiClase();
System.out.printl("Contador: "+MiClase.contador);
}
}
De igual manera se puede acceder a un componente estático de una clase por medio de un
objeto de dicha clase, pero recordemos que dicho valor no dependerá de la instancia y todos
los métodos o variables arrojarán el mismo resultado independientemente de qué objeto lo
esté invocando o accediendo.
MiClase mc = new MiClase();
int clases = mc.contador;
Por último, tengamos en cuenta que los métodos estáticos no pueden ser sobreescritos. Esto
no significa que no puedan ser 'redefinidos' dentro de una clase, pero redefinir no es lo
mismo que sobrescribir.[4]

1.3.2. Desarrollo de librerías de enlace dinámico.

(Dynamic Linking Library - Bibliotecas (Librería) de Enlace Dinámico). DLL es la


implementación de Microsoft del concepto de bibliotecas (librerías) compartidas en sistemas
Windows y OS/2. Generalmente estas bibliotecas llevan la extensión ".dll" o ".ocx" (para
aquellas que contienen controles ActiveX), o ".drv" (controladores de sistema).

El formato de archivo para los DLL es el mismo que para los archivos EXE. Como en EXE, los
DLL pueden contener códigos, datos y recursos.

Las aplicaciones suelen utilizar DLL propias y las que provee el sistema operativo, u otras
aplicaciones.

Las bibliotecas DLL serían una evolución de las bibliotecas estáticas. Usarlos en el desarrollo
de programas trae ciertas ventajas como:
- Reducción del tamaño de los archivos ejecutables: pues parte del código puede estar en las
bibliotecas y no en el ejecutable.
- Compartir bibliotecas entre aplicaciones.
- Facilitar la gestión y aprovechar la memoria del sistema.
- Brindar flexibilidad frente a cambios: la solución de errores o la implementación de mejoras
puede solucionarse sólo con distribuir una nueva versión de la biblioteca. Esta corrección, en
general, será válida para todas las aplicaciones que la utilicen.

Con respecto a este último punto, cabe señalar que no siempre las modificaciones son
compatibles con todos los programas. Es más, existen aplicaciones que al ser instaladas,
reemplazan algunos DLL por versiones viejas o incompatibles para otras aplicaciones.
También puede pasar que algunas aplicaciones al ser desinstaladas, eliminen DLL de otras
aplicaciones.[3]

1.3.3. Invocación desde java de funciones nativas para el manejo de puertos.

RMI (Java Remote Method Invocation) es un mecanismo ofrecido por JAVA para invocar un
método de manera remota. Forma parte del entorno estándar de ejecución de Java y
proporciona un mecanismo simple para la comunicación de servidores en aplicaciones
distribuidas basadas exclusivamente en Java. Si se requiere comunicación entre otras
tecnologías debe utilizarse CORBA o SOAP en lugar de RMI.
RMI se caracteriza por la facilidad de su uso en la programación por estar específicamente
diseñado para Java; proporciona paso de objetos por referencia (no permitido por SOAP),
recolección de basura distribuida (Garbage Collector distribuido) y paso de tipos arbitrarios
(funcionalidad no provista por CORBA).

A través de RMI, un programa Java puede exportar un objeto, con lo que dicho objeto estará
accesible a través de la red y el programa permanece a la espera de peticiones en un puerto
TCP. A partir de ese momento, un cliente puede conectarse e invocar los métodos
proporcionados por el objeto.
La invocación se compone de los siguientes pasos:
Encapsulado (marshalling) de los parámetros (utilizando la funcionalidad de serialización de
Java).
Invocación del método (del cliente sobre el servidor). El invocador se queda esperando una
respuesta.
Al terminar la ejecución, el servidor serializa el valor de retorno (si lo hay) y lo envía al cliente.
El código cliente recibe la respuesta y continúa como si la invocación hubiera sido local. [5]
BIBLIOGRAFIA
 Ciriaco García de Celis (1994). «12.10: El puerto de la impresora». El universo digital del
IBM PC, AT y PS/2 (4ª edición). Grupo Universitario de Informática.

[2] Tipos de datos java recuperado de:


http://puntocomnoesunlenguaje.blogspot.nl/2012/04/tipos-de-datos-java.html

[3]http://www.alegsa.com.ar/Dic/dll.php

[4]Variables y métodos estáticos en java. Recuperado de:


http://monillo007.blogspot.com/2008/05/variables-y-mtodos-estticos-en-java.html

[5] Invocación remota de java recuperado de:


http://programacionambienteclienteservidor1.blogspot.nl/2014/11/rmi-java-remote-
method-invocation.html

También podría gustarte