Actividad 4:
Control de sensores mediante el p. paralelo:
entradas analógicas

 

 

Interfaz de control de entradas analógicas

En la Actividad 2 se han presentado algunas formas de controlar entradas digitales mediante el puerto paralelo. Se describe ahora una solución cuando lo que interesa es la detección de señales analógicas y, por tanto, el control de entradas de tipo analógico.

Para ello se propone el esquema eléctrico de un conversor analógico-digital básico como el de la siguiente figura:


 

Esquema del interfaz de control de entradas analógicas mediante p. paralelo

Dicho circuito se alimenta a +5v y convierte señales analógicas en el intervalo entre 0 y 5v. Como núcleo se utiliza el circuito integrado ADC0804 de National Semiconductor (hojas de datos del ADC0804), un conversor A/D de 8 bit, barato y habitualmente disponible. Por defecto, el intervalo de entrada está entre 0 y +5V pero, usando una referencia externa y/o elevando la señal Vin- respecto a GND, se puede conseguir un amplio intervalo de niveles de entrada. Trabaja con una frecuencia máxima de 8 kHz, de modo que se puede utilizar incluso con señales de audio de baja calidad.

A efectos de prueba, la señal analógica a convertir proviene del potenciómetro R2; variando éste se modifica la señal entre 0 y 5 voltios. Dicha señal se introduce en el conversor ADC0804. Una vez convertida, el valor digital es presentado en las líneas D0 a D7 y deberá ser leído a través del puerto paralelo según el protocolo explicado a continuación.

Para el correcto funcionamiento de la conversión se debe respetar un protocolo entre el PC y el conversor, explicado en detalle en las hojas de datos del conversor. Básicamente es el siguiente:

Diagrama de tiempos para el inicio de la conversión

  

Diagrama de tiempos para la lectura del dato

Los ciclos anteriores se repetirán tantas veces como datos se quieran capturar.

Con objeto de simplificar la circuitería y, puesto que se cuenta con un solo ADC, se puede mantener permanentemente la señal CS a nivel bajo conectándola directamente a tierra (ver arriba en el esquema del interfaz).

Volver al principio de página

 

Programa de control de entradas analógicas

He aquí un ejemplo en TurboC de cómo implementar el código que lleva a cabo la lectura de entradas analógicas mediante el p. paralelo. Hace uso de bloques de código utilizados en actividades anteriores.

/****************************************************************/
/*								*/
/*	Programa de lectura analógica mediante p. paralelo	*/
/*	2002 Víctor R. González					*/
/*								*/
/****************************************************************/

#include <stdio.h>
#include <dos.h>
#include <time.h>
#include "paralel.h"	/* Definiciones para control mediante p. paralelo */

int ParaleloIni (void);		/* Detecta el puerto paralelo */
void pausa (unsigned long);	/* Retardo de precisión */

#define ADC_TMAX 0.1	/* Espera máxima (en s) de la respuesta del ADC */

void main(void)
{
	unsigned int muestra, Byte, tmp;
	clock_t clock_ini;
	float crono;

	/* Comprueba en la BIOS puerto con capacidad bidireccional */
	if (ParaleloIni()>1){

	/* Pone C5 (bit 5 de CONTROL) a 1 (modo entrada) */
	Byte = inportb (CONTROL);
	outportb (CONTROL, Byte | 0x20 );
	tmp = Byte;

	/* Realiza 1000 lecturas */
	for (muestra=0; muestra<1000; muestra++) {
		/* Fija comienzo de conversión con un pulso de #WR */
		/*
			Pone   #WR (pin  3) bajo: C2=0 (#INIT, pin 16 LPT)
			Espera al menos 100 ns
			Pone   #WR (pin  3) alto: C2=1 (#INIT, pin 16 LPT)
		*/
		outportb (CONTROL, 0x20 );
		pausa (1);
		outportb (CONTROL, 0x24 );

		/* Espera #INTR (pin 15) alto : S3==1 (#ERROR, pin 15 LPT) */
		clock_ini = clock();
		crono = 0;
		while (((inportb (ESTADO) & 0x08))==0 && crono < ADC_TMAX)
			crono=(clock()-clock_ini)/CLK_TCK;

		if (crono < ADC_TMAX) {
			/* Lectura del dato */
			/*
				Pone   #RD (pin  2) bajo : #C0=1 (#STROBE, pin 1 LPT)
				Espera al menos 200 ns
				Lee el puerto de datos
			*/
			outportb (CONTROL, 0x25 );
			pausa (1);
			Byte = inportb(DATOS);
			outportb( CONTROL, 0x24 );

			printf("Lectura: %X\n", Byte);
		}
		else
			printf("No se recibe señal de final de conversión\n");
	}

	/* Restaura C5 a su valor original */
	outportb (CONTROL, tmp );

	}
}

Volver al principio de página

 

Actividades

NOTA: Para el correcto funcionamiento de la actividad, el puerto de datos del p. paralelo deberá estar configurado en modo bidireccional. Ello requiere que se halle seleccionado este modo en la configuración del BIOS y que el bit de puerto bidireccional, C5, se halle a 1. En la presente actividad este bit se puede fijar inicialmente a uno. Hay que tener cierta precaución, pues la escritura en el puerto de datos modifica este bit a cero.

Lista de componentes:

R1: resistencia de 10K 1/4 W
R2: potenciómetro de 10Kl
C1: condensador de 150 pF
Conversor A/D modelo ADC0804
Zócalo para el integrado anterior
Conector DB25 macho
Cable plano de 12 hilos, mínimo

Volver al principio de página

volver a Inicio