Características y hardware de los dispositivos móviles

Características y hardware de los dispositivos móviles

El primer smartphone de la historia fue el IBM Simon. Fabricado en 1992 y distribuido por EEUU entre agosto de 1994 y febrero de 1995, tenía un precio de 899 dólares, con una interfaz de usuario ausente de botones físicos y basada totalmente en una pantalla táctil de tipo LCD monocromo.

Este dipositivo disponía de texto predictivo, agenda, funciones de SMS, correo electrónico, busca (beeper), fax y un módem para conexión a internet, estas funciones eran más comunes de una PDA que de un móvil de la época. Mostraba un teclado QWERTY en pantalla desde el cual se podían introducir el texto estándar o predictivo.

Imagen del IBM Simon.

El sistema operativo usado por el Simon era ROM-DOS, que tenía compatibilidad con MS-DOS y con la arquitectura x86, soportaba formato de archivos FAT32, tenía un procesador con un ciclo de reloj de 16 Mhz con registros de 16 bit, capacidad de 1 Mega de RAM y 1 Mega de almacenamiento y con un módem telefónico integrado.

El IBM Simon contaba con una ranura PCMCIA con la que se podía instalar nuevas funcionalidades a partir de programas de terceros. La experiencia del usuario final, contrariamente a lo que se pueda pensar, era bastante buena, ya que el teléfono procesaba la información de una manera ágil y fluida.

Hardware los smartphones

La evolución del hardware de los smartphones viene dada por la miniaturización de los componentes electrónicos que lo forman y una mejora en el proceso de producción/fabricación con menor consumo y mayores velocidades.

Las velocidades de microprocesamiento guardan una relación directa con el número de transistores incluidos sobre el chip, y cuanto más pequeño sea el transistor, mayor cantidad de ellos podrán ser empleados dentro de un mismo chip.

Procesadores ARM

ARM es la responsable de la rápida evolución en los últimos años de los dispositivos móviles. una gran parte de los casos. Los procesadores ARM se basan en el modelo RISC y están licenciados por la compañía británica ARM Holdings, que realizó su introducción en el mercado en su primer modelo en el año 1985. Desde entonces la tecnología ARM se ha actualizado de forma constante hasta alcanzar la madurez suficiente para convertirse en la arquitectura de 32 bits más exitosa del mundo. De hecho, cerca del 75% de los procesadores de 32 bits montados en cualquier tipo de dispositivo poseen este chip en su núcleo (tabletas, videoconsolas, routers, etc) y está presente en más del 95% de los smartphones actuales.

El diseño de los procesadores de los smartphones está muy realacionado con el desarrollo del concepto multinúcleo y disminución del proceso de fabricación en nm (1 nanómetro = 0,000000001 metros). Por ejemplo, 45nm de tamaño en el proceso de fabricación es más pequeño que 65nm, a menor tamaño menos calor y menor consumo eléctrico, al ser más pequeños permiten un mayor número de ellos en el chip y se gana un mejor rendimiento.

El microprocesador es la parte más importante de cualquier equipo electrónico, y desde hace unos años la tendencia es duplicar, triplicar e incluso cuadriplicar el núcleo de dicho microprocesador.

Evolución de ARM

En el año 1985 el equipo terminó el diseño preliminar y concluyó los primeros prototipos del nuevo procesador ARM (conocido como ARM1), tendría que pasar otro año para que la primera versión comercial se bautizase como ARM2.

La arquitectura del ARM2 posee un bus de datos de 32 bits y ofrece un espacio de direcciones de 26 bits, junto con 16 registros de 32 bits.

El ARM2 es, con mucha probabilidad, el procesador de 32 bits útil más simple del mundo, ya que posee sólo 30.000 transistores. Si lo comparamos con un Intel 80386 (microprocesador de 32 bits lanzado en el año 1985) que posee 275.000 transistores, se observa una diferencia muy notable, ya que el chip de Intel tiene más de 9 veces la cantidad de transistores que el de Acorn.

Su simplicidad se debe en gran medida a que no está basado en microcódigo (sistema que suele ocupar en torno a la cuarta parte de la cantidad total de transistores usados en un procesador) y a que carece de memoria caché, algo bastante común en aquella época.

Gracias a esto, posee un consumo en energía bastante bajo, a la vez que ofrece un mejor rendimiento que un Intel 286. Su sucesor, el ARM3, incluye una pequeña memoria caché de 4 KB, lo que mejora los accesos a memoria repetitivos.

A finales de los años 80, Apple Computer comenzó a trabajar con Acorn en nuevas versiones del núcleo ARM. En Acorn se preocupaban del hecho de que el fabricante de un procesador fuese también fabricante de ordenadores, ya que podría echar para atrás a los clientes, por lo que se decidió crear una nueva compañía llamada Advanced RISC Machines, que sería la encargada del diseño y gestión de las nuevas generaciones de procesadores ARM. Esto ocurriría en el año 1990.

Este trabajo derivó en el ARM6, presentado en 1991. Apple utilizó el núcleo ARM 610 (basado en la familia ARM6 ya obsoleta), como procesador básico para su innovador PDA, el Apple Newton (serie temprana de asistentes digitales personales “PDA” desarrollada, manufacturada y comercializada por Apple Computer entre 1993 y 1998). Acorn la utilizó para fabricar su Acorn RISC PC 600.

La mayor utilización de la tecnología ARM se alcanzó con la familia de procesadores ARM7TDMI, presente en millones de unidades en teléfonos móviles y sistemas de videojuegos portátiles. Y es que la relativa simplicidad de los procesadores ARM los hace ideales para aparatos que precisen consumir poca o muy poca energía.

Aquí tenemos algunos de los dispositivos más famosos que utilizan alguna de las familias ARM. La familia ARM7TDMI, tenía una velocidad que iba desde los 40 Mhz hasta los 59.8 Mhz, las CPUs de esta familia fueron utilizadas en aparatos como la consola Game Boy Advance, la Nintendo DS o el reproductor de MP3 Apple Ipod.

La familia ARM9TDMI, con una velocidad que rondaba los 180 Mhz, se utilizó en el procesador para PDAs de Samsung llamado S3C2410, en diversas consolas como la tapware Zodiac 2005, en calculadoras programables como la serie HP-49 y en los famosos nagegadores GPS TomTom.

La familia ARM9E, con velocidad de 200 Mhz, se utilizó en móviles como los Sony Ericsson series K y W, en móviles Siemens y Benq x65, en procesadores de Texas Instruments, en procesadroes Qualcomm y en la GPU (Unidad de Procesamiento de Graficos) de la consola Wii.

La familia ARM10E y Xscale, con unas velocidades que van desde los 200 Mhz hasta los 1.25 Ghz, se usan en smartphones como Samsung Omnia, Blackberry 8700 o Blackberry Pearl 8100.

La familia ARM11 con velocidades comprendidas entre 528 Mhz hasta 665 Mhz, se incorporaron en móviles como el Nokia e90, n95, n82, n97, n81, en procesadores Qualcomm con el Htc Nike, Htc Dream, Htc Magic Htc Hero, en el Zte Link, en los Apple Iphone 2G y 3G, en el Apple Ipod Touch 1ra y 2da generación, o en el Samsung Omnia II.

Para resumir, podriamos clasificar la evolución de las arquitecturas ARM en:

  • 32 bits: ARMv6, ARMv5, ARMv4T, ARMv3, ARMv2

  • 32 bits - Cortex: ARMv8-R, ARMv7-A, ARMv7-R, ARMv7E-M, ARMv7-M, ARMv6-M.

  • 32 / 64 bits - Cortex: ARMv8-A

Imagen de las familias actuales de procesadores ARM Cortex.

Actualmente...

En los últimos años la computación multinúcleo es toda una realidad y los procesadores (CPU) de escritorio ya migraron hace algunos años a este diseño que busca mejor eficiencia y rendimiento de computo.

Los procesadores ARM apuntan a esta misma tendencia, lo que ahora preocupa en la investigación es el consumo energético. Los smartphones tienen un límite de consumo fijado aproximadamente a 300 mW, una pequeña bombilla estándar de linterna típica con un voltaje de 1,2V y con una intensidad de 0,3A tiene un consumo de 0,36W o lo que es lo mismo 360mW, o un led de 5 mm y alta luminosidad tiene un consumo de 0.06W o 60 mW.

La familia de ARM llamada Cortex A9 utiliza un proceso de producción de 45nm, lo que le permite mantener el consumo en cuotas aceptables.

Además del Cortex-A9, se debe contar con el nuevo modelo de ARM, el Cortex-A15 es un microprocesador dual core (dos núcleos) o quad core (cuatro núcleos) y tiene frecuencias que pueden llegar hasta los 2.5 Ghz. Lo llevan entre otros, los modelos Samsung Galaxy Nexus, los chips Nvidia TegraX, los Qualcomm Snapdragon 8X72, la consola portátil PlayStation Vita, los Samsung Galaxy S II (Exynos 4210), y los Samsung Galaxy S III (Exynos 4212).

ARM Cortex-A8 y ARM Cortex-A9 utilizan la arquitectura ARMv7. Sin entrar demasiado en detalle técnico, el Cortex-A8 se encuentra generalmente en implementaciones de un solo núcleo y el Cortex-A9 en dispositivos de hasta 4 núcleos.

Podremos encontrar el procesador ARM Cortex-A8 dentro de los SoCs de la serie TI OMAP3 y de SP5C. En el caso de Samsung: la serie Hummingbird / Exynos 3xxx. El Cortex-A9 se encuentra en la serie TI OMAP4, Samsung Exynos 4xxx series y NVIDIA Tegra 2/3.

Actualmente contamos con el Cortex-A15 que presenta 4 nucleos y es hasta un 40% más rápido que el procesador Cortex-A9. Esta nueva CPU está presente en el SoC de serie TI OMAP5, Samsung Exynos 5xxx series y en el Tegra K1.

System-on-chip (SoC, System-on-a-chip)

ARM conforma una estructura System-on-a-chip o SoC (también referido como system-on-chip, en español Sistema en un chip), que describe la tendencia cada vez más frecuente de usar tecnologías de fabricación que integran todos o gran parte de los componentes de un ordenador o cualquier otro sistema informático o electrónico en un único circuito integrado o chip. Este es un término de lo más común hoy día en los smartphones, y por buenas razones ya que el espacio en ellos es reducido.

Cuando se habla de los procesadores dentro de un smartphone por lo general se refiere en realidad al sistema-en-un-chip (SoC): una combinación que incluye a la CPU, la GPU (procesador gráfico), memoría RAM, ROM, controladores de interfaz para USB, tecnología inalámbrica, reguladores de voltaje y mucho más.

La idea de SoC es que todos los componentes críticos de un dispositivo se encuentren en un área relativamente pequeña.

Para dejar claro lo que es un SoC pongamos el ejemplo del Iphone 5. En este modelo, cuando se habla del chip A6, en realidad hacemos referencia al SoC Apple A6 APL0589 en el que se encuentra un procesador ARM v7 de 1200 Mhz con dos nucleos y un procesador gráfico (GPU) PowerVR SGX543 MP3 de tres nucleos.

GPU: Historia y evolución

La unidad de procesamiento gráfico o GPU (graphics processing unit) es un coprocesador dedicado al procesamiento de gráficos u operaciones de coma flotante, existe básicamente para aligerar la carga de trabajo en videojuegos o en aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la unidad central de procesamiento (CPU) puede dedicarse a otro tipo de cálculos (como la inteligencia artificial o los cálculos mecánicos en el caso de los videojuegos).

La GPU implementa ciertas operaciones gráficas llamadas primitivas optimizadas para el procesamiento gráfico. Una de las primitivas más comunes para el procesamiento gráfico en 3D es el antialiasing o suavizado de bordes (evita el aliasing que es un efecto visual tipo “sierra” o “escalón”). Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos. Además, son conocidas por estar presentes en las tarjetas gráficas de los ordenadores portátiles o de sobremesa, pero también están presentes en los smartphones y tabletas.

Las modernas GPU son descendientes de los chips gráficos monolíticos (circuitos integrados que están fabricados en un solo monocristal, habitualmente de silicio) de finales de la década de 1970 y 1980. Estos chips tenían soporte BitBLT(es una primitiva gráfica consistente en que dos mapas de bit son combinados en uno) limitado en la forma de sprites (es un tipo de mapa de bits dibujados en la pantalla de ordenador por hardware gráfico especializado), y usualmente no tenían soporte para dibujo de figuras. Algunos GPU podían ejecutar varias operaciones en una lista de display.

La GPU en los smartphones está especializada en mostrar los gráficos de la interfaz de usuario, efectos 3D y 2D, reproducción de vídeo en HD Ready (720p) o full HD (1080p), reproducción de gráficos avanzados 3D y 2D en videojuegos.

Imagen de las GPU Tegra 4 y Tegra K1 de NVidia, dos de los procesadores gráficos más avanzados para dispositivos móviles.

Arquitectura de la GPU

Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquellas que procesan vértices, y aquellas que procesan píxeles (es la menor unidad homogénea en color que forma parte de una imagen digital, ya sea esta una fotografía, un fotograma de vídeo o un gráfico).

Por tanto, se establecen el vértice y el píxel como las principales unidades que maneja la GPU. Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen.

El uso de la GPU depende de varios factores: de la estructura del SoC y también del sistema operativo utilizado en el dispositivo. En el primer caso: si el SoC no dispone de un chip dedicado para la decodificación de vídeo, la GPU puede encargarse de cumplir ese propósito y manejar vídeos de alta resolución.

En el sistema operativo las cosas son algo más complejas. En primer lugar, la GPU se utiliza exclusivamente para la renderización 3D en juegos y aplicaciones. Los núcleos de procesamiento (CPU), simplemente, no están diseñados para manejar este tipo de tareas y en todos los sistemas operativos la GPU se hará cargo de ellas dejando a la CPU encargarse de otros cálculos.

La CPU ayuda en los cálculos para mostrar modelos 3D en la pantalla (en especial para juegos), pero el cálculo principal se hace en el chip de gráficos GPUs.

Conseguir que Android use la GPU (si está disponible) para la interfaz de usuario y la experiencia de navegación es uno de los problemas que Android ha tenido desde que apareció en el mercado. Incluso en algunos de los dispositivos de gama alta, se presentan problemas con la fluidez en el interfaz gráfico de usuario. Esto se corrigió a partir de la versión de Android 4.0, gracias a su soporte 2D por hardware en la interfaz, porque, entre otras cosas, los SoCs modernos incluían GPUs más potentes. Así, ese fue el momento en el que Google permitió que los dispositivos utilizaran sus GPUs para representar los elementos de la interfaz.

Por contra, iOS en el iPhone o en el iPod Touch siempre ha funcionado muy fluido porque hace que más elementos de la interfaz utilicen la GPU. Apple tiene ventaja sobre Android en este aspecto, porque sólo tiene que trabajar con un hardware específico y por esto pueden integrarse en el sistema operativo las funcionalidades precisas para un solo GPU. Por esta, apenas hubo problemas para conseguir la aceleración gráfica por GPU en iOS.

Memoria RAM en los smartphones

La memoria RAM es uno de los componentes críticos del móvil, junto con los núcleos de procesamiento de la CPU y GPU. Sin RAM, cualquier tipo de sistema de computación sería incapaz de realizar tareas básicas y acceder a los archivos de su memoria secundaria sería inaceptablemente lento.

Los archivos críticos que necesita el procesador se almacenan en la memoria RAM, que siempre ha de estar lista en espera de ser leída o escrita. Estos archivos críticos para el dispositivo pueden ser: los componentes del sistema operativo, datos de aplicaciones y gráficos de un juego, o en general cualquier cosa a la que se deba acceder a velocidades mayores que las de acceso a memorias de almacenamiento secundario.

El tipo de memoria RAM que se utiliza en móviles smartphone es, técnicamente, DRAM (RAM Dinámica). La estructura de la DRAM es tal que cada condensador de la placa de RAM almacena un bit, y estos condensadores requieren de un constante “refresco” o actualización de los datos que están almacenados. El contenido del módulo de memoria DRAM se puede cambiar rápida y fácilmente para almacenar diferentes datos.

En la mayoría de los casos la RAM en los Smartphones se encontrará en la parte superior del SoC. Esto permite el acceso directo del SoC a la RAM y la escasa distancia entre ambos significa menor calor y menor consumo de energía. Si no hay suficiente espacio en la parte superior del SoC, a menudo se puede encontrar la RAM en lugares próximos a este.

Diagrama que muestra una configuración de package-on-package en los SoCs. La matriz inferior sería el SoC y la superior la RAM.

Capacidad y la velocidad

Lo que más importa de una memoria RAM en un móvil es su capacidad. En general, no es preocupante el gasto de energía que hace la RAM para funcionar, porque es sólo una pequeña fracción del total consumido por el sistema, además es fácilmente superada por la pantalla o por el procesador.

Con un sistema operativo móvil no es común el consumo de cantidades muy grandes de RAM. Por lo general, las aplicaciones de smartphone usan una pequeña cantidad de memoria RAM (alrededor de 50 MB de media), por lo que muchas de estas aplicaciones se pueden ejecutar simultáneamente. El sistema operativo puede decidir que procesos suspender o matar y si no están siendo usadas en ese momento, así se libera RAM para su usarla en otras aplicaciones. Esta es la razón por la que los sistemas operativos móviles funcionan de manera “fluida” aún cuando los dispositivos donde se ejecuten sólo dispongan de 512 MB de RAM.

Sin embargo, también es cierto que en juegos de gran detalle gráfico, como los que incorporan 3D, se puede consumir grandes cantidades de RAM en almacenamiento de gráficos (texturas, modelos 3D) y el sonido. Para evitar esto, la mayoría de los smartphones de alta gama cuenta en la actualidad con una memoria RAM de entre 1 y 2GB.

Ejecutar en un smartphone un juego como Avatar 3D requiere una gran cantidad de memoria RAM.

La velocidad de la RAM es algo que a menudo es pasado por alto cuando se mide el rendimiento de un smartphone. Al igual que con un equipo de escritorio (portátil, netbook o sobremesa), hay tres áreas principales de la memoria que afectan a su velocidad: la velocidad de reloj, tipo de tecnología utilizada en la fabricación de la memoria RAM y la cantidad de canales.

Ejemplo: el iPhone 4S tiene 512 MB de LPDDR2 integrados en el interior del SoC Apple A5.

Mientras que los equipos de escritoria actualmente suelen utilizar la tercera versión de DDR SDRAM (DDR3), los SoC de los móviles actuales emplean habitualmente LPDDR2, donde el LP (Low Power) es sinónimo de ahorro energético. LPDDR2 es, básicamente, similar a la memoria DDR2 estándar de escritorio, pero empleando menos energía (LP). La tensión de alimentación se reduce de 2.5 a 1.8V. Las capacidades de la versión DDR3 estarán presentes en próximos SoCs para smartphones, tabletas u otros dispositivos portátiles.

Algo importante a destacar acerca de la RAM en un smartphone es que no existe una memoria RAM de vídeo dedicada para el chipset de gráficos, es decir, la memoria RAM del móvil está compartida entre los núcleos de procesamiento CPU y la GPU. Esto es debido al diseño de system-on-a-chip que incorpora la CPU y la GPU. Pero, en realidad, no debería suponer un problema en términos de rendimiento, de hecho se lleva haciendo mucho tiempo en los ordenadores de sobremesa y en portátiles.

Tecnología de pantalla en móviles

Nos encontramos con dos principales familias de tecnologías: LCD y OLED. Dentro de estas tecnologías tendremos variaciones que dan nombre a los paneles TFT, IPS, Retina AMOLED, Super-AMOLED, etc.

Pantalla LCD

Un panel LCD está compuesto por una capa de cristales líquidos en una matriz de celdillas pequeñas, a su vez hay una matriz de electrodos controlados independientemente para cada una de las celdas y este conjunto se encuentra entre dos placas de vidrio con filtros polarizantes, con una diferencia de orientación entre ambos de 90°. El filtro externo se encuentra coloreado con los colores básicos (rojo, verde y azul), alineados sobre cada terna de partículas de cristal líquido presentes en el panel. Cada uno de estos grupos de color sirve para representar un punto de color en la pantalla. Los filtros se sitúan en la parte externa de este panel y tras éste se sitúa la fuente de luz, actualmente generada por lámparas fluorescentes, situadas tras una fina capa de material reflectante con la finalidad de distribuir la luz uniformemente por toda la parte posterior del panel. Además, cuenta con los dispositivos electrónicos que se encargan de recibir las señales de vídeo y traducir los impulsos eléctricos hacia el electrodo preciso para dibujar o borrar un punto en la pantalla.

Los múltiples rayos de luz generados por la fuente luminosa en la parte posterior del monitor atraviesan el primero de los filtros, quedando polarizados (los polarizadores “filtran” la luz de manera que sólo dejan pasar aquellas ondas que se correspondan con un ángulo especifico de vibración en una orientación concreta). Seguidamente pasan la celdillas de cristal líquido donde, dependiendo de la intensidad de la corriente aplicada por el electrodo encargado de controlar dicha celda, alterará su polarización en mayor o menor medida, que es lo que determina la cantidad de luz que logrará atravesar el último de los filtros dando lugar así a una luminosidad concreta para cada una de la celdillas que forman la pantalla.

En función de la intensidad de luz proyectada en cada una de esta celdillas y el color del filtro sobre ese punto concreto de la pantalla, se originan puntos de distinta tonalidad dando lugar a la imagen representada.

Ejemplo: Pantalla LCD.

Entre las diferentes variantes de LCD encontramos:

  • TFT. TFT es el acrónimo de Thin- Film Transistor. Se utiliza un transistor por cada pixel para mejorar aspectos como el contraste o los tiempos de respuesta. Las siguientes se basan en esta.

  • LED. LED es el acrónimo de Light-Emitting Diode. Aquí se usa en la primera capa (la que da luz blanca), una matriz de LED o diodos emisores de luz. Entre las ventajas que ofrece sobre una pantalla LCD es que son más finas y consumen menos. Todas las pantallas que encuentras en los dispositivos móviles basadas en LCD son LED.

  • IPS. IPS es el acrónimo de In-Plane Switching. Es una pantalla LED modificada. En este caso se mejora la capa que incluye el cristal líquido. Se incluyen dos transistores por cada subpixel haciendo que los cristales se polaricen de tal forma que se amplia el ángulo de visión (uno de los grandes defectos de la tecnología LED).

  • Retina. Este tipo de pantalla, utilizada por Apple desde su modelo iPhone 4S y fabricada por LG, cuenta con densidad de 330 pixeles por pulgadas y resolución mínima 960 x 640. Su brillantez, niveles de captación de colores y fidelidad de los mismos son condiciones inherentes de este tipo de pantalla. En el iPhone 5S la pantalla mejoró sustancialmente, con colores más reales y mayor capacidad táctil. La pantalla Retina está basada en la tecnología In-Plane Switching (IPS), la cual al mismo tiempo tiene como matriz LCD.

  • Super PLS. PLS es el acrónimo de Plane Line Switching. Es la versión mejorada por Samsung de IPS. Mejora aspectos como los ángulos de visión, la luminosidad y la calidad de la imagen. Es la que ha tenido que usar Samsung en sus tabletas debido a las limitaciones de la tecnología OLED.

Pantalla OLED

Las pantallas basadas en cristal líquido tienen el problema de que estos son incapaces de producir luz por si solas. Surge, por tanto, la idea de usar otro tipo de materiales que sean capaces de emitir luz sin tener que usar una luz de retroiluminación.

OLED es el acrónimo de organic light-emitting diode, en este caso lo que se usa son emisores LED, pero en cuyos componentes se incluye el carbono y de ahí la palabra orgánico en su nombre. Estas pantallas prometen menor consumo, mejores tiempos de respuesta y colores más realistas.

El fabricante de esta tecnología es Samsung. Entre las diferentes nomenclaturas usadas por el fabricante podemos encontrar:

  • Amoled. Amoled es el acrónimo de Active Matrix OLED. Uno de los primeros problemas que encuentra el fabricante es que las pantallas no tienen la luminosidad de sus competidores, así que añade un transistor por cada uno de los subpixeles, aún así no llega a dar el nivel de claridad de los IPS.

    Por otro lado, la vida del panel es mucho más limitada que la de otras técnicas. Se emplea una configuración RGBG, es decir el doble de puntos verdes que rojos y azules. La elección del verde no es aleatoria, las personas tenemos mayor capacidad para distinguir ese color y, por ejemplo, los algoritmos como JPG se aprovechan de esto para reducir el tamaño de los archivos de imagen con poca perdida real de calidad observable.

Ejemplo: Pantalla Amoled.

  • Super Amoled. Al igual que ocurre con la tecnología Super LCD, en Super Amoled se extrae el aíre entre la capa más cercana al usuario y los distintos elementos, evitando así los molestos destellos. Esta tecnología está presente en la pantalla de Samsung Galaxy S original. En los últimos años, Samsung ha desarrollado mejoras a su variante Super Amoled, y éstas son conocidas como Super Amoled+ o Super Amoled HD.

Función táctil de las pantallas

La tecnología actual para la función táctil de las pantallas se conoce como capacitiva. Se basa en conectar el toque del usuario a través de una lamina protectora que se encuentra al frente de la pantalla, de tal manera que cada unidad pueda instalarse por detrás de materiales de protección o vidrio anti-roturas. El sistema integrado resistente a golpes, rayones y vandalismo, además de no verse afectado por agentes tales como humedad, calor, lluvia, nieve o granizo y líquidos corrosivos. El touchscreen -sólido y estable- y su controladora, aumentan el nivel de calidad y vida útil del equipo ofreciendo una respuesta rápida y libre de error, además de requerir bajos niveles de mantenimiento y recalibración.

Funcionamiento de una pantalla táctil capacitiva.

El componente principal que proporciona el campo electrostático es transparente, por lo que en la mayoría de las pantallas táctiles no es posible ver la cuadrícula de electrodo capacitivo en la capa de sistema integrado.

Sensores y otro hardware

Dentro de la clasificación de sensores y otro hardware podemos listar la cámara del dispositivo, el GPS, acelerómetro, giroscopio, brújula, sensor de luz y proximidad. A continuación se describe cada uno de ellos:

Cámaras

Una de las características de los smartphones más apreciadas por buena parte de los usuarios es su capacidad a la hora de tomar fotografías. De hecho, las principales firmas del sector han realizado un esfuerzo importante para mejorar las prestaciones de sus teléfonos inteligentes en este sentido.

El hardware que hace posible la adquisición con un smartphone está formado por los mismos elementos que podemos encontrar en una cámara fotográfica, es decir, un bloque óptico y un sensor. El bloque óptico se responsabiliza de confinar la luz visible y transportarla sin provocar distorsiones ni aberraciones cromáticas hasta el sensor.

El sensor de imagen es una matriz o cuadrícula de pequeñísimos dispositivos electrónicos sensibles a la luz, conocidos como fotorreceptores, fotosensores, o, sencillamente, celdas. En el ámbito que nos ocupa debemos destacar dos tipos de sensores: los CCD (Charge-Coupled Device) y los CMOS (Complementary Metal Oxide Semiconductor).

Los dispositivos CMOS han evolucionado mucho durante la última década. Tanto que la mayor parte de los fabricantes se ha decantado por ellos. Y es que su fabricación es más sencilla (lo que reduce sensiblemente su precio), consumen un 75% menos energía que los sensores CCD y se calientan menos, por lo que no es necesario poner a punto los complejos sistemas de refrigeración que exigen estos últimos.

El bloque óptico y el sensor son los dos elementos de la camara que determinan su calidad y en este punto es importante indicar que a mayor tamaño de sensor y de óptica conseguiremos una mayor calidad en la cámara del dispositivo móvil.

Bloque óptico y sensor de dos cámaras de Smartphones.

GPS

El uso y masificación del GPS está particularmente extendido en los dispositivos smartphone, lo que ha hecho surgir todo un ecosistema de software para este tipo de dispositivos, así como nuevos modelos de negocios que van desde el uso del terminal móvil para la navegación tradicional punto-a-punto, la prestación de los llamados Servicios Basados en la Localización (LBS), ssí como aplicaciones realidad aumentada.

Ejemplo de realidad aumentada en un smartphone.

Un buen ejemplo del uso del GPS en la telefonía móvil son las aplicaciones que permiten conocer la posición de amigos cercanos sobre un mapa base. Para ello basta con tener la aplicación respectiva para la plataforma deseada (Android, Bada, iOS, WP, Symbian) y permitir ser localizado por otros usuarios.

Por defecto, Android utiliza los servicios de ubicación de Google. Esto significa que tu móvil enviará datos a Google (anónimamente, eso sí) procedentes de redes móviles y Wi-Fi, ignorando si es posible el sistema GPS de tu terminal para ahorrar energía.

Este sistema de triangulación de tu posición basado en redes (3G ó WIFI) es efectivo, pero sólo hasta cierto punto, ya que depende de la existencia de algún tipo de red y carece de la precisión de un GPS auténtico. No obstante, muchas veces es suficiente para que ciertas aplicaciones conozcan su ubicación de manera aproximada, lo que en la mayor parte de las ocasiones basta y sobra.

En cualquier caso, es posible configurar en los dispositivos actuales el grado de precisión deseado para detectar la ubicación del usuario.

Ejemplo de configuración de la precisión de ubicación en el smartphone Motorola G.

Coordenadas geográficas

La coordenadas geográficas son un sistema de referencia que utiliza las dos coordenadas angulares, latitud (línea horizontal) para referenciar norte - sur y longitud (línea vertical) para referenciar este - oeste. Estas dos coordenadas angulares se suelen expresar en grados sexagesimales:

La latitud mide el ángulo entre cualquier punto y el ecuador. Las líneas de latitud se denominan paralelos.

Todos los puntos ubicados sobre el mismo paralelo tienen la misma latitud. Aquellos que se encuentran al norte del Ecuador reciben la denominación Norte (N). Aquellos que se encuentran al sur del Ecuador reciben la denominación Sur (S). Se mide de 0° a 90°. Al Ecuador le corresponde la latitud 0°. Los polos Norte y Sur tienen latitud 90° N y 90° S respectivamente.

La longitud mide el ángulo a lo largo del Ecuador desde cualquier punto de la Tierra. Se acepta que Greenwich en Londres es la longitud 0 en la mayoría de las sociedades modernas. Las líneas de longitud son círculos máximos que pasan por los polos y se llaman meridianos.

Combinando estos dos ángulos, se puede expresar la posición de cualquier punto de la superficie de la Tierra. Por ejemplo, Alicante, tiene latitud 38,20 grados Norte, y longitud 0,29 grados oeste.

Hay que tener en cuenta que las coordenadas de latitud y longitud pueden tener varios formatos distintos, existiendo fórmulas de conversión entre ellos:

  • Grados (d.d°) - 49.5000°, -123.5000°

  • Minutos (d°m.m') - 49°30.0', -123°30.0'

  • Segundos (d°m's'') - 49°30'00"N, 123°30'00"W

destacando :

  • Grados decimales (DDD): 41.40338, 2.17403

Acelerometro

Se denomina acelerómetro a cualquier dispositivo capaz de detectar las fuerzas de aceleración a las que se ve sometida una masa. Se puede utilizar para detectar la inclinación, la vibración, el movimiento, el giro y el choque. Actualmente es posible construir acelerómetros de tres ejes (X,Y,Z) en un sólo chip de silicio, incluyendo en el mismo la parte electrónica que se encarga de procesar las señales. La famosa consola de videojuegos de Nintendo (Wii) utiliza un mando con un acelerómetro en su interior.

Giroscopio

El giróscopo o giroscopio es un dispositivo mecánico formado esencialmente por un cuerpo con simetría de rotación que gira alrededor de su eje de simetría. Detecta la rotación a la que se somete el dispositivo.

Ubicación de acelerómetro y giroscopio en un dispositivo Iphone: el LIS331DLH es el chip del acelerómetro y L3G4200D es el chip del giroscopio.

Brujula digital

La brújula es un instrumento que sirve de orientación y nos permite conocer la dirección del smartphone en relación a los polos magnéticos de la Tierra o al norte geográfico.

La utilidad de brújula se aprecia en aplicaciones de navegación para obtener la posición del usuario en relación a puntos de interés

Sensor de luz

Este pequeño componente se encargará de recoger información sobre la luz ambiental y pasársela a nuestro dispositivo para que éste ajuste el brillo de nuestra pantalla con el fin de hacer que la visibilidad y comodidad de uso sea lo más satisfactoria posible.

En resumen, el sensor de luz ambiental convierte la cantidad de luz detectada en una señal eléctrica con la que pueda trabajar nuestro terminal. Así se ajusta automáticamente nuestra pantalla.

Sensor de proximidad

El sensor de proximidad es un transductor que detecta objetos o señales que se encuentran cerca del elemento sensor.

Estos sensores de proximidad se basan en un LED infrarrojo y también en un receptor IR. ¿Qué es lo que hace esto?, emite una luz infrarroja y si algún obstáculo la devuelve, como sería el caso de nuestra oreja, puede apagar la pantalla.

Ejercicios

  1. Averigua las características hardware de tu dispositivo móvil. ¿Qué procesador emplea? ¿Cuenta con GPU? Memoria RAM, tipo de pantalla…

  2. En ARM, una cosa es la familia y otra es la versión de la arquitectura. ¿Podrías clasificar ordenadamente todas las versiones de ARM dentro de la familia correspondiente?

  3. Identifica los términos "Snapdragon” y "PowerVR". Encuentra ejemplos de dispositivos que incorporen estos modelos.

  4. ¿Cuál es el primer procesador ARM con arquitectura de 64 bits? ¿Qué equipos actuales cuentan con él?

  5. ¿Qué diferencia a las familias de procesadores ARM Cortex (A,R,M)? Pon un ejemplo de dispositivo electrónico que emplee una familia u otra.

  6. Enumera las diferencias entre la memoria RAM de un dispositivo móvil con respecto a un portátil u ordenador de sobremesa

  7. ¿Cómo funciona una pantalla LCD?

  8. ¿Qué característica de la pantalla LCD permite denominarla “RETINA” para una marca concreta de smartphones?

  9. ¿Cómo funciona una pantalla AMOLED?

  10. Pregunta sobre las app desarrolladas: ¿Cuáles has elegido? ¿Qué clase / método destacarías en cada una de ellas? ¿Dónde encontraste la mayor dificultad?

Programación

En la parte de programación de este tema se trata de acceder al hardware del dispositivo móvil. Android permite acceder a los sensores internos del dispositivo a través de las clases Sensor, SensorEvent, SensorManager, y la interfaz SensorEventListener, del paquete android.hardware.

La clase Sensor acepta ocho tipos de sensores aunque los sensores disponibles varían en función del dispositivo utilizado, por ejemplo:

  • Acelerómetro (movimiento): TYPE_ACCELEROMETER.

  • Campo magnético (brújula): TYPE_MAGNETIC_FIELD.

  • Giroscopio (detectar giros): TYPE_GYROSCOPE.

  • Orientación (dirección a la que apunta): TYPE_ORIENTATION.

  • Luz ambiental (ajustar iluminación): TYPE_LIGHT.

  • Proximidad (detectar objeto cercano): TYPE_PROXIMITY. móvil:

Ejercicios de programación

Elige dos de las siguientes aplicaciones para programar en Android y probar en tu dispositivo móvil:

  1. Crea una aplicación en Android para mostrar los datos del Acelerómetro en tu dispositivo móvil.

  2. Crea una aplicación en Android para mostrar la posición del GPS de tu dispositivo.

  3. Crea una aplicación en Android para acceder a la cámara (frontal o trasera) de tu dispositivo y visualizar la imagen. Opcionalmente se puede guardar la fotografía en el almacenamiento del dispositivo.

Consejos:

Recuerda importar el paquete Android.hardware en main.java:

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

Ten especial cuidado en AndroidManifest.xml y la versión SdK:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />

Ejemplo de código

Aplicación de cámara

En este caso, dependiendo del uso que se haga de la cámara, si hay frontal o no, así como si se almacenará finalmente la fotografía en la tarjeta SD, el manifest tendrá que contar con los permisos correspondientes:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />        
    <uses-feature android:name="android.hardware.camera.front" android:required="false" />

A continuación se muestra parte de código válido para desarrollar la aplicación. Por ejemplo, una de las primeras accciones sería comprobar si tenemos cámara:

/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

Necesitaremos acceder a la cámara...

/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance(){
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    }
    catch (Exception e){
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}

Una vez creada una clase de vista previa y un diseño de vista, podríamos iniciar la captura de imágenes con su solicitud.

Para obtener la fotografía emplearíamos el método Camera.takePicture (). Este método toma tres parámetros que reciben datos de la cámara. Con el fin de recibir datos en un formato JPEG, deberíamos implementar una interfaz Camera.PictureCallback para recibir los datos de imagen y grabarla en un archivo. El siguiente códido muestra una aplicación básica de la interfaz Camera.PictureCallback para guardar una imagen recibida desde la cámara:

private PictureCallback mPicture = new PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
        if (pictureFile == null){
            Log.d(TAG, "Error creating media file, check storage permissions: " +
                e.getMessage());
            return;
        }

        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
        } catch (FileNotFoundException e) {
            Log.d(TAG, "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, "Error accessing file: " + e.getMessage());
        }
    }
};

Aplicación de acelerometro

Acceder al acelerómetro del dispositivo no va a requerir un uso especial de permisos, pero, dependiendo de la funcionalidad de tu aplicación, el Manifest podrá incorporar:

<uses-feature android:name="android.hardware.sensor.accelerometer" />

Dentro de la actividad principal, será necesario importar diferentes paquetes:

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

Sería necesario obtener una instancia del acelerómetro disponible en nuestro dispositivo:

private SensorManager mSensorManager;
private Sensor mSensor;
  ...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

A continuación se muestra parte de código válido para una aplicación de acelerómetro.

@Override
    public void onSensorChanged(SensorEvent event) {
        synchronized (this) {
            //Cogemos los valores del evento
            x = event.values[0];
            y = event.values[1];
            z = event.values[2];

            long currentTime = System.currentTimeMillis();

            //Comprueba si ha pasado el tiempo suficiente para volver a calcular
            if(currentTime - lastTime > 100) {
                long diffTime = (currentTime - lastTime);
                lastTime = currentTime;

                //Calculo de la velocidad/aceleracion del movil, con los parametros actuales y anteriores
                float speed = Math.abs(x + y + z - lastX - lastY - lastZ)/ diffTime * 10000;

                //Si la aceleracion supera el minimo de fuerza, se actualiza el texto
                if (speed > SHAKE_THRESHOLD) {
                    //Actualizamos textviews con texto
                    axisX.setText("Acelerómetro X: " + String.format("%.2f", x));
                    axisY.setText("Acelerómetro Y: " + String.format("%.2f", y));
                    axisZ.setText("Acelerómetro Z: " + String.format("%.2f", z));
                }

                //Se guarda la posicion de la X, Y y Z
                lastX = x;
                lastY = y;
                lastZ = z;
            }
        }
    }

Aplicación de GPS

La API de Google Location Services, parte de Google Play Services, nos proporciona los servicios de alto nivel relacionados con la de localización y el movimiento del usuario. También permite la elección del modelo de precisión para reducir el consumo de energía.

Se utilizará el paquete Android.location y dentro de este servicio las clases "LocationManager" y "LocationProvider".

La clase LocationManager proporciona acceso al servicio de localización de Android. Este servicio permite acceder a proveedores de localización. La clase LocationProvider proporcion la información sobre la ubicación actual. Esta clase permite definir el método para determinar la ubicación del usuario (GPS, red de datos, red WIFI).

Todos los métodos de API de ubicación requieren los permisos ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION (este último es necesario si se va a emplear GPS e incluye al anterior). Si además se va a usar la red de datos para la localización también es necesario activar el permiso de Internet:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
<uses-permission android:name="android.permission.INTERNET" />

Es posible averiguar si el sistema de localización está activado mediante el método isProviderEnabled(). En este ejemplo se muestra el código de una función llamada getLocation que intenta obtener la ubicación mediante la red de datos. Si no es posible, entonces se emplea el GPS:

public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext
                    .getSystemService(LOCATION_SERVICE);

            // getting GPS status
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status
            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;
                // First get location from Network Provider
                if (isNetworkEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }
    @Override
    public void onLocationChanged(Location location) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

Los datos relacionados con la posición del usuario se obtienen en coordenadas de latidud y longidud, tal y como se indicó anteriormente:

    /**
     * Function to get latitude
     * */
    public double getLatitude(){
        if(location != null){
            latitude = location.getLatitude();
        }

        // return latitude
        return latitude;
    }

    /**
     * Function to get longitude
     * */
    public double getLongitude(){
        if(location != null){
            longitude = location.getLongitude();
        }

        // return longitude
        return longitude;
    }

Last updated