lunes, 8 de septiembre de 2008

LENGUAJE C/C++


C es un lenguaje de programación creado en 1972 por Ken Thompson y Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL. Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.
Se trata de un lenguaje débilmente tipificado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.
La primera estandarización del lenguaje C fue en ANSI, con el estándar X3.159-1989. El lenguaje que define este estándar fue conocido vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción de este estándar es muy amplia por lo que, si los programas creados lo siguen, el código es portátil entre plataformas y/o arquitecturas. En la práctica, los programadores suelen usar elementos no-portátiles dependientes del compilador o del sistema operativo.


Filosofía
C es un lenguaje de programación relativamente minimalista. Uno de los objetivos de diseño de este lenguaje fue que sólo fueran necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que hiciera falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.
En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores.
C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de sistemas, para la que se diseñó originalmente.
C tiene las siguientes características de importancia:
Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de ficheros, proporcionadas por bibliotecas.
Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado no llevado al extremo (permitiendo ciertas licencias rupturistas).
Un sistema de tipos que impide operaciones sin sentido.
Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples ficheros de código fuente.
Acceso a memoria de bajo nivel mediante el uso de punteros.
Interrupciones al procesador con uniones.
Un conjunto reducido de palabras clave.
Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.
Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").
Algunas características de las que C carece que se encuentran en otros lenguajes:
Recolección de basura.
Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C.
Encapsulación.
Funciones anidadas, aunque GCC tiene esta característica como extensión.
Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación genérica.
Soporte nativo para programación multihilo y redes de computadores.
Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje ensamblador produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia.
En algunos casos, una característica inexistente puede aproximarse. Por ejemplo, la implementación original de C++ consistía en un preprocesador que traducía código fuente C++ a C. La mayoría de las funciones orientadas a objetos incluyen un puntero especial, que normalmente recibe el nombre "this", que se refiere al objeto al que pertenece la función. Mediante el paso de este puntero como un argumento de función, esta funcionalidad puede desempeñarse en C. Por ejemplo, en C++ se puede escribir:
stack.push(val);
Mientras que en C, se podría escribir:
push(stack, val);
Donde el argumento stack es un puntero a una struct equivalente al puntero this de C++, que es un puntero a un objeto.

Historia

Desarrollo inicial
El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron tomadas de un lenguaje anterior llamado "B".
Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix. Algunas de ellas son:
El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no tenía sistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador. Entonces decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.
La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo.
En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).

El C de Kernighan y Ritchie
En 1978, Ritchie y Brian Kernighan publicaron la primera edición de El lenguaje de programación C. Este libro fue durante años la especificación informal del lenguaje. El lenguaje descrito en este libro recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o simplemente "K&R C" (La segunda edición del libro cubre el estándar ANSI C, descrito más abajo.)
Kernighan y Ritchie introdujeron las siguientes características al lenguaje:
El tipo de datos struct.
El tipo de datos long int.
El tipo de datos unsigned int.
Los operadores =+ y =- fueron sustituidos por += y -= para eliminar la ambigüedad semántica de expresiones como i=-10, que se podría interpretar bien como i =- 10 o bien como i = -10.
El C de Kernighan y Ritchie es el subconjunto más básico del lenguaje que un compilador debe de soportar. Durante muchos años, incluso tras la introducción del ANSI C, fue considerado "el mínimo común denominador" en el que los programadores debían programar cuando deseaban que sus programas fueran transportables, pues no todos los compiladores soportaban completamente ANSI, y el código razonablemente bien escrito en K&R C es también código ANSI C válido.
En estas primeras versiones de C, las únicas funciones que necesitaban ser declaradas si se usaban antes de la definición de la función eran las que retornaban valores no enteros. Es decir, se presuponía que una función que se usaba sin declaración previa (prototipo) devolvería un entero.
Ejemplo de llamada que requiere declaración previa (prototipo):
long int cierta_funcion();

int llamando_funcion()
{
long int ret;
ret = cierta_funcion();
}
Ejemplo de llamada que no requiere declaración previa:
int llamando_funcion()
{
int ret;
ret = alguna_otra_funcion();
}

int alguna_otra_funcion()
{
return 0;
}
Dado que el lenguaje C de K&R no incluía ninguna información sobre los argumentos de las funciones, no se realizaba comprobación de tipos en los parámetros de las funciones, aunque algunos compiladores lanzan mensajes de advertencia si se llamaba a una función con un número incorrecto de argumentos.
En los años siguientes a la publicación del C de Kernighan y Ritchie, se añadieron al lenguaje muchas características no oficiales, que estaba soportadas por los compiladores de AT&T, entre otros. Algunas de estas características eran:
Funciones void y el tipo de datos void *.
Funciones que retornaban tipos de datos struct o union (en lugar de punteros).
Asignación de tipos de datos struct.
Calificador const, que hace que un objeto sea de sólo lectura.
Una biblioteca estándar, que incorporaba la mayoría de las funcionalidades implementadas por varios desarrolladores de compiladores.
Enumeraciones.

ANSI C e ISO C
A finales de la década de 1970, C empezó a sustituir a BASIC como lenguaje de programación de microcomputadores predominante. Durante la década de 1980 se empezó a usar en los IBM PC, lo que incrementó su popularidad significativamente. Al mismo tiempo, Bjarne Stroustrup empezó a trabajar con algunos compañeros de Bell Labs para añadir funcionalidades de programación orientada a objetos a C. El lenguaje que crearon, llamado C++, es hoy en día el lenguaje de programación de aplicaciones más común en el sistema operativo Microsoft Windows; mientras que C sigue siendo más popular en el entorno Unix. Otro lenguaje que se desarrolló en esa época, Objective C, también añadió características de programación orientada a objetos a C. Aunque hoy en día no es tan popular como C++, se usa para desarrollar aplicaciones Cocoa para Mac OS X.
En 1983, el Instituto Nacional Estadounidense de Estándares organizó un comité, X3j11, para establecer una especificación estándar de C. Tras un proceso largo y arduo, se completó el estándar en 1989 y se ratificó como el "Lenguaje de Programación C" ANSI X3.159-1989. Esta versión del lenguaje se conoce a menudo como ANSI C, o a veces como C89 (para distinguirla de C99).
En 1990, el estándar ANSI (con algunas modificaciones menores) fue adoptado por la Organización Internacional para la Estandarización (ISO) en el estándar ISO/IEC 9899:1990. Esta versión se conoce a veces como C90. No obstante, "C89" y "C90" se refieren en esencia al mismo lenguaje.
Uno de los objetivos del proceso de estandarización del ANSI C fue producir una extensión al C de Kernighan y Ritchie, incorporando muchas funcionalidades no oficiales. Sin embargo, el comité de estandarización incluyó también muchas funcionalidades nuevas, como prototipos de función, y un preprocesador mejorado. También se cambió la sintaxis de la declaración de parámetros para hacerla semejante a la empleada habitualmente en C++:
main(argc, argv)
int argc;
char **argv;
{
...
}
pasó a ser
int main(int argc, char *argv[])
{
...
}
ANSI C está soportado hoy en día por casi la totalidad de los compiladores. La mayoría del código C que se escribe actualmente está basado en ANSI C. Cualquier programa escrito sólo en C estándar sin código que dependa de un hardware determinado funciona correctamente en cualquier plataforma que disponga de una implementación de C compatible. Sin embargo, muchos programas han sido escritos de forma que sólo pueden compilarse en una cierta plataforma, o con un compilador concreto, esto puede ser debido a diversos motivos:
La utilización de bibliotecas no estándar, como interfaces gráficos de usuario.
El uso de compiladores que no cumplen las especificaciones del estándar.
El uso de tipos de datos suponiendo que tendrán el mismo tamaño u orden de los bits en todas las plataformas.
La macro __STDC__ puede usarse para dividir el código en secciones ANSI y K&R para el compilador.
#if __STDC__
extern int getopt(int,char * const *,const char *);
#else
extern int getopt();
#endif
Algunos programadores recomiendan usar "#if __STDC__", como en el ejemplo, en lugar de "#ifdef __STDC__" porque algunos compiladores le asignan el valor cero a __STDC__ para indicar que no son compatibles con ANSI.

C99
Tras el proceso de estandarización de ANSI, la especificación del lenguaje C permaneció relativamente estable durante algún tiempo, mientras que C++ siguió evolucionando. Sin embargo, el estándar continuó bajo revisión a finales de la década de 1990, lo que llevó a la publicación del estándar ISO 9899:1999 en 1999. Este estándar se denomina habitualmente "C99". Se adoptó como estándar ANSI en marzo de 2000.
Las nuevas características de C99 incluyen:
Funciones inline.
Las variables pueden declararse en cualquier sitio (como en C++), en lugar de poder declararse sólo tras otra declaración o al comienzo de una declaración compuesta.
Muchos tipos de datos, incluyendo long long int (para reducir el engorro de la transición de 32 bits a 64 bits), un tipo de datos booleano, y un tipo complex que representa números complejos.
Arrays de longitud variable.
Soporte para comentarios de una línea que empiecen con //, como en BCPL o en C++, característica para la que muchos compiladores habían dado soporte por su cuenta.
muchas funciones nuevas, como snprintf()
muchos headers nuevos, como stdint.h.
Una consideración importante es que hasta la publicación de este estándar, C había sido mayormente un subconjunto estricto del C++. Era muy sencillo "actualizar" un programa de C hacia C++ y mantener ese código compilable en ambos lenguajes. Sin embargo, el nuevo estándar agrega algunas características que C++ no admite, como por ejemplo los inicializadores estáticos de estructuras. También define al tipo "bool" de una manera que no es exactamente la del C++.
El compilador GCC, entre muchos otros, soportan hoy en día la mayoría de las nuevas características de C99. Sin embargo, este nuevo estándar ha tenido peor acogida entre algunos desarrolladores de compiladores, como Microsoft y Borland, que se han centrado en C++. Brandon Bray, de Microsoft, dijo a este respecto: "En general, hemos visto poca demanda de muchas características de C99. Algunas características tienen más demanda que otras, y consideraremos incluirlas en versiones futuras siempre que sean compatibles con C++." [1]

Ventajas
Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.
A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.
Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.

Variantes
Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:
Objective-C es un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS X y GNUstep.
C++ diseñado por Bjarne Stroustrup fue el segundo intento de proporcionar orientación a objetos a C y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación.
También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:
Java, que une la sintaxis del C++ a una orientación a objetos más similar a la de Smalltalk y Objective C.
JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript.
C# (pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de C/C++ y Java.

Proceso de compilación
La compilación de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo:
Preprocesado consistente en modificar el código fuente en C según una serie de instrucciones (denominadas directivas de preprocesado) simplificando de esta forma el trabajo del compilador. Por ejemplo, una de las acciones más importantes es la modificación de las inclusiones (#include) por las declaraciones reales existentes en el fichero indicado.
Compilación que genera el código objeto a partir del código ya preprocesado.
Enlazado que une los códigos objeto de los distintos módulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final.

Ejemplo de código
El siguiente programa imprime en pantalla la frase "Hola Mundo" (C99).
#include // necesario para utilizar printf()

int main(void)
{
printf("Hola, Mundo\n");
// return 0 implícito en C99 para main().
}
El siguiente escribe "Hola, mundo" en C89
/* comentarios con '//' no permitidos en C89, sí en C99 */
#include /* necesario para utilizar printf */

main() /* tipo 'int' de retorno implícito */
{
printf ("Hola Mundo\n") ;
return 0;
}

Herramientas de programación
Al programar en C, es habitual usar algunas herramientas de programación de uso muy extendido, sobre todo en entorno de tipo unix:
make: Herramienta para automatizar el proceso de compilación, enlazado, etc.
lint: Herramienta utilizada para detectar código sospechoso, confuso o incompatible entre distintas arquitecturas

Aplicabilidad
Hecho principalmente para la fluidez de programación en sistemas UNIX. Se usa también para el desarrollo de otros sistemas operativos como Windows o Linux. Igualmente para aplicaciones de escritorio como OpenOffice, que usa una gran cantidad de miles de líneas de código de más de siete lenguajes distintos, en el que el principal es el C.
De la misma forma, es muy usado en aplicaciones científicas (para experimentos informáticos, físicos, químicos, matemáticos, entre otros, parte de ellos conocidos como modelos y simuladores), industriales (industria robótica, cibernética, sistemas de información y base de datos para la industria petrolera y petroquímica, predominan también todo lo que se refiere a simulación de máquinas de manufactura), simulaciones de vuelo (es la más delicada, ya que se tienen que usar demasiados recursos tanto de hardware como de software para desarrollar aplicaciones que permitan simular el vuelo real de un avión, o bien, de un helicóptero por ejemplo); es decir, se aplica en diversas áreas desconocidas por gran parte de los usuarios noveles.
Aunque los lenguajes de tipo dinámico (Ruby, Python, Perl...) están quitándole mercado, debido sobre todo a la mayor potencia de las máquinas actuales, se puede seguir encontrando grandes desarrollos de animaciones, modelados y renderizados 3D en películas (principalmente; también se puede hacer lo mismo en una enciclopedia multimedia por ejemplo para presentar modelos 3D de partes del cuerpo humano, y así otros ejemplos) de su clase.
El mayor problema que presenta el desarrollo con el lenguaje C frente a los lenguajes de tipo de dato dinámico es su gran diferencia de velocidad de desarrollo, siendo mucho más lento desarrollando en C. En cambio, los programas terminados presentan una mejor utilización de los recursos hardware. El mantenimiento también es más difícil y costoso que con el resto de lenguajes. Por otra parte, la mayor parte de los problemas de seguridad en los sistemas informáticos actuales deriva del hecho de que han sido realizados en C: al no disponer de sistemas de control y depender casi exclusivamente de la experiencia del programador, muchas veces quedan algunas entradas de información al programa sin comprobar en su longitud, provocando la sobreescritura de código en la pila del programa. Los lenguajes de tipo dinámico cuentan con muchos más controles de gestión de memoria y de entrada de datos.
Por ello, los directores de desarrollo deben decidir si compensa un desarrollo más largo frente a un peor aprovechamiento del hardware y, teniendo en cuenta además, que el hardware, a igualdad de prestaciones, baja su precio con el tiempo, mientras que el coste de los programadores, aumenta.
Actualmente, los grandes proyectos de software se dividen en partes, dentro de un equipo de desarrollo. Aquellas partes que son más "burocráticas" o "de gestión" con los recursos del sistema, se suelen realizar en lenguajes de tipo dinámico o script, mientras que aquellas partes "críticas", por su necesidad de rapidez de cálculo, se realizan en un lenguaje de tipo compilado, como en C o C++. Si, después de hacer la división, las partes críticas no superan un cierto porcentaje del total (aproximadamente el 10%) entonces todo el desarrollo se realiza con lenguajes dinámicos. Si la parte crítica no llega a cumplir las expectativas del proyecto, se mira a ver si merece hacerse una inversión en un nuevo hardware antes que en invertir en el coste de un programador para que reescriba esa parte crítica.


LA LEY DE OHM

La ley de Ohm, define una propiedad específica de ciertos materiales por la que se cumple la relación:
Un conductor cumple la ley de Ohm sólo si su curva V-I es lineal; esto es si R es independiente de V y de I.
Sin embargo, la relación
sigue siendo la definición general de la resistencia de un conductor, independientemente de si éste cumple o no con la ley de Ohm.
La intensidad de la corriente eléctrica que circula por un dispositivo es directamente proporcional a la diferencia de potencial aplicada e inversamente proporcional a la resistencia del mismo, según expresa la fórmula siguiente:
En donde, empleando unidades del Sistema internacional:
I = Intensidad en amperios (A)
V = Diferencia de potencial en voltios (V)
R = Resistencia en ohmios (Ω).

Enunciado
En un conductor recorrido por una corriente eléctrica, el cociente entre la diferencia de potencial aplicada a los extremos del conductor y la intensidad de la corriente que por él circula, es una cantidad constante, que depende del conductor, denominada resistencia.
La ley enunciada verifica la relación entre voltaje y corriente en un resistor.

Historia
El científico aleman Georg Simon Ohm, mientras experimentaba con materiales conductores, como resultado de su investigación, llegó a determinar que la relación entre voltaje y corriente era constante y nombró a esta constante resistencia.
Esta ley fue formulada por Georg Simon Ohm en 1827, en la obra Die galvanische Kette, mathematisch bearbeitet (Trabajos matemáticos sobre los circuitos eléctricos), basándose en evidencias empíricas. La formulación original, es:
Siendo la densidad de la corriente, σ la conductividad eléctrica y el campo eléctrico, sin embargo se suele emplear las fórmulas simplificadas anteriores para el análisis de los circuitos

martes, 2 de septiembre de 2008

PROGRAMACIÓN PIC

Los 'PIC' son una familia de microcontroladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instruments.
El nombre actual no es un acrónimo. En realidad, el nombre completo es PICmicro, aunque generalmente se utiliza como Peripheral Interface Controller (Controlador de Interfaz Periférico).
El PIC original se diseñó para ser usado con la nueva UCP de 16 bits CP16000. Siendo en general una buena UCP, ésta tenía malas prestaciones de E/S, y el PIC de 8 bits se desarrolló en 1975 para mejorar el rendimiento del sistema quitando peso de E/S a la UCP. El PIC utilizaba microcódigo simple almacenado en ROM para realizar estas tareas; y aunque el término no se usaba por aquel entonces, se trata de un diseño RISC que ejecuta una instrucción cada 4 ciclos del oscilador.
En 1985, dicha división de microelectrónica de General Instruments se convirtió en una filial y el nuevo propietario canceló casi todos los desarrollos, que para esas fechas la mayoría estaban obsoletos. El PIC, sin embargo, se mejoró con EPROM para conseguir un controlador de canal programable. Hoy en día multitud de PICs vienen con varios periféricos incluidos (módulos de comunicación serie, UARTs, núcleos de control de motores, etc.) y con memoria de programa desde 512 a 32.000 palabras (una palabra corresponde a una instrucción en ensamblador, y puede ser 12, 14 o 16 bits, dependiendo de la familia específica de PICmicro).

Juego de instrucciones y entorno de programación
El PIC usa un juego de instrucciones tipo RISC, cuyo número puede variar desde 35 para PICs de gama baja a 70 para los de gama alta. Las instrucciones se clasifican entre las que realizan operaciones entre el acumulador y una constante, entre el acumulador y una posición de memoria, instrucciones de condicionamiento y de salto/retorno, implementación de interrupciones y una para pasar a modo de bajo consumo llamada sleep.
Microchip proporciona un entorno de desarrollo freeware llamado MPLAB que incluye un simulador software y un ensamblador. Otras empresas desarrollan compiladores C y BASIC. Microchip también vende compiladores para los PICs de gama alta ("C18" para la serie F18 y "C30" para los dsPICs) y se puede descargar una edición para estudiantes del C18 que inhabilita algunas opciones después de un tiempo de evaluación.
Para Pascal existe un compilador de código abierto, JAL, lo mismo que PicForth para el lenguaje Forth. GPUTILS es una colección de herramientas distribuidas bajo licencia GNU que incluye ensamblador y enlazador, y funciona en Linux, MacOS y Microsoft Windows. GPSIM es otra herramienta libre que permite simular diversos dispositivos hardware conectados al PIC.

Programación del PIC
Para transferir el código de un ordenador al PIC normalmente se usa un dispositivo llamado programador. La mayoría de PICs que Microchip distribuye hoy en día incorporan ICSP (In Circuit Serial Programming, programación serie incorporada) o LVP (Low Voltage Programming, programación a bajo voltaje), lo que permite programar el PIC directamente en el circuito destino. Para la ICSP se usan los pines RB6 y RB7 como reloj y datos y el MCLR para activar el modo programación aplicando un voltaje de unos 11 voltios. Existen muchos programadores de PICs, desde los más simples que dejan al software los detalles de comunicaciones, a los más complejos, que pueden verificar el dispositivo a diversas tensiones de alimentación e implementan en hardware casi todas las funcionalidades. Muchos de estos programadores complejos incluyen ellos mismos PICs preprogramados como interfaz para enviar las órdenes al PIC que se desea programar. Uno de los programadores más simples es el TE20, que utiliza la línea TX del puerto RS232 como alimentación y las líneas DTR y CTS para mandar o recibir datos cuando el microcontrolador está en modo programación. El sofware de programación puede ser el ICprog, muy común entre la gente que utiliza este tipo de microcontroladores.
Se pueden obtener directamente de Microchip muchos programadores/depuradores (octubre 2005):

Programadores
PICStart Plus (puerto serie y USB)
Promate II (puerto serie)
MPLAB PM3 (puerto serie y USB)
ICD2 (puerto serie y USB)
PICKit 1 (USB)
IC-Prog 1.06B
PICAT 1.25 (puerto USB2.0 para PICs y Atmel)
WinPic 800 (puerto paralelo, serie y USB)
Terusb1.0
Además es posible armarse un programador de manera casera, en http://microspics.blogspot.com hay una lista con los más utilizados.
Este es un programador que utiliza el puerto USB, es freeware. http://www.eclip-se.es.tl/

Depuradores integrados
ICD (Serie)
ICD2 (USB)

Emuladores
ICE2000 (puerto paralelo, convertidor a USB disponible)
ICE4000 (USB)
PIC EMU
PIC CDlite
visual basic

Tamaño de palabra
El tamaño de palabra de los microcontroladores PIC es fuente de muchas confusiones. Todos los PICs (excepto los dsPIC) manejan datos en trozos de 8 bits, con lo que se deberían llamar microcontroladores de 8 bits. Pero a diferencia de la mayoría de UCPs, el PIC usa arquitectura Harvard, por lo que el tamaño de las instrucciones puede ser distinto del de la palabra de datos. De hecho, las diferentes familias de PICs usan tamaños de instrucción distintos, lo que hace difícil comparar el tamaño del código del PIC con el de otros microcontroladores. Por ejemplo, un microcontrolador tiene 6144 bytes de memoria de programa: para un PIC de 12 bits esto significa 4096 palabras y para uno de 16 bits, 3072 palabras.

Características
Los PICs actuales vienen con una amplia gama de mejoras hardware incorporadas:
Núcleos de UCP de 8/16 bits con Arquitectura Harvard modificada
Memoria Flash y ROM disponible desde 256 bytes a 256 kilobytes
Puertos de E/S (típicamente 0 a 5,5 voltios)
Temporizadores de 8/16 bits
Tecnología Nanowatt para modos de control de energía
Periféricos serie síncronos y asíncronos: USART, AUSART, EUSART
Conversores analógico/digital de 10-12 bits
Comparadores de tensión
Módulos de captura y comparación PWM
Controladores LCD
Periférico MSSP para comunicaciones I²C, SPI, y I²S
Memoria EEPROM interna con duración de hasta un millón de ciclos de lectura/escritura
Periféricos de control de motores
Soporte de interfaz USB
Soporte de controlador Ethernet
Soporte de controlador CAN
Soporte de controlador LIN
Soporte de controlador Irda

Variaciones del PIC

PICs modernos
Los viejos PICs con memoria PROM o EPROM se están renovando gradualmente por chips con memoria Flash. Así mismo, el juego de instrucciones original de 12 bits del PIC1650 y sus descendientes directos ha sido suplantado por juegos de instrucciones de 14 y 16 bits. Microchip todavía vende versiones PROM y EPROM de la mayoría de los PICs para soporte de aplicaciones antiguas o grandes pedidos.
Se pueden considerar tres grandes gamas de MCUs PIC en la actualidad: Los básicos (Linebase), los de medio rango (Mid Range) y los de alto desempeño (high performance). Los PIC18 son considerandos de alto desempeño y tienen entre sus miembros a PICs con módulos de comunicación y protocolos avanzados (USB, Ethernet, Zigbee por ejemplo).

Clones del PIC
Por todos lados surgen compañías que ofrecen versiones del PIC más baratas o mejoradas. La mayoría suelen desaparecer rápidamente. Una de ellas que va perdurando es Ubicorn (antiguamente Scenix) que vende clones del PIC que funcionan mucho más rápido que el original. OpenCores tiene un núcleo del PIC16F84 escrito en Verilog.

PICs wireless
El microcontrolador rfPIC integra todas las prestaciones del PICmicro de Microchip con la capacidad de comunicación wireless UHF para aplicaciones RF de baja potencia. Estos dispositivos ofrecen un diseño muy comprimido para ajustarse a los cada vez más demanadados requerimientos de miniaturización en aparatos electrónicos. Aún así, no parecen tener mucha salida en el mercado.

PICs para procesado de señal (dsPICs)
Los dsPICs son el penúltimo lanzamiento de Microchip, comenzando a producirlos a gran escala a finales de 2004. Son los primeros PICs con bus de datos inherente de 16 bits. Incorporan todas las posibilidades de los anteriores PICs y añaden varias operaciones de DSP implementadas en hardware, como multiplicación con suma de acumulador (multiply-accumulate, o MAC), barrel shifting, bit reversion o multiplicación 16x16 bits.

PICs de 32 bits (PIC32)
Microchip Technology lanzo en noviembre de 2007 los nuevos microcontroladores de 32 bits con una velocidad de procesamiento de 1.5 DMIPS/MHz con capacidad HOST USB. Estos MCUs permiten un procesamiento de información increíble con un núcleo de procesador de tipo M4K.

PICs más comúnmente usados
PIC12C508/509 (encapsulamiento reducido de 8 pines, oscilador interno, popular en pequeños diseños como el iPod remote)
PIC16F84 (Considerado obsoleto, pero imposible de descartar y muy popular)
PIC16F84A (Buena actualización del anterior, algunas versiones funcionan a 20 MHz, compatible 1:1)
PIC12F629/675
PIC16F628
PIC16F88 (Nuevo sustituto del PIC16F84A con más memoria, oscilador interno, PWM, etc que podría convertirse en popular como su hermana menor)
La familia PIC16F87X y PIC16F87XA (los hermanos mayores del PIC16F84, con cantidad de mejoras incluidas en hardware. Bastante común en proyectos de aficionados)
PIC18F2455 y similares con puerto USB 2.0
PIC18F2550
PIC18F452
PIC18F4550
dsPIC30F3011 (Ideales para control elecronico de motores electricos de induccion)
PIC32 (Nueva gama de PIC de 32 bits)

PICs en Internet
Se puede encontrar mucha información y documentación sobre PICs en Internet principalmente por dos motivos: el primero, porque han sido muy usados para romper los sistemas de seguridad de varios productos de consumo mayoritario (televisión de pago, Play Station...), lo que atrae la atención de los crackers; y segundo, porque el PIC16C84 fue uno de los primeros microcontroladores fácilmente reprogramables para aficionados. Hay muchos foros y listas de correo dedicados al PIC en los que un usuario puede proponer sus dudas y recibir respuestas.
Pero también podemos enfocar el tema de internet a la posibilidad que se tiene de desarrollar con estos, Sistemas SCADA vía Web debido a que pueden adquirir y enviar datos al puerto serial de un computador utilizando transmisión UART y el protocolo RS232, o la posibilidad de implementar el protocolo TCP/IP directamente.

PROGRAMACIÓN PLC

Los PLC (Programmable Logic Controller en sus siglas en inglés) son dispositivos electrónicos muy usados en Automatización Industrial.
Su historia se remonta a finales de la década de 1960 cuando la industria buscó en las nuevas tecnologías electrónicas una solución más eficiente para reemplazar los sistemas de control basados en circuitos eléctricos con relés, interruptores y otros componentes comúnmente utilizados para el control de los sistemas de lógica combinacional.
Hoy en día, los PLC no sólo controlan la lógica de funcionamiento de máquinas, plantas y procesos industriales, sino que también pueden realizar operaciones aritméticas, manejar señales analógicas para realizar estrategias de control, tales como controladores proporcional integral derivativo (PID).
Los PLC actuales pueden comunicarse con otros controladores y computadoras en redes de área local, y son una parte fundamental de los modernos sistemas de control distribuido.
Existen varios lenguajes de programación, tradicionalmente los más utilizados son el diagrama de escalera (Lenguaje Ladder), preferido por los electricistas, lista de instrucciones y programación por estados, aunque se han incorporado lenguajes más intuitivos que permiten implementar algoritmos complejos mediante simples diagramas de flujo más fáciles de interpretar y mantener. Un lenguaje más reciente, preferido por los informaticos y electronicos, es el FBD (en inglés Function Block Diagram)que emplea compuertas lógicas y bloques con distintas funciones conectados entre si.
En la programación se pueden incluir diferentes tipos de operandos, desde los más simples como lógica booleana, contadores, temporizadores, contactos, bobinas y operadores matemáticos, hasta operaciones más complejas como manejo de tablas (recetas), apuntadores, algoritmos PID y funciones de comunicación multiprotocolos que le permitirían interconectarse con otros dispositivos.

Historia
Los PLC fueron inventados en respuesta a las necesidades de la automatización de la industria automotriz norteamericana por el ingeniero Estadounidense Dick Morley. Antes de los PLC, el control, las secuenciación, y la lógica para la manufactura de automóviles era realizada utilizando relés, contadores, y controladores dedicados. El proceso para actualizar dichas instalaciones en la industria año tras año era muy costoso y consumía mucho tiempo, y los sistemas basados en relés tenían que ser recableados por electricistas especializados. En 1968 GM Hydramatic (la división de transmisiones automáticas de General Motors) ofertó un concurso para una propuesta del reemplazo electrónico de los sistemas cableados.
La propuesta ganadora vino de Bedford Associates de Boston, Masachusets. El primer PLC, fue designado 084, debido a que fue el proyecto ochenta y cuatro de Bedford Associates. Bedford Associates creo una nueva compañía dedicada al desarrollo, manufactura, venta y servicio para este nuevo producto: Modicon (MOdular DIgital CONtroller o Controlador Digital Modular). Una de las personas que trabajo en ese proyecto fue Dick Morley, el que es considerado como "padre" del PLC. La marca Modicon fue vendida en 1977 a Gould Electronics, y posteriormente adquirida por la compañía Alemana AEG y más tarde por Schneider Electric, el actual dueño.
Uno de los primeros modelos 084 que se construyeron se encuentra mostrado en la sede de Modicon en el Norte de Andover, Masachusets. Fue regalado a Modicon por GM, cuando la unidad fue retirada tras casi veinte años de servicio ininterrumpido.
La industria automotriz es todavía una de las más grandes usuarias de PLC, y Modicon todavía numera algunos de sus modelos de controladores con la terminación ochenta y cuatro. Los PLC son utilizados en muchas diferentes industrias y máquinas tales como máquinas de empaquetado y de semiconductores. Algunas marcas con alto prestigio son ABB Ltd., Koyo, Honeywell, Siemens, Trend Controls, Schneider Electric, Omron, Rockwell (Allen-Bradley), General Electric, fraz max, Tesco Controls, Panasonic (Matsushita), Mitsubishi e Isi Matrix machines.

PLC en comparación con otros sistemas de control
Los PLC están adaptados para un amplio rango de tareas de automatización. Estos son típicos en procesos industriales en la manufactura donde el coste de desarrollo y mantenimiento de un sistema de automatización es relativamente alto contra el coste de la automatización, y donde van a existir cambios en el sistema durante toda su vida operacional. Los PLC contienen todo lo necesario para manejar altas cargas de potencia; se requiere poco diseño eléctrico y el problema de diseño se centra en expresar las operaciones y secuencias en la lógica de escalera (o diagramas de funciones). Las aplicaciones de PLC son normalmente hechos a la medida del sistema, por lo que el costo del PLC es bajo comparado con el costo de la contratación del diseñador para un diseño específico que solo se va a usar una sola vez. Por otro lado, en caso de productos de alta producción, los sistemas de control a medida se amortizan por si solos rápidamente debido al ahorro en los componentes, lo que provoca que pueda ser una buena elección en vez de una solución "genérica".
Sin embargo, debe ser notado que algunos PLC ya no tienen un precio alto. Los PLC actuales tienen todas las capacidades por algunos cientos de dólares.
Diferentes técnicas son utilizadas para un alto volumen o una simple tarea de automatización, Por ejemplo, una lavadora de uso doméstico puede ser controlada por un temporizador CAM electromecánico costando algunos cuantos dólares en cantidades de producción.
Un diseño basado en un microcontrolador puede ser apropiado donde cientos o miles de unidades deben ser producidas y entonces el coste de desarrollo (diseño de fuentes de alimentación y equipo de entradas y salidas) puede ser dividido en muchas ventas, donde el usuario final no tiene necesidad de alterar el control. Aplicaciones automotrices son un ejemplo, millones de unidades son vendidas cada año, y pocos usuarios finales alteran la programación de estos controladores. (Sin embargo, algunos vehículos especiales como son camiones de pasajeros para tránsito urbano utilizan PLC en vez de controladores de diseño propio, debido a que los volúmenes son pequeños y el desarrollo no sería económico.)
Algunos procesos de control complejos, como los que son utilizados en la industria química, pueden requerir algoritmos y características más allá de la capacidad de PLC de alto nivel. Controladores de alta velocidad también requieren de soluciones a medida; por ejemplo, controles para aviones.
Los PLC pueden incluir lógica para implementar bucles analógicos, “proporcional, integral y derivadas” o un controlador PID. Un bucle PID podría ser usado para controlar la temperatura de procesos de fabricación, por ejemplo. Históricamente, los PLC’s fueron configurados generalmente con solo unos pocos bucles de control analógico y en donde los procesos requieren cientos o miles de bucles, un Sistema de Control Distribuido (DCS) se encarga. Sin embargo, los PLC se han vuelto más poderosos, y las diferencias entre las aplicaciones entre DCS y PLC han quedado menos claras.

Señales Analógicas y digitales
Las señales digitales o discretas como los interruptores, son simplemente una señal de On/Off (1 ó 0, Verdadero o Falso, respectivamente). Los botones e interruptores son ejemplos de dispositivos que proporcionan una señal discreta. Las señales discretas son enviadas usando la tensión o la intensidad, donde un rango especifico corresponderá al On y otro rango al Off. Un PLC puede utilizar 24V de corriente continua en la E/S donde valores superiores a 22V representan un On, y valores inferiores a 2V representan Off. Inicialmente los PLC solo tenían E/S discretas.
Las señales analógicas son como controles de volúmenes, con un rango de valores entre 0 y el tope de escala. Esto es normalmente interpretado con valores enteros por el PLC, con varios rangos de precisión dependiendo del dispositivo o del número de bits disponibles para almacenar los datos. Presión, temperatura, flujo, y peso son normalmente representados por señales analógicas. Las señales analógicas pueden usar tensión o intensidad con una magnitud proporcional al valor de la señal que procesamos. Por ejemplo, una entrada de 4-20 mA o 0-10 V será convertida en enteros comprendidos entre 0-32767.
Las entradas de intensidad son menos sensibles al ruido eléctrico (como por ejemplo el arranque de un motor eléctrico) que las entradas de tensión.
Ejemplo:
Como ejemplo, las necesidades de una instalación que almacena agua en un tanque. El agua llega al tanque desde otro sistema, y como necesidad a nuestro ejemplo, el sistema debe controlar el nivel del agua del tanque.
Usando solo señales digitales, el PLC tiene 2 entradas digitales de dos interruptores del tanque (tanque lleno o tanque vacío). El PLC usa la salida digital para abrir o cerrar una válvula que controla el llenado del tanque.
Si los dos interruptores están apagados o solo el de “tanque vacío” esta encendido, el PLC abrirá la válvula para dejar entrar agua. Si solo el de “tanque lleno” esta encendido, la válvula se cerrara. Si ambos interruptores están encendidos sería una señal de que algo va mal con uno de los dos interruptores, porque el tanque no puede estar lleno y vacío a la vez. El uso de dos interruptores previene situaciones de pánico donde cualquier uso del agua activa la bomba durante un pequeño espacio de tiempo causando que el sistema se desgaste más rápidamente.
Un sistema analógico podría usar una báscula que pese el tanque, y una válvula ajustable. El PLC podría usar un PID para controlar la apertura de la válvula. La báscula esta conectada a una entrada analógica y la válvula a una salida analógica. El sistema llena el tanque rápidamente cuando hay poca agua en el tanque. Si el nivel del agua baja rápidamente, la válvula se abrirá todo lo que se pueda, si el al contrario, la válvula se abrirá poco para que entre el agua lentamente.
Con este diseño del sistema, la válvula puede desgastarse muy rápidamente, por eso, los técnicos ajustan unos valores que permiten que la válvula solo se abra en unos determinados valores y reduzca su uso.
Un sistema real podría combinar ambos diseños, usando entradas digitales para controlar el vaciado y llenado total del tanque y el sensor de peso para optimizarlos.

Capacidades E/S en los PLC modulares
Los PLC modulares tienen un limitado número de conexiones para la entrada y la salida. Normalmente, hay disponibles ampliaciones si el modelo base no tiene suficientes puertos E/S.
Los PLC con forma de rack tienen módulos con procesadores y con módulos de E/S separados y opcionales, que pueden llegar a ocupar varios racks. A menudo hay miles de entradas y salidas, tanto analógicas como digitales. A veces, se usa un puerto serie especial de E/S que se usa para que algunos racks puedan estar colocados a larga distancia del procesador, reduciendo el coste de cables en grandes empresas. Alguno de los PLC actuales pueden comunicarse mediante un amplio tipo de comunicaciones incluidas RS-485, coaxial, e incluso Ethernet para el control de las entradas salidas con redes a velocidades de 100 Mbps.
Los PLC usados en grandes sistemas de E/S tienen comunicaciones P2P entre los procesadores. Esto permite separar partes de un proceso complejo para tener controles individuales mientras se permita a los subsistemas comunicarse mediante links. Estos links son usados a menudo por dispositivos de Interfaz de usuario (HMI) como keypads o estaciones de trabajo basados en PC (personal computer).
El número medio de entradas de un PLC es 3 veces el de salidas, tanto en analógico como en digital. Las entradas “extra” vienen de la necesidad de tener métodos redundantes para controlar apropiadamente los dispositivos, y de necesitar siempre mas controles de entrada para satisfacer la realimentación de los dispositivos conectados.

Programación
Los primeros PLC, en la primera mitad de los 80, eran programados usando sistemas de programación propietarios o terminales de programación especializados, que a menudo tenían teclas de funciones dedicadas que representaban los elementos lógicos de los programas de PLC. Los programas eran guardados en cintas. Más recientemente, los programas PLC son escritos en aplicaciones especiales en un ordenador, y luego son descargados directamente mediante un cable o una red al PLC. Los PLC viejos usan una memoria no volátil (magnetic core memory) pero ahora los programas son guardados en una RAM con batería propia o en otros sistemas de memoria no volátil como las memoria flash.
Los primeros PLC fueron diseñados para ser usados por electricistas que podían aprender a programar los PLC en el trabajo. Estos PLC eran programados con “lógica de escalera”("ladder logic"). Los PLC modernos pueden ser programados de muchas formas, desde la lógica de escalera hasta lenguajes de programación tradicionales como el BASIC o C. Otro método es usar la Lógica de Estados (State Logic), un lenguaje de programación de alto nivel diseñado para programas PLC basándose en los diagramas de transición de estados.
Recientemente, el estándar internacional IEC 61131-3 se está volviendo muy popular. IEC 61131-3 define cinco lenguajes de programación para los sistemas de control programables: FBD (Function block diagram), LD (Ladder diagram), ST (Structured text, similar al Lenguaje de programación Pascal), IL (Instruction list) y SFC (Sequential function chart).
Mientras que los conceptos fundamentales de la programación del PLC son comunes a todos los fabricantes, las diferencias en el direccionamiento E/S, la organización de la memoria y el conjunto de instrucciones hace que los programas de los PLC nunca se puedan usar entre diversos fabricantes. Incluso dentro de la misma línea de productos de un solo fabricante, diversos modelos pueden no ser directamente compatibles.

TURBO ELECTRÓNICA 2000


1. Introducción
La electrónica es el campo de la ingeniería y de la física aplicada relativo al diseño y aplicación de dispositivos, por lo general circuitos electrónicos, cuyo funcionamiento depende del flujo de electrones para la generación, transmisión, recepción, almacenamiento de información, entre otros. Esta información puede consistir en voz o música como en un receptor de radio, en una imagen en una pantalla de televisión, o en números u otros datos en un ordenador o computadora.
Los circuitos electrónicos ofrecen diferentes funciones para procesar esta información, incluyendo la amplificación de señales débiles hasta un nivel que se pueda utilizar; el generar ondas de radio; la extracción de información, como por ejemplo la recuperación de la señal de sonido de una onda de radio (demodulación); el control, como en el caso de introducir una señal de sonido a ondas de radio (modulación), y operaciones lógicas, como los procesos electrónicos que tienen lugar en las computadoras.

2. Antecedentes históricos
La introducción de los tubos de vacío a comienzos del siglo XX propició el rápido crecimiento de la electrónica moderna. Con estos dispositivos se hizo posible la manipulación de señales, algo que no podía realizarse en los antiguos circuitos telegráficos y telefónicos, ni con los primeros transmisores que utilizaban chispas de alta tensión para generar ondas de radio. Por ejemplo, con los tubos de vacío pudieron amplificarse las señales de radio y de sonido débiles, y además podían superponerse señales de sonido a las ondas de radio. El desarrollo de una amplia variedad de tubos, diseñados para funciones especializadas, posibilitó el rápido avance de la tecnología de comunicación radial antes de la II Guerra Mundial, y el desarrollo de las primeras computadoras, durante la guerra y poco después de ella.

Hoy día, el transistor, inventado en 1948, ha reemplazado casi completamente al tubo de vacío en la mayoría de sus aplicaciones. Al incorporar un conjunto de materiales semiconductores y contactos eléctricos, el transistor permite las mismas funciones que el tubo de vacío, pero con un coste, peso y potencia más bajos, y una mayor fiabilidad. Los progresos subsiguientes en la tecnología de semiconductores, atribuible en parte a la intensidad de las investigaciones asociadas con la iniciativa de exploración del espacio, llevó al desarrollo, en la década de 1970, del circuito integrado. Estos dispositivos pueden contener centenares de miles de transistores en un pequeño trozo de material, permitiendo la construcción de circuitos electrónicos complejos, como los de los microordenadores o microcomputadoras, equipos de sonido y vídeo, y satélites de comunicaciones.

3. Componentes electrónicos
Los circuitos electrónicos constan de componentes electrónicos interconectados. Estos ponentes se clasifican en dos categorías: activos o pasivos. Entre los pasivos se incluyen las resistencias, los condensadores y las bobinas. Los considerados activos incluyen las baterías (o pilas), los generadores, los tubos de vacío y los transistores.

Tubos de vacío.
Un tubo de vacío consiste en una cápsula de vidrio de la que se ha extraído el aire, y que lleva en su interior varios electrodos metálicos. Un tubo sencillo de dos elementos (diodo) está formado por un cátodo y un ánodo, este último conectado al terminal positivo de una fuente de alimentación. El cátodo (un pequeño tubo metálico que se calienta mediante un filamento) libera electrones que migran hacia él (un cilindro metálico en torno al cátodo, también llamado placa). Si se aplica una tensión alterna al ánodo, los electrones sólo fluirán hacia el ánodo durante el semiciclo positivo; durante el ciclo negativo de la tensión alterna, el ánodo repele los electrones, impidiendo que cualquier corriente pase a través del tubo. Los diodos conectados de tal manera que sólo permiten los semiciclos positivos de una corriente alterna (CA) se denominan tubos rectificadores y se emplean en la conversión de corriente alterna a corriente continua (CC) .Al insertar una rejilla, formada por un hilo metálico en espiral, entre el cátodo y el ánodo, y aplicando una tensión negativa a dicha rejilla, es posible controlar el flujo de electrones. Si la rejilla es negativa, los repele y sólo una pequeña fracción de los electrones emitidos por el cátodo pueden llegar al ánodo. Este tipo de tubo, denominado triodo, puede utilizarse como amplificador. Las pequeñas variaciones de la tensión que se producen en la rejilla, como las generadas por una señal de radio o de sonido, pueden provocar grandes variaciones en el flujo de electrones desde el cátodo hacia el ánodo y, en consecuencia, en el sistema de circuitos conectado al ánodo.

Transistores
Los transistores se componen de semiconductores. Se trata de materiales, como el silicio o el germanio, dopados (s decir, se les han incrustado pequeñas cantidades de materias extrañas con reacciones químicas), de manera que se produce una abundancia o unacarencia de electrones libres. En el primer caso, se dice que el semiconductor es del tipo n, y en el segundo que es del tipo p. Combinando materiales del tipo n y del tipo p puede producirse un diodo. Cuando éste se conecta a una batería de manera tal que el material tipo p es positivo y el material tipo n es negativo, los electrones son repelidos desde el terminal negativo de la batería y pasan, sin ningún obstáculo, a la región p, que carece de electrones. Con la batería invertida, los electrones que llegan al material p pueden pasar sólo con muchas dificultades hacia el material n, que ya está lleno de electrones libres, en cuyo caso la corriente es casi cero.

El transistor bipolar fue inventado en 1948 para sustituir al tubo de vacío triodo. Está formado por tres capas de material dopado, que forman dos uniones pn (bipolares) con configuraciones pnp o npn. Una unión está conectada a la batería para permitir el flujo de corriente (polarización negativa frontal, o polarización directa), y la otra está conectada a una batería en sentido contrario (polarización inversa). Si se varía la corriente en la unión de polarización directa mediante la adición de una señal, la corriente de la unión de polarización inversa del transistor variará en consecuencia. El principio puede utilizarse para construir amplificadores en los que una pequeña señal aplicada a la unión de polarización directa provocará un gran cambio en la corriente de la unión de polarización inversa.

Otro tipo de transistor es el de efecto de campo (FET, acrónimo inglés de Field-Effect Transistor), que funciona sobre la base del principio de repulsión o de atracción de cargas debido a la superposición de un campo eléctrico. La amplificación de la corriente se consigue de manera similar al empleado en el control de rejilla de un tubo de vacío. Los transistores de efecto de campo funcionan de forma más eficaz que los bipolares, ya que es posible controlar una señal grande con una cantidad de energía muy pequeña.

Circuitos integrados
La mayoría de los circuitos integrados son pequeños trozos, o chips, de silicio, de entre 2 y 4 mm2, sobre los que se fabrican los transistores. La fotolitografía permite al diseñador crear centenares de miles de transistores en un solo chip situando de forma adecuada las numerosas regiones tipo n y p. Durante la fabricación, estas regiones son interconectadas mediante conductores minúsculos, a fin de producir circuitos especializados complejos. Estos circuitos integrados son llamados monolíticos por estar fabricados sobre un único cristal de silicio. Los chips requieren mucho menos espacio y potencia, y su fabricación es más barata que la de un circuito equivalente compuesto por transistores individuales.

Resistencias
Al conectar una batería a un material conductor, una determinada cantidad de corriente fluirá a través de dicho material. Esta corriente depende de la tensión de la batería, de las dimensiones de la muestra y de la conductividad del propio material. Las resistencia se emplean para controlar la corriente en los circuitos electrónicos. Se elaboran con mezclas de carbono, láminas metálicas o hilo de resistencia, y disponen de dos cables de conexión. A las resistencias variables se le llaman reóstatos o potenciometros, con un brazo de contacto deslizante y ajustable, suelen utilizarse para controlar el volumen de radios y televisiones.

Condensadores
Los condensadores están formados por dos placas metálicas separadas por un material aislante. Si se conecta una batería a ambas placas, durante un breve tiempo fluirá una corriente eléctrica que se acumulará en cada una de ellas. Si se desconecta la batería, el condensador conserva la carga y la tensión asociada a la misma. Las tensiones rápidamente cambiantes, como las provocadas por una señal de sonido o de radio, generan mayores flujos de corriente hacia y desde las placas; entonces, el condensador actúa como conductor de la corriente alterna. Este efecto puede utilizarse, por ejemplo, para separar una señal de sonido o de radio de una corriente continua, a fin de conectar la salida de una fase de amplificación a la entrada de la siguiente.

Bobinas
Las bobinas (también llamadas inductores) consisten en un hilo conductor enrollado. Al pasar una corriente a través de la bobina, alrededor de la misma se crea un campo magnético que tiende a oponerse a los cambios bruscos de la intensidad de la corriente. Al igual que un condensador, una bobina puede utilizarse para diferenciar entre señales rápida y lentamente cambiantes (altas y bajas frecuencias). Al utilizar una bobina conjuntamente con un condensador, la tensión de la bobina alcanza un valor máximo a una frecuencia específica que depende de la capacitancia y de la inductancia. Este principio se emplea en los receptores de radio al seleccionar una frecuencia específica mediante un condensador variable.

Dispositivos de detección y transductores
La medición de magnitudes mecánicas, térmicas, eléctricas y químicas se realiza empleando dispositivos denominados sensores y transductores. El sensor es sensible a los cambios de la magnitud a medir, como una temperatura, una posición o una concentración química. El transductor convierte estas mediciones en señales eléctricas, que pueden alimentar a instrumentos de lectura, registro o control de las magnitudes medidas. Los sensores y transductores pueden funcionar en ubicaciones alejadas del observador, así como en entornos inadecuados o impracticables para los seres humanos.

Algunos dispositivos actúan de forma simultánea como sensor y transductor. Un termopar consta de dos uniones de diferentes metales que generan una pequeña tensión que depende del diferencial término entre las uniones. El termistor es una resistencia especial, cuyo valor de resistencia varía según la temperatura. Un reóstato variable puede convertir el movimiento mecánico en señal eléctrica. Para medir distancias se emplean condensadores de diseño especial, y para detectar la luz se utilizan fotocélulas. Para medir velocidades, aceleración o flujos de líquidos se recurre a otro tipo de dispositivos. En la mayoría de los casos, la señal eléctrica es débil y debe ser amplificada por un circuito electrónico.

4. Circuitos electrónicos de uso frecuente
Circuitos de alimentación eléctrica (Fuentes)
La mayoría de los equipos electrónicos requieren tensiones de CC para su funcionamiento. Estas tensiones pueden ser suministradas por baterías o por fuentes de alimentación internas que convierten la corriente alterna, que puede obtenerse de la red eléctrica que llega a cada vivienda, en tensiones reguladas de CC. El primer elemento de una fuente de alimentación de CC interna es el transformador, que eleva o disminuye la tensión de entrada a un nivel adecuado para el funcionamiento del equipo. La función secundaria del transformador es servir como aislamiento de masa (conexión a tierra) eléctrica del dispositivo a fin de reducir posibles peligros de electrocución. A continuación del transformador se sitúa un rectificador, que suele ser un diodo. En el pasado se utilizaban diodos de vacío y una amplia variedad de diferentes materiales (cristales de germanio o sulfato de cadmio) en los rectificadores de baja potencia empleados en los equipos electrónicos. En la actualidad se emplean casi exclusivamente rectificadores de silicio debido a su bajo coste y alta fiabilidad.

Las fluctuaciones y ondulaciones superpuestas a la tensión de CC rectificada (percibidas como un zumbido en los amplificadores de sonido defectuosos) pueden filtrarse mediante un condensador. Cuanto más grande sea el condensador, menor será el nivel de fluctuación de la tensión. Es posible alcanzar un control más exacto sobre los niveles y fluctuaciones de tensión mediante un regulador de tensión, que también consigue que las tensiones internas sean independientes de las fluctuaciones que puedan encontrarse en un artefacto eléctrico. Un sencillo regulador de tensión que se utiliza a menudo es el diodo de Zener, formado por un diodo de unión pn de estado sólido que actúa como aislante hasta una tensión predeterminada. Por encima de dicha tensión, se convierte en un conductor que deriva los excesos de tensión. Por lo general, los reguladores de tensión más sofisticados se construyen como circuitos integrados.

Circuitos amplificadores
Los amplificadores electrónicos se utilizan sobre todo para aumentar la tensión, la corriente o la potencia de una señal. Los amplificadores lineales incrementan la señal sin distorsionarla (o distorsionándola mínimamente), de manera que la salida es proporcional a la entrada. Los amplificadores no lineales permiten generar un cambio considerable en la forma de onda de la señal. Los amplificadores lineales se utilizan para señales de sonido y vídeo, mientras que los no lineales se emplean en osciladores, dispositivos electrónicos de alimentación, moduladores, mezcladores, circuitos lógicos y demás aplicaciones en las que se requiere una reducción de la amplitud. Aunque los tubos de vacío tuvieron gran importancia en los amplificadores, hoy día suelen utilizarse circuitos de transistores discretos o circuitos integrados.

5. Amplificadores de sonido
Los amplificadores de sonido, de uso común en radios, televisiones y grabadoras de cintas, suelen funcionar a frecuencias entre 2 y 20 kiloherz (1 kHz = 1.000 ciclos por segundo). Amplifican la señal eléctrica que, a continuación, se convierte en sonido con un altavoz. Los amplificadores operativos, incorporados en circuitos integrados y formados por amplificadores lineales multifásicos acoplados a la corriente continua, son muy populares como amplificadores de sonido.

Amplificadores de vídeo
Los amplificadores de vídeo se utilizan principalmente para señales con un rango de frecuencias de hasta 6 megaherz (1 MHz = 1 millón de ciclos por segundo). La señal generada por el amplificador se convierte en la información visual por ejemplo la que aparece en la pantalla de televisión, y la amplitud de señal regula el brillo de los puntos que forman la imagen. Para realizar esta función, un amplificador de vídeo debe funcionar en una banda ancha y amplificar de igual manera todas las señales, con baja distorsión.

Amplificadores de radiofrecuencia
Estos amplificadores aumentan el nivel de señal de los sistemas de comunicaciones
de radio o televisión. Por lo general, sus frecuencias van desde 100 kHz hasta 1 gigaherz (1 GHz = 1.000 millones de ciclos por segundo), y pueden llegar incluso al rango de frecuencias de microondas.

Osciladores
Los osciladores constan de un amplificador y de algún tipo de realimentación: la señal de salida se reconduce a la entrada del amplificador. Los elementos determinantes de la frecuencia pueden ser un circuito de inductancia-capacitancia sintonizado o un cristal vibrador. Los osciladores controlados por cristal ofrecen mayor precisión y estabilidad. Los osciladores se emplean para producir señales de sonido y de radio en una amplia variedad de usos. Por ejemplo, los osciladores sencillos de radiofrecuencia se emplean en los modernos teléfonos de teclas para transmitir datos a la estación telefónica central al marcar un número. Los tonos de sonido generados por los osciladores también pueden encontrarse en relojes despertadores, radios, instrumentos electrónicos, computadoras y sistemas de alarma. Los osciladores de alta frecuencia se emplean en equipos de comunicaciones para controlar las funciones de sintonización y detección de señales. Las emisoras de radio y de televisión utilizan osciladores de alta frecuencia y de gran precisión para generar las frecuencias de transmisión.

6. Circuitos Lógicos
Los circuitos de conmutación y temporización, o circuitos lógicos, forman la base de cualquier dispositivo en el que se tengan que seleccionar o combinar señales de manera controlada. Entre los campos de aplicación de estos tipos de circuitos pueden mencionarse la conmutación telefónica, las transmisiones por satélite y el funcionamiento de las computadoras digitales.
La lógica digital es un proceso racional para adoptar sencillas decisiones de 'verdadero' o 'falso' basadas en las reglas del álgebra de Boole. El estado verdadero se representado por un 1, y falso por un 0, y en los circuitos lógicos estos numerales aparecen como señales de dos tensiones diferentes. Los circuitos lógicos se utilizan para adoptar decisiones específicas de 'verdadero-falso' sobre la base de la presencia de múltiples señales 'verdadero-falso' en las entradas. Las señales se pueden generar por conmutadores mecánicos o por transductores de estado sólido. La señal de entrada, una vez aceptada y acondicionada (para eliminar las señales eléctricas indeseadas, o ruidos), es procesada por los circuitos lógicos digitales. Las diversas familias de dispositivos lógicos digitales, por lo general circuitos integrados, ejecutan una variedad de funciones lógicas a través de las llamadas puertas lógicas, como las puertas OR, AND y NOT y combinaciones de las mismas (como 'NOR', que incluye a OR y a NOT). Otra familia lógica muy utilizada es la lógica transistor-transistor. También se emplea la lógica de semiconductor complementario de óxido metálico, que ejecuta funciones similares a niveles de potencia muy bajos pero a velocidades de funcionamiento ligeramente inferiores. Existen también muchas otras variedades de circuitos lógicos, incluyendo la hoy obsoleta lógica reóstato-transistor y la lógica de acoplamiento por emisor, utilizada para sistemas de muy altas velocidades.
Los bloques elementales de un dispositivo lógico se denominan puertas lógicas digitales. Una puerta Y (AND) tiene dos o más entradas y una única salida. La salida de una puerta Y es verdadera sólo si todas las entradas son verdaderas. Una puerta O (OR) tiene dos o más entradas y una sola salida. La salida de una puerta O es verdadera si cualquiera de las entradas es verdadera, y es falsa si todas las entradas son falsas. Una puerta INVERSORA (INVERTER) tiene una única entrada y una única salida, y puede convertir una señal verdadera en falsa, efectuando de esta manera la función negación (NOT). A partir de las puertas elementales pueden construirse circuitos lógicos más complicados, entre los que pueden mencionarse los circuitos biestables (también llamados flip-flops, que son interruptores binarios), contadores, comparadores, sumadores y combinaciones más complejas.
En general, para ejecutar una determinada función es necesario conectar grandes cantidades de elementos lógicos en circuitos complejos. En algunos casos se utilizan microprocesadores para efectuar muchas de las funciones de conmutación y temporización de los elementos lógicos individuales. Los procesadores están específicamente programados con instrucciones individuales para ejecutar una determinada tarea o tareas. Una de las ventajas de los microprocesadores es que permiten realizar diferentes funciones lógicas, dependiendo de las instrucciones de programación almacenadas. La desventaja de los microprocesadores es que normalmente funcionan de manera secuencial, lo que podría resultar demasiado lento para algunas aplicaciones. En tales casos se emplean circuitos lógicos especialmente diseñados.
7. Avances recientes
El desarrollo de los circuitos integrados ha revolucionado los campos de las comunicaciones, la gestión de la información y la informática. Los circuitos integrados han permitido reducir el tamaño de los dispositivos con el consiguiente descenso de los costes de fabricación y de mantenimiento de los sistemas. Al mismo tiempo, ofrecen mayor velocidad y fiabilidad. Los relojes digitales, las computadoras portátiles y los juegos electrónicos son sistemas basados en microprocesadores. Otro avance importante es la digitalización de las señales de sonido, proceso en el cual la frecuencia y la amplitud de una señal de sonido se codifica digitalmente mediante técnicas de muestreo adecuadas, es decir, técnicas para medir la amplitud de la señal a intervalos muy cortos. La música grabada de forma digital, como la de los discos compactos, se caracteriza por una fidelidad que no era posible alcanzar con los métodos de grabación directa.
La electrónica médica a llegado hasta a sistemas que pueden diferenciar aún más los órganos del cuerpo humano. Se han desarrollado asimismo dispositivos que permiten ver los vasos sanguíneos y el sistema respiratorio. También la alta definición promete sustituir a numerosos procesos fotográficos al eliminar la necesidad de utilizar plata.
La investigación actual dirigida a aumentar la velocidad y capacidad de las computadoras se centra sobre todo en la mejora de la tecnología de los circuitos integrados y en el desarrollo de componentes de conmutación aún más rápidos. Se han construido circuitos integrados a gran escala que contienen varios centenares de miles de componentes en un solo chip. Han llegado a fabricarse computadoras que alcanzan altísimas velocidades en las cuales los semiconductores son reemplazados por circuitos superconductores que utilizan las uniones de Josephson y que funcionan a temperaturas cercanas al cero absoluto.