Está en la página 1de 26

Interfaces

Unidad Temas 1 Sensores Subtemas 1.1 pticos. 1.1.1 Tipos. 1.1.2 Funcionamiento. 1.1.3 Caractersticas. 1.1.4 Modo de comunicacin. 1.2 Aproximacin. 1.2.1 Tipos. 1.2.2 Funcionamiento. 1.2.3 Caractersticas. 1.2.4 Modo de comunicacin. 2 Actuadores. Electrnicos. 2.1.1 Funcionamiento. 2.1.2 Caractersticas. 2.1.3 Modo de comunicacin. 2.2 Mecnicos. 2.2.1 Funcionamiento. 2.2.2 Caractersticas. 2.2.3 Modo de comunicacin. 2.1 Tipos. 3.1.1 Serial. 3.1.2 Paralelo. 3.2 Aplicaciones con lenguaje de programacin hbrida. 3.3 Aplicaciones con lenguaje de programacin hbrida. 3.1 4.1 A travs de puertos 4.1.1 Diseo 4.1.2 Programacin. 4.1.3 Aplicacin. 4.2 A travs de interfaz. 4.2.1 Diseo 4.2.2 Programacin. 4.2.3 Aplicacin. 5.1 Conceptos bsicos. 5.2 Clasificacin. 5.3 Programacin de bajo nivel. 5.4 Aplicaciones.

Perifricos estandarizados.

Perifricos no estandarizados.

Interfaces.

Unidad1. Sensores
1.3 pticos. 1.3.1 Tipos.

http://www.todocontrol.com/es-mx/dept_9.html 1.3.2 Funcionamiento. 1.3.3 Caractersticas. 1.3.4 Modo de comunicacin. 1.4 Aproximacin. 1.4.1 Tipos. 1.4.2 Funcionamiento. 1.4.3 Caractersticas. 1.4.4 Modo de comunicacin.

Interfaces.

Unidad 2. Actuadores.

En el control de un proceso automatizado, es imprescindible un dialogo entre operadormquina junto con una comunicacin entre la mquina y el autmata, estas comunicaciones se establecern por medio del conjunto de entradas y salidas del citado elemento. Los autmatas son capaces de manejar tensiones y corrientes de nivel industrial, gracias a que disponen un bloque de circuitos de interfaz de E/S muy potente, que les permite conectarse directamente con los sensores y accionamientos del proceso. De entre todos los tipos de interfaces que existen, las interfaces especificas permiten la conexin con elementos muy concretos del proceso de automatizacin. Se pueden distinguir entre ellas tres grupos bien diferenciados: Entradas / salidas especiales. Entradas / salidas inteligentes. Procesadores perifricos inteligentes.

Las interfaces especiales del primer grupo se caracterizan por no influir en las variables de estado del proceso de automatizacin. nicamente se encargan de adecuar las E/S, para que puedan ser inteligibles por la CPU, si son entradas, o para que puedan ser interpretadas correctamente por actuadores (motores, cilindros, etc.), en el caso de las salidas.

Las del segundo grupo admiten mltiples modos de configuracin, por medio de unas combinaciones binarias situadas en la misma tarjeta. De esta forma se descarga de trabajo a la unidad central, con las ventajas que conlleva.

Los procesadores perifricos inteligentes, son mdulos que incluyen su propio procesador, memorias y puntos auxiliares de entrada / salida. Estos procesadores contienen en origen un programa especializado en la ejecucin de una tarea concreta, a la que le basta conocer los puntos de consigna y los parmetros de aplicacin para ejecutar, de forma autnoma e independiente de la CPU principal, el programa de control. http://www.grupomaser.com/PAG_Cursos/Auto/auto2/auto2/PAGINA %20PRINCIPAL/PLC/ESTRUCTURAS/ESTRUCTURA %20INTERNA/INTERFACES/interfaces.htm

Electrnicos. 2.3.1 Funcionamiento. 2.3.2 Caractersticas. 2.3.3 Modo de comunicacin. 2.4 Mecnicos.
2.3 PERIFRICOS DE SALIDA. Los perifricos de salida o actuadores de un automatismo son dispositivos que realizan las funciones y tareas concretas cuando se reciben del sistema de control. Actuadores mecnicos: son dispositivos que utilizan energa mecnica para su funcionamiento. En funcin de la fuente de energa utilizada pueden ser neumticos o hidrulicos. Actuadores neumticos: funcionan mediante la energa mecnica que les proporcionan el aire comprimido. Los actuadores neumticos se utilizan para transmitir pequeos esfuerzos a altas velocidades. Actuadores hidrulicos: aprovechan la propiedad que tienen los lquidos de transmitir presin de manera uniforme a lo largo de todo el fluido cuando son comprimidos. Si colocamos un lquido en el interior de dos cilindros comunicados entre ellos y cerrados por dos mbolos tal como muestra la presin ejercida sobre cualquier punto de la superficie del embolo1 del cilindro, ha de ser igual que la superficie del embolo2 del cilindro. Teniendo en cuenta que la presin es la fuerza ejercida por unidad de superficie: P= F/S. P1=P2: porque el lquido es incompresible.

Ejercicio 1:

Calcular la fuerza necesaria en el embolo1 para mover un peso de 100 Kg. Encima del embolo2. La superficie del cilindro 1 es de 20 cm y la del cilindro 2 es de 200 cm . S1=20 cm S2=200 cm F2: 100Kg. F1/S1=F2/S2; F1/20=100/200= F1= (100/200)*20=

F1=10 Kg Ejercicio 2: Calcular la superficie del cilindro 1 con una fuerza en el embolo 1 de 1Kg, una fuerza en el embolo2 de 1.000 Kg y una superficie en el cilindro2 30 cm . S2=30 cm F2: 1.000Kg. F1=1 Kg. F1/S1=F2/S2; 1/S1=1.000/30= S1= 30/1.000= S1=0.03 cm

Inconvenientes de los actuadores hidrulicos: son muy lentos. Actuadores elctricos: son dispositivos de salida de un automatismo que utilizan la energa elctrica para su funcionamiento. Ej: la luz de un semforo. Las mquinas de control numrico (CNC): son maquinas automticas que controlan los desplazamientos de sus elementos de trabajo con una precisin de micras. Las ms importantes se utilizan en la fabricacin de piezas mecnicas aunque tambin se utilizan en piezas de madera y en tejidos bordados. Toda la informacin necesaria para la fabricacin de piezas con CNC se consigue mediante una serie de ordenes que constituyen un programa. Los programas de control numrico se introducen en las maquinas a travs de un teclado. En las maquinas herramientas es control numrico automatiza y controla todas las acciones. Estas mquinas permiten controlar los movimientos, el valor y sentido de las velocidades de avance y de corte, cambio de herramientas y otras condiciones como por ejemplo la refrigeracin. Tambin suelen estar dotadas de detectores para controlar el desgaste de las herramientas o averas. Programas de control numrico: permiten la introduccin de las ordenes necesarias para realizar la construccin de una pieza determinada. Estas ordenes se codifican como el de Siemens, el Fagor, etc. El programa se puede introducir a la maquina desde un ordenador conectado por un cable. Energa neumtica: proviene de la palabra griega pneuma que significa soplido. En nuestro entorno podemos encontrar muchos objetos que utilizan aire. Llamamos instalaciones neumticas al conjunto de mquinas y aparatos que funcionan utilizando la energa que les proporciona el aire comprimido. El aire es un gas y por los tanto a diferencia de los lquidos y los slidos se puede reducir el volumen que ocupa comprimindolo. http://profesormolina2.webcindario.com/tecnologia/plc/auto.htm

2.4.1 Funcionamiento. 2.4.2 Caractersticas . 2.4.3 Modo de comunicacin.

Unidad 3. Perifricos estandarizados.


3.4

Tipos. 3.4.1Serial. 3.4.2Paralelo.

Introduccin El puerto paralelo se utiliza generalmente para manejar impresoras. Sin embargo, dado que este puerto tiene un conjunto de entradas y salidas digitales, se puede emplear para hacer prcticas experimentales de lectura de datos y control de dispositivos. Esta obra pretende dar a conocer los aspectos ms relevantes del puerto paralelo, de modo que se pueda utilizar como una interface de entrada/salida que funcione de modo subordinado a rutinas de software. Este trabajo surge de la necesidad de una gua para la prctica de la adquisicin de datos y control de dispositivos como una alternativa al uso de Controladores Lgicos Programables (PLC) y Tarjetas de Adquisicin de Datos, de modo que se puedan hacer experiencias con sistemas en TiempoReal. Se asume cierto conocimiento del lector de conceptos bsicos de programacin y electrnica. En este trabajo se utilizar como herramientas de software el Borland Delphi, Turbo Pascal 6.0, Turbo C 3.0 y Visual Basic 4.0. Hay que hacer notar que el autor de este libro tiene una formacin informtica, consecuentemente, en algunas secciones se encontrarn descripciones desde este punto de vista. Agradecera las crticas que se hagan a este trabajo. Estas sern obviamente fruto de la prctica y la experiencia. Estas crticas enriquecern este material en futuras ediciones. http://www.angelfire.com/pa2/jcgr/tecnica/PP/pp.htm Aspectos generales
Puertos de Entrada / Salida (E/S)

Los puertos de E/S se constituyen en el medio por el cual el microprocesador de un computador se comunica con su entorno. Existen puertos para cada interaccin de la unidad de procesamiento principal con sus dispositivos auxiliares. As, existe un puerto de entrada del teclado, un puerto de salida para el vdeo, un puerto de entrada para el ratn, etc. La computadora Personal (PC) puede direccionar hasta 64K puertos de E/S. Cada puerto se designa por un nmero. A continuacin se listan las direcciones en hexadecimal de los puertos ms usuales de E/S.
Direcciones de puertos ms usuales de E/S Direccin Descripcin

Desde Hasta 000 020 030 040 060 061 170 200 278 2E8 2F8 370 00F 02F 03F 043 060 061 17F 20F 27F 2EF 2FF 377 Controlador de DMA (acceso directo a memoria) Controlador de interrupciones maestro Controlador de interrupciones esclavo Temporizador Teclado Altavoz Primer disco duro Puerto de juegos Tercer puerto paralelo LPT3 Puerto serie 4 COM4 Puerto serie 2 COM2 Controla Controlador de disco flexible

378 3B0 3BC 3E0 3F8 220

37F 3BB 3BF 3EF 3FF 22F

Segundo puerto paralelo LPT2 Adaptador de vdeo monocromo Primer puerto paralelo LPT1 Puerto serie 3 COM3 Puerto serie 1 COM1 Usualmente las tarjetas de sonido

Historia, evolucin y tipos de puertos paralelos Historia En 1981, la IBM (International Business Machines) introdujo la Computadora Personal (PC). El puerto paralelo (Standart Parallel Port SPP) estaba incluido en el primer PC y se agreg a ste como una alternativa al bajo rendimiento del puerto serial, para utilizarlo como controlador de las impresoras de matriz de punto de alto desempeo. Este puerto tena la capacidad de transmitir 8 bits de datos a la vez (del PC a la impresora), mientras que el puerto serial lo haca de uno en uno. En el momento que el puerto paralelo fue presentado, las impresoras de punto fueron el principal dispositivo externo que se conecto a ste. Al hacerse extensamente utilizado, el puerto paralelo lleg a ser la respuesta para conectar dispositivos ms rpidos. Despus de este inicio, tres grandes grupos de problemas aparecieron a los desarrolladores y usuarios de este puerto: Primero, aunque ste haba aumentado su velocidad considerablemente, no haba cambio en la arquitectura o desempeo. La mxima velocidad de transferencia alcanzable

estaba por los 150 kbyte /seg. y era extremadamente dependiente del software. Segundo, no haba un estndar para la interface elctrica. Esto causaba muchos problemas cuando se quera garantizar la operacin en mltiples plataformas. Por ltimo, la forma de diseo que le dieron, limitaba la distancia de los cables externos hasta un mximo de 1,8 metros. En 1991 hubo una reunin de fabricantes de modo que se pudiera desarrollar un nuevo estndar para el control inteligente de impresoras a travs de una red. Estos fabricantes, donde estaban incluidos Lexmark, IBM, Texas Instruments y otros, formaron la Network Printing Alliance (NPA), como una respuesta a estas necesidades. Evolucin Desde la introduccin del PC al mercado, el puerto paralelo ha sufrido varias modificaciones para hacerlo ms veloz. Ya que el puerto original era unidireccional, se cre el puerto bidireccional. El puerto bidireccional fue introducido con el PS/2 compatible. Este permite una comunicacin de 8 bits en ambas direcciones. Algo interesante de notar es que el puerto original tena la posibilidad de ser bidireccional realizando una conexin entre dos pines de un componente electrnico que vena incluido en ste. (Dicho de otro modo, el puerto original es bidireccional en diseo bsico, pero no en el diseo operacional). Finalmente se han creado el Enhanced Parallel Port (EPP) y el Extended Capability Port (ECP). Estos dos ltimos son al puerto estndar como el Pentium al 286, adems de ser bidireccionales. Inicialmente el puerto paralelo se utiliz para la comunicacin con impresoras. Actualmente se utiliza tambin para manejar otros perifricos como CD ROM, cintas de copia de respaldo, discos duros, tarjetas de red, protectores de copia, scanners, etc. Tipos de puerto paralelo En la actualidad se conoce cuatro tipos de puerto paralelo:
o o o o

Puerto paralelo estndar (Standart Parallel Port SPP) Puerto Paralelo PS/2 (bidireccional) Enhanced Parallel Port (EPP) Extended Capability Port (ECP)

En la siguiente tabla se muestra informacin sintetizada de cada uno de estos tipos de puertos.
SPP Fecha de Introduccin Fabricante Bidireccional DMA Velocidad 1981 IBM No No 150 Kbyte/seg. 1987 IBM Si No 150 Kbytes/seg. PS/2 1994 Intel, Xircom y Zenith Data Systems Si No 2 Mbytes/seg. EPP 1994 Hewlett Packard y Microsoft Si Si 2 Mbytes/seg. ECP

Descripcin del puerto paralelo


Descripcin general

Inicialmente se coloc al puerto paralelo en la tarjeta del "Adaptador de impresora de IBM", o tambin con la tarjeta del "monitor monocromtico y adaptador de impresora de IBM". Con la llegada de clones al mercado, se crea un controlador de mltiples entradas y salidas (Multi I/O) donde se instalan controladores de discos, puertos serie, puerto de juegos y el puerto paralelo. En la actualidad (1999) el puerto paralelo se incluye comnmente incluido en la placa madre de la computadora (MotherBoard). No obstante, la conexin del puerto con el mundo externo no ha sufrido modificaciones. Este puerto utiliza un conector hembra DB25 en la computadora y un conector especial macho llamado Centronic que tiene 36 pines. Es posible conectar el DB25 de 25 pines al Centronic de 36 pines ya que cerca de la mitad de los pines del Centronic van a tierra y no se conectan con el DB25. Descripcin del conector DB25 del PC y el conector DB25 del Centronic

El puerto paralelo est formado por 17 lneas de seales y 8 lneas de tierra. Las lneas de seales estn formadas por tres grupos:
o o o

4 Lneas de control 5 Lneas de estado 8 Lneas de datos

En el diseo original las lneas de control son usadas para la interface, control e intercambio de mensajes desde el PC a la impresora.

Las lneas de estado son usadas para intercambio de mensajes, indicadores de estado desde la impresora al PC (falta papel, impresora ocupada, error en la impresora). Las lneas de datos suministran los datos de impresin del PC hacia la impresora y solamente en esa direccin. Las nuevas implementaciones del puerto permiten una comunicacin bidireccional mediante estas lneas. Cada una de estas lneas (control, estado, datos) puede ser referenciada de modo independiente mediante un registro. Los registros del puerto paralelo Cada registro del puerto paralelo es accesado mediante una direccin. El puerto paralelo tiene tres registros:
o o o

Registro de datos Registro de estado Registro de control

En la tabla que se muestra a continuacin se muestra la relacin que existe entre las lneas fsicas del conector del PC y los registros. Tabla general del puerto paralelo
DB25 Seal
1 Control 0 2 Dato 0 3 Dato 1 4 Dato 2 5 Dato 3 6 Dato 4 7 Dato 5 8 Dato 6 9 Dato 7 10 Estado 6 11 Estado 7 12 Estado 5 13 Estado 4 14 Control 1 15 Estado 3 16 Control 2 17 Control 3 18-25 Tierra

Registro
C0D0 D1 D2 D3 D4 D5 D6 D7 S6+ S7S5+ S4+ C1S3+ C2+ C3-

Tipo
Salida Salida Salida Salida Salida Salida Salida Salida Salida Entrada Entrada Entrada Entrada Salida Entrada Salida Salida

Activo
Bajo Alto Alto Alto Alto Alto Alto Alto Alto Alto Bajo Alto Alto Bajo Alto Alto Bajo

Sentido
Invertido directo directo directo directo directo directo directo directo directo Invertido directo directo Invertido directo directo Invertido

Notas: Un dato en alto es un 1, un dato en bajo es un 0 La entrada y salida son desde el punto de vista del PC Esquema El puerto paralelo esquemticamente, se describe a continuacin. Ntese la conexin al bus ISA en la parte izquierda y los registros en la parte derecha.

Descripcin de los componentes

El puerto paralelo originalmente estaba formado por los siguientes componentes: o 1 Latch para manejar el registro de datos o 1 Buffer para controlar la retroalimentacin del registro de datos o 1 Buffer para manejar el registro de estado o 1 Latch para manejar el registro de control o 1 Buffer para controlar la retroalimentacin del registro de control o 1 Multiplexor para direccionar los puertos en el bus ISA o 1 Driver bidireccional para conectar con el bus ISA Funcionamiento
Explicacin del funcionamiento mediante el BIOS y el MS-DOS

IBM especific direcciones base para el puerto paralelo estndar (dentro del espacio de direccionamiento de Entrada/Salida del 80x86). El adaptador de impresora podra usar la direccin base 3BCh, o ms tarde 378h o 278h. El BIOS (Basic Input Output System) de IBM crea en el momento de arranque o POST (Power On Seft Test) una tabla en el espacio de la memoria principal (RAM) para 4 direcciones base de puerto paralelo de impresora, estos se almacenan como 4 bytes empezando con la direccin de memoria 408h. Durante el arranque, el BIOS comprueba si hay puertos paralelos en las direcciones base 3BCh, 378h, y 278h, en ese orden, y almacena la direccin base de cualesquiera que hayan sido encontrados en posiciones consecutivas de la tabla. Las posiciones que no son usadas pueden estar en 0, o como algunos BIOS lo hacen, le colocan la direccin del primer puerto encontrado. Algunos programas pueden ignorar esta tabla, pero esta es usada por lo menos por el propio BIOS (mediante la INT 17 de E/S de impresora) y por el MS-DOS. El BIOS detecta estos puertos escribiendo AAh al registro de datos (en la direccin de E/S Base + 0), y luego si en el registro de datos se lee AAh. Significa que hay un puerto. Normalmente la asignacin de direcciones es como sigue:
Direccin 3BCh 378h Nombre LPT1 LPT2 Ubicacin Adaptador de impresin primario Adaptador de impresin secundario

Las referencias a cada registro del puerto se realizan de la siguiente forma: o Base (datos)=base+0 o Estado=base+1 o Control=base+2 Por ejemplo, si encontramos que la direccin base es 378h, entonces las direcciones del registro de datos, estado y control sern: o Base (datos)=378h o Estado=379h o Control=37Ah Cada una de ellas permite accesar a los siguientes bits (descritos en la tabla general): o Base (datos)=D0, D1, D2, D3, D4, D5, D6, D7 o Estado=S3, S4, S5, S6, S7 o Control=C0, C1, C2, C3

Programacin y acceso apuertos


Deteccinde la direccin base del puerto paralelo

Primeramente se debe tener algn procedimiento para poder determinar cul es la direccin base del puerto. Como se dijo anteriormente, el puerto paralelo tiene su direccin base en dos direcciones consecutivas de memoria. Entonces se debe leer el contenido de estas direcciones de memoria, a fin de determinar si existe un puerto y cul es su direccin. MS-DOS Bajo MS-DOS se puede usar el comando externo debug.exe del siguiente modo: Ejecutar el comando: debug.exe, luego aparece el smbolo Escribir despus de este signo d 40:0008 Dependiendo del equipo aparece un volcado de la memoria de la siguiente forma: (los datos pueden variar) 0040:0000 ______________________78 03 00 00 00 00 00 00 La direccin del puerto se encuentra en forma invertida (78 03), entonces la direccin es: 0378 en hexadecimal. Cabe hacer notar que esta direccin puede ser diferente en otros PC. (Se escribe q y luego enter para salir de debug.exe) En Turbo Pascal con ensamblador Program buscar_base; uses crt; Var base : word; begin asm mov ax, 0040h {Colocar 0040h en el reg. Ax} mov es, ax {Direccionar el segmento es con el valor de ax} mov ax, es:[si] {Colocar en ax el contenido de la direccin de memoria [0040:0008]} mov base, ax; {Actualizar la variable base con el valor de ax} end; writeln (' La direccin base en decimal es : ',base); end. En Turbo Pascal Program buscar_base; uses crt; Var base:word; Begin base:=memW[$0040:$0008]; writeln('La direccin base en decimal es : ',base); end. Analizador del puerto paralelo Este analizador se utiliza para determinar la direccin base del puerto y adems permite visualizar el contenido de los registros en forma continua y en formato binario y hexadecimal. Este programa se compila con Turbo Pascal.
{Archivo analisis.pas}

{Analizador de estado del Puerto Paralelo} {Autor: Juan Carlos Galarza Roca} {Diciembre de 1997} {Versin : 1.0} Program analisis_PP; uses crt, dos, cadena, utiles; var dir_base, dir_estado, dir_control : Word; puntero_int_1C : Pointer; tick : Integer; sw_m_t : Integer; {$F+,S-,W-} procedure manejador; interrupt; {Este manejador se utiliza para temporizar el despliegue del indicador de exploracin, de modo que se haga la lectura de datos y a la vez se despliegue el indicador} var a, b, x, y : Integer; begin if sw_m_t=0 then begin; {sw_m_t es la bandera del manejador de tareas Esta bandera es actualizada por el programa principal } x:=whereX; y:=whereY; {se guarda la posicin del cursor en la pantalla} tick:=tick+1; { La variable tick se incrementa cada 18,20677500572 segundos} a:=6; b:=3; textcolor(7); gotoxy(39+a,b);write('Explorando... '); textcolor(2); case tick of 13: begin gotoxy(60+a,b); write('> '); gotoxy(52+a,b); write(' <');end; 15: begin gotoxy(60+a,b); write('-> '); gotoxy(52+a,b) ;write(' <-');end; 17: begin gotoxy(60+a,b); write(' -> '); gotoxy(52+a,b); write(' <- ');end; 19: begin gotoxy(60+a,b); write(' -> '); gotoxy(52+a,b); write(' <- ');end; 21: begin gotoxy(60+a,b); write(' -> '); gotoxy(52+a,b); write(' <- ');end; 23: begin gotoxy(60+a,b); write(' -> '); gotoxy(52+a,b); write(' <- ');end; 25: begin gotoxy(60+a,b); write(' <- '); gotoxy(52+a,b); write('< ');end; 27: begin gotoxy(60+a,b); write(' <- '); gotoxy(52+a,b); write(' -> ');end; 29: begin gotoxy(60+a,b); write(' <- '); gotoxy(52+a,b); write(' -> ');end; 31: begin gotoxy(60+a,b); write(' <- '); gotoxy(52+a,b); write(' -> ');end;

33: begin gotoxy(60+a,b); write('<- '); gotoxy(52+a,b); write(' -> ');end; 34: tick:=13; end; gotoxy(x,y); {Devolver la posicin original del cursor} end; end; {$F-,S+} begin cursor_off; tick:=0; {Colocar el manejador de tareas} GetIntVec($1C,puntero_int_1C); SetIntVec($1C,Addr(manejador)); clrscr; dir_base:=memW[$0040:0008]; dir_estado:=dir_base+1; dir_control:=dir_base+2; textcolor(2); gotoxy(23,2);writeln('Analizador del Puerto Paralelo'); textcolor(9); gotoxy(8,4); writeln('Direcciones: '); textcolor(9); gotoxy(10,5); writeln('Datos : ',dec_a_hexa(dir_base),' (h)'); gotoxy(10,6); writeln('Estado : ',dec_a_hexa(dir_estado),' (h)'); gotoxy(10,7); writeln('Control: ',dec_a_hexa(dir_control),' (h)'); {Ciclo repetivo principal} repeat sw_m_t:=1; textcolor(9); gotoxy(34,4); writeln('Estado: '); gotoxy(36,5); write('Datos : ',port[dir_base]:3,' (d) '); dec_bin(port[dir_base]);write(' (b)'); gotoxy(36,6); write('Estado : ',port[dir_estado]:3,' (d) '); dec_bin(port[dir_estado]);write(' (b)'); gotoxy(36,7); write('Control: ',port[dir_control]:3,' (d) '); dec_bin(port[dir_control]);write(' (b)'); textcolor(7); gotoxy(9,9); write('Registro de Datos'); gotoxy(25,10); write('Pines 9 8 7 6 5 4 3 2'); gotoxy(25,11); write('Nombre D7 D6 D5 D4 D3 D2 D1 D0'); textcolor(2); gotoxy(25,12); write('Valor '); dec_bin2(port[dir_base]); textcolor(7); gotoxy(9,14); write('Registro de Estado'); gotoxy(25,15); write('Pines 11 10 12 13 15 ** ** **'); gotoxy(25,16); write('Nombre -S7 S6 S5 S4 S3 ** ** **'); textcolor(2); gotoxy(25,17);write('Valor '); dec_bin2(port[dir_estado]); textcolor(7); gotoxy(9,19); write('Registro de Control'); gotoxy(25,20); write('Pines ** ** ** ** 17 16 14 1'); gotoxy(25,21); write('Nombre ** ** ** ** -C3 C2 -C1 -C0'); textcolor(2); gotoxy(25,22);write('Valor '); dec_bin2(port[dir_control]); textcolor(2); gotoxy(8,24);write('[Copyrigth (c) 1997 por JCGR Soft <pparalelo@hotmail.com>]'); textcolor(7); sw_m_t:=0;

delay(100); until keypressed; cursor_on; {Restaurar manejador de tareas} SetIntVec($1C,puntero_int_1C); end. Envio y lectura de datos del puerto Envo de datos al puerto El puerto paralelo puede ser usado como una comunicacin directa con el PC, de este modo es posible desarrollar aplicaciones en tiempo-real que necesiten un rpido tiempo de respuesta. El acceso se realiza escribiendo un byte (8 bits) en registro determinado. Este byte debe referirse a cada uno de los bits del registro. Esto significa que se debe definir el byte a escribir en sistema binario. Por ejemplo si queremos escribir en el registro de datos el bit D0 y el bit D2 entonces el byte es:

0 D7

0 D6

0 D5

0 D4

0 D3

1 D2

0 D1

1 D0

= 5 En decimal Registro de datos

Luego, se debe escribir 5 en el registro de datos (direccin base): Notas: dir_base y dir_estado es de tipo word, y dato es de tipo byte. En Turbo Pascal Port[dir_base]:=5; En C Outportb(dir_base, 5); En ensamblador mov dx, dir_base {Direccionar en dx la direccin base} mov al, 5 {Colocar en al el nmero 5} out dx, al {Enviar al puerto}

Lectura de datos del puerto La lectura de datos se realiza accesando un byte del registro determinado. Al hacer la lectura se debe convertir el byte a binario para determinar l o los bits que interesen. Note que slo se debe leer el registro de estado, o sea, la direccin base+1. En Turbo Pascal Var dato: byte; dato:=Port[dir_estado]; En C unsigned int dato; dato=inportb(dir_estado); En ensamblador mov dx, dir_estado {Direccionar dx con el registro de estado del puerto} in al, dx {Leer del puerto. En el registro al est el dato ledo}

Por ejemplo, si el dato ledo es igual a 96, significa que los bits S5 y S6 estn activos(tienen un nivel alto, un 1).

0 S7

1 S6

1 S5

0 S4

0 S3

0 S2

0 S1

0 S0

= 96 En decimal Registro de estado

Enmascaramiento Tanto en el envo como recepcin de datos binarios, se realizan operaciones a nivel de bits. Estas operaciones permiten aislar uno ms bits. Este proceso se denomina enmascaramiento. Por ejemplo, para saber si determinado bit que se ha ledo del registro de estado est en un nivel alto (1 lgico) se puede hacer la operacin "Y" lgica (AND) de la lectura con un valor que resulta de elevar 2 a la posicin que ocupa ese bit en el byte, y luego realizar la comparacin. Si el bit que se desea conocer es el bit 5, entonces la operacin es: Masc:=2^5=32 (Byte_leido AND masc) En el caso que el bit 5 est en un nivel alto:

Byte_leido

0 S7

1 S6

1 S5

0 S4

0 S3

0 S2
AND

0 S1

0 S0

96 Posicin

Mscara = 32

Resulta

32= mscara

En el caso que el bit 5 no est en un nivel alto: Byte_leido

0 S7

1 S6

0 S5

1 S4

0 S3

0 S2
AND

0 S1

0 S0

80 Posicin

Mscara = 32

Resulta

0 <> mscara

Si el bit 5 es 1, entonces el resultado es 16, o igual a masc. Haciendo la comparacin: Si (Byte_leido AND masc) = masc entonces Inicio /* las acciones a realizar cuando el 4to bit es 1 */ Fin Si el bit 5 es 0, entonces el resultado siempre es 0, lo cual es diferente a masc.

En caso que se desee realizar el enmascaramiento de ms de un bit, se realiza la suma los valores. Ej. Mscara para el bit 5 y el 7 Masc= 2^5+2^7=160

3.5 Aplicaciones con lenguaje de programacin hbrida. 3.6 Aplicaciones con lenguaje de programacin hbrida.

Unidad 4. Perifricos no estandarizados.


4.3 A travs de puertos 4.3.1 Diseo 4.3.2 Programacin. 4.3.3 Aplicacin. 4.4 A travs de interfaz. 4.4.1 Diseo 4.4.2 Programacin. 4.4.3 Aplicacin.

Unidad 5. Interfaces.
http://www.sia.eui.upm.es/docent/iu.html

5.5 Conceptos bsicos. 5.6 Clasificacin. 5.7 Programacin de bajo nivel.

Programacin a bajo nivel del puerto serie


Sergio Costas Rodrigue raster@cibermillenium.com
Table of Contents 1. Prefacio

2. Introduccion 3. Perifericos 3.1. El modelo de Entrada/Salida de UNIX/Linux 3.2. La funcion IOCTL 4. El puerto serie 5. Cambiando los permisos de acceso 6. De que entradas y salidas dispongo? 7. Funciones IOCTL disponibles para el puerto serie 8. Referencias

Prefacio
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found in GNU Free Documentation License. Esta es una pequea guia en la que pretendo explicar como programar a muy bajo nivel el puerto serie. En concreto, pretendo explicar como leer y escribir en los bits de control del puerto serie (DCD, DTR, DSR, RTS, CTS y RI) mediante llamadas IOCTL.

Introduccion
Mucha gente necesita poder acceder a bajo nivel al puerto serie, para asi poder realizar diversas funciones basicas. Por ejemplo, si se quiere programar un emulador de terminal para el MODEM, adems de enviar y recibir bytes resulta necesario poder ajustar la velocidad del puerto y tener acceso a las seales de control, como RING, DCD, etc. Por desgracia, una tarea tan trivial puede convertirse en un autentico calvario, no por su dificultad, sino por la falta de documentacion. Si bien la libreria TERMIOS proporciona una gran cantidad de funciones que simplifican notablemente la programacion, no es capaz (o al menos yo no lo he conseguido) de proporcionar acceso a bajo nivel a las seales de control del puerto serie, en concreto DCD, DTR, DSR, RTS, CTS y RI. El acceso a estas resulta muy importante, si no crucial, cuando se pretende realizar diversas aplicaciones tales como programas de terminal, programadores de microcontroladores (por ejemplo para el PIC), y otros cientos de ideas. La primera solucion que se le ocurre al programador suele ser el acceso directo a los puertos de Entrada/Salida. Esto tiene dos inconvenientes: la necesidad de que el codigo corra con privilegios de superusuario, y el hecho de necesitar conocer con precision como esta implementado el dispositivo fisico. Este ultimo problema surge tambien si se decide hacer un driver especifico para la tarea, ademas de que los potenciales usuarios del programa necesitarian instalarlo tambien. Sin embargo, resulta perfectamente posible acceder a dichas seales en modo usuario sin peligro para la seguridad y estabilidad del sistema. La forma de hacerlo es precisamente lo que voy a intentar explicar aqui.

Para el resto de las funciones (como cambiar la velocidad de transmision del puerto, por ejemplo) resulta mucho mas comodo usar las funciones TERMIOS.

Perifericos
El modelo de Entrada/Salida de UNIX/Linux
UNIX supuso una revolucion por muchas razones. Sin embargo, una de las mas importantes fue, sin duda, su modelo de Entrada/Salida. En UNIX, los perifericos se encuentran representados como simples ficheros del sistema de archivos. De esta forma, si se quiere enviar datos a, por ejemplo, la pantalla, basta con abrir el fichero asociado a ella y escribir con las funciones de siempre. El resultado aparecera en el monitor. Lo mismo ocurre con los puertos serie, paralelo, etc. El hecho de que se acceda a todos los perifericos de igual forma simplifica notablemente la programacion en un sentido, pues el programador no necesita aprender cientos de funciones especificas para cada dispositivo, y a fin de cuentas, en el 99% de los casos no se pretende hacer filigranas con los perifericos, sino simplemente enviar algo y nada mas. Sin embargo que ocurre cuando s hace falta enviar opciones especificas a un dispositivo? Que hago para indicar, por ejemplo, la velocidad de transmisin de un puerto serie, o las coordenadas de impresion si se trata de un adaptador de video?

La funcion IOCTL
Todo driver soporta una serie de funciones basicas. En concreto ha de soportar: apertura, lectura, escritura y cierre. Estas funciones (junto a alguna que otra mas) son las que permiten acceder a los dispositivos como si de ficheros se tratara. Sin embargo, existe una quinta funcion que nos permite enviar comandos especificos para cada periferico. Es la funcion IOCTL (Input/Output ConTroL). Esta funcion recibe tres parametros y devuelve uno:
#include <sys/ioctl.h> int ioctl(int d, int request, void *arg);

El primer parametro (d) es un identificador de dispositivo. Puesto que se trata de una variable de tipo int y no de tipo FILE, el fichero del dispositivo ha de abrirse usando la funcion open() en lugar de fopen(). Por la misma razon, para leer o escribir en el ha de usarse read() y write() en vez de fread() o fwrite(), y para cerrarlo se usara close() en vez de fclose(). Como siempre, una mirada a las paginas del manual resolveran cualquier duda sobre estas cuatro funciones. El segundo parametro (request) especifica el comando que se ha de enviar al dispositivo. Estos comandos dependen del periferico con el que se este tratando. Asi pues, el comando 1 hara cosas distintas si lo enviamos a un puerto serie o a uno paralelo.

El tercer parametro (arg) es siempre un puntero al/los parametros que se le han de pasar al driver, o bien en donde ha de retornar este los resultados. Como tipo de puntero he puesto void simplemente porque dependiendo del comando que se envie habra que poner un puntero a int, a char, o incluso a una estructura. Por ultimo, ioctl() nos devuelve un valor que sera cero si la funcion se ha ejecutado con exito, o -1 si ha habido algun problema. En este caso, el tipo de error lo podremos ver en la variable global errno (para ello no hay que olvidarse de hacer un #include <errno.h> al principio del codigo).

El puerto serie
Los puertos serie tienen asociados una serie de ficheros en el directorio /dev. En versiones antiguas de Linux estos eran los ficheros /dev/cua seguidos de un numero que especificaba que puerto era cada uno. Asi pues, /dev/cua0 seria el COM1 de MS-DOS. En las versiones mas recientes del nucleo (versiones 2.x) los puertos serie tienen asociados los ficheros /dev/ttyS seguidos tambien de un numero. Asi pues, /dev/ttyS0 es el COM1 de MS-DOS. Por razones de compatibilidad con viejos programas, se siguen soportando los viejos ficheros cua, pero no se recomienda su uso en programas nuevos.

Cambiando los permisos de acceso


Para poder acceder a un periferico es preciso que su fichero asociado tenga permisos de acceso adecuados, igual que ocurre con el resto de los ficheros normales del disco duro. Puesto que el dueo de los ficheros de dispositivo es el usuario root, es necesario hacer el cambio entrando como el. Asi, para permitir que cualquiera pueda leer y escribir en cualquier puerto serie, se debe hacer (siempre como root): chmod 666 /dev/ttyS* Si se quiere permitir que cualquiera acceda al segundo puerto serie, se hara: chmod 666 /dev/ttyS1

De que entradas y salidas dispongo?


Un puerto serie dispone de los siguientes pines, cuyo numero en el conector es el siguiente:
Nombre Sentido Conector 25 pines Conector 9 pines

TXD RXD RTS CTS DTR DSR DCD RI GND

salida entrada salida entrada salida entrada entrada entrada masa

2 3 4 5 20 6 8 22 7

3 2 7 8 4 6 1 9 5

TXD y RXD son respectivamente la salida y la entrada de datos serie. Estos datos se envian en el siguiente formato: Por defecto, TXD se encuentra a -12 voltios (nivel alto). Cuando se quiere enviar un byte, la linea se pone a 12 voltios (nivel bajo) durante el tiempo de un bit. Es el bit de inicio, que marca el comienzo de una transmision. A continuacion se envian los bits del dato, empezando por el menos significativo. El cero (nivel bajo) se representa con 12 voltios, y el uno (nivel alto) se representa con -12 voltios. Por ultimo se envian uno o dos bits de parada a -12 voltios (nivel alto) antes de iniciar la transmision del siguiente. Vemos que los niveles de tension se encuentran invertidos con respecto a lo que cabria esperar (el 0 son 12 voltios y el 1 son -12 voltios). Esto solo ocurre en estas dos lineas. En el resto, el cero son -12 voltios y el uno son 12. Todas las lineas estan limitadas en corriente a unos 200mA. Esto protege al puerto en caso de que ocurra cualquier cortocircuito. Esta caracteristica tambien es aprovechada por muchos circuitos simples que se conectan al puerto serie, de modo que se consigue una notable economia de componentes. Debido a que las lineas TXD y RXD son controladas por el propio puerto serie y no por el procesador, en principio no resulta posible indicar directamente un valor de tension en TXD o leer el que se encuentre en RXD. Todo lo que podemos hacer es enviar un byte al puerto para que este lo envie por si mismo en el formato indicado. Sin embargo, en la practica, las UARTs disponen de un bit que, al activarlo, fuerzan un cero (+12 voltios) en dicho pin.

Funciones IOCTL disponibles para el puerto serie


Seis son las funciones ioctl que nos interesan para el control de las lineas del puerto serie: TIOCMGET, TIOCMBIS, TIOCMBIC, TIOCMSET, TIOCSBRK y TIOCCBRK. Para disponer de estas definiciones es necesario hacer:
#include <asm/ioctls.h>

La funcion TIOCMGET precisa que se le pase un puntero a int como argumento de la funcion ioctl(). Asi pues, hariamos:
retorno=ioctl(fichero,TIOCMGET,);

En 'argumento' nos almacenara un patron de bits indicando el estado de las distintas entradas y salidas del puerto serie.

La funcion TICMBIS tambien precisa de un puntero a int como argumento de la funcion ioctl(). Asi pues:
retorno=ioctlfichero,TIOCMBIS,);

activara aquellas salidas que le indiquemos, dejando inalteradas el resto. Por su parte, la funcion TICMBIC hace lo contrario: desactiva (pone a cero) las salidas que le indiquemos, sin modificar el resto. La usariamos asi:
retorno=ioctlfichero,TIOCMBIC,);

La funcion TIOCMSET activa las salidas que le indiquemos y desactiva el resto. Precisa tambien un puntero a int como argumento de la funcion ioctl(). Asi pues:
retorno=ioctl(fichero,TIOCMSET,);

activara las salidas que le indiquemos en funcion del patron de bits que contenga 'argumento'. El bit que corresponde a cada entrada y salida viene definido tambien en el fichero ioctltypes.h. Este fichero se incluye automaticamente con ioctl.h. En concreto, estan las definiciones:
TIOCM_DTR TIOCM_RTS TIOCM_CTS TIOCM_CAR TIOCM_CD TIOCM_RNG TIOCM_RI TIOCM_DSR DTR RTS CTS DCD DCD RI RI DSR 0x002 0x004 0x020 0x040 0x040 0x080 0x080 0x100

Por ultimo, las funciones TIOCSBRK y TIOCCBRK permiten poner a cero (+12 volts) o devolver al estado normal, respectivamente, el pin TXD. Como dicho estado de reposo es un uno, estas funciones nos permiten controlar a voluntad dicha salida.
retorno=ioctl(fichero,TIOCSBRK,); retorno=ioctl(fichero,TIOCCBRK,);

El puntero no es modificado, por lo que se puede dar cualquiera. Por supuesto, existen otras muchas funciones IOCTL para el puerto serie (man ioctllist), pero todo lo que se puede hacer con ellas tambien resulta factible hacerlo con la libreria TERMIOS.

Referencias
*Serial-HOWTO y Serial-Programming-HOWTO: explican como trabaja el puerto serie y como usar las TERMIOS.

*Coffee: mini-HOWTO en el que se explican las bases para acceso directo a puertos de Entrada/Salida. *IO-Port-Programming: HOWTO donde se explica de forma muy detallada la forma de acceder a puertos de Entrada/Salida. http://ultimaorbita.com/raciel/x-ezine/x2/2x007Serial_low_level_programming.html#AEN10

5.8 Aplicaciones.

LA MAYORIA DE LOS TEMAS VISTOS EN ESTA MATERIA SE ENCUENTRAN EN LA CARPETA DE LA MISMA EN MATERIAL .pdf, .ppt y .doc.

También podría gustarte

  • Buenasuertte
    Buenasuertte
    Documento26 páginas
    Buenasuertte
    wilfredok
    Aún no hay calificaciones
  • Interfaces ISC
    Interfaces ISC
    Documento26 páginas
    Interfaces ISC
    Carlos Alberto Peralta Julian
    Aún no hay calificaciones
  • FEPI
    FEPI
    Documento169 páginas
    FEPI
    Carlos Alberto Peralta Julian
    Aún no hay calificaciones
  • Pic16f84a Exam
    Pic16f84a Exam
    Documento13 páginas
    Pic16f84a Exam
    Carlos Alberto Peralta Julian
    Aún no hay calificaciones
  • Taller de Bases de Datos SCS-0433
    Taller de Bases de Datos SCS-0433
    Documento9 páginas
    Taller de Bases de Datos SCS-0433
    M.C. Oscar Flores Conde
    Aún no hay calificaciones