Computing">
Nothing Special   »   [go: up one dir, main page]

Entradas y Salidas Digitales

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 13

UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TÁCHIRA

VICERRECTORADO ACADÉMICO
DECANATO DE DOCENCIA
DEPARTAMENTO DE INGENIERIA ELECTRÓNICA

UNIDAD 2
Entradas y Salidas Digitales

Profesor:M. Sc. Ing. Rynaldo Salas Franco


Asignatura: Sistemas Digitales I
Contenido

Entradas y Salidas Digitales ............................................................................................... 3


Retardos .............................................................................................................................. 9
Anexo 1: Driver L293D.................................................................................................... 11
Entradas y Salidas Digitales

Los 35 pines de entrada y salida digitales del microcontrolador PIC18F4550 están


agrupados en 5 puertos: Puerto A (7 Líneas), Puerto B (8 Líneas), Puerto C (7_Líneas),
Puerto D (8 Líneas), Puerto E (4 Líneas). En la figura 13 puede observarse la ubicación
física de cada línea y puerto, para cada tipo de encapsulado. Observe que cada pin se
identifica como RX#, donde X es la letra que identifica al puerto y # el número del pin en el
puerto, que corresponde a que tan significativo es en el puerto dicho pin.

Figura 13: Puertos de Entrada y Salida del PIC18F4550 (Fuente: Hoja de Datos)

Existen tres directivas que permiten gestionar los puertos. En la tabla 4 se hace una
explicación de una de ellas. Por otro lado en la tabla 5 se explican las funciones
predefinidas que permiten ejercer control sobre estas líneas de entrada y salida digital.

Tabla 4: Directivas de Entradas y Salidas Digitales

Directivas Sintaxis y Descripción

#use standard_io(puertos) .
#use standard_io(puertos) .
)

#USE STANDARD_IO
Cada vez que se emplean las instrucciones de lectura y escritura, esta
directiva define como entradas o salidas a los puertos. El argumento
puertos se refiere a una lista de letras que identifican a cada puerto,
separadas por comas.

Tabla 5: Funciones de Entrada y Salida Digital

Función Descripción

Escribe el valor en el puerto X. Donde,


valor: es un número decimal de 4 a 8 bits (según
output_X(valor) el puerto, ver figura 13)
X: letra que identifica a cada puerto (A, B, C,
D ó E)

input_X() Lee el puerto X. Donde X corresponde a las letras A, B,


C, D ó E que identifican al puerto que se quiere leer.

Carga el registro TRISX con el valor. Este registro


set_tris_X(valor) permite configurar cada pin del puerto X, asignando a
cada uno de sus bits un 0 para salida y un 1 para entrada.
port_b_pullups(TRUE) Activa las resistencias pull-up del puerto B

port_b_pullups(FALSE) Desactiva las resistencias pull-up del puerto B

setup_adc_ports (NO_ANALOGS) Configura todos los pines como digitales

Retorna el estado (0 ó 1) del pin. El pin tendrá el


input(pin) siguiente formato: PIN_Xn, refiriéndose al pin n del
puerto X
output_bit (pin,1) Cualquiera de estas dos funciones, colocan el pin en
alto. El pin tendrá el siguiente formato: PIN_Xn,
output_high (pin)
refiriéndose al pin n del puerto X
Tabla 5 (Continuación): Funciones de Entrada y Salida Digital

Función Descripción

output_bit(pin,0) Cualquiera de estas dos funciones, colocan el pin en


bajo. El pin tendrá el siguiente formato: PIN_Xn,
output_low(pin)
refiriéndose al pin n del puerto X

Configura el pin como entrada de colector abierto. El


output_float(pin) pin tendrá el siguiente formato: PIN_Xn, refiriéndose al
pin n del puerto X

Ejemplo 1:
Escribir un programa para que un microcontrolador PIC active una cantidad de leds
conectados al puerto B, según el valor colocado en los 3 pines menos significativos del
puerto A. Es decir, si el valor leído es 101b=5d, se encenderán los 5 leds menos
significativos del puerto B.

#include <18F4550.h>
#use standard_io(A,B) //Directivas

int n; //Variable Global

void leer_y_mostrar() //Función de Usuario


{
n=input_A(); //lee el Puerto A, y lo almacena en “n”
switch (n)
{
case 0: output_B(0b00000000);
break;
case 1: output_B(0b00000001);
break;
case 2: output_B(0b00000011);
break;
case 3: output_B(0b00000111);
break;
case 4: output_B(0b00001111);
break;
case 5: output_B(0b00011111);
break;
case 6: output_B(0b00111111);
break;
case 7: output_B(0b01111111);
break;
case 8: output_B(0b11111111);
break;
}
}

void main() // Función Principal


{
setup_adc_ports(NO_ANALOGS); // todos los puertos digitales
while(1)
{
leer_y_mostrar(); // Lazo infinito llamando a la función
} // de usuario
return;
}

Un periférico interesante son los motores DC. Como se recordará estos motores
giran en un sentido si sus polos se alimentan de una forma y en el otro sentido si se invierte
la polaridad de la alimentación. Se podría pensar que se puede controlar directamente un
motor de 5V con un PIC y colocando un alto en uno de sus polos y un bajo en el otro, se
podría hacerlo girar en sentido horario o antihorario. Sin embargo, el PIC, no produce la
suficiente corriente por sus pines para arrancar un motor DC, por lo que es necesario
emplear un circuito de adaptación. El circuito de adaptación más empleado es el driver
L293. (Anexo 1)

Ejemplo 2: Escribir un programa para un microcontrolador PIC 18f4550, que permita


controlar dos motores DC, conectados como se muestran en el circuito (E2.DSN). Si el
interruptor 1 está abierto ambos motores permanecerán detenidos. Si se cierra el interruptor
1 girarán en el sentido que indiquen los interruptores 2 y 3. El motor 1 girará en sentido
horario si el interruptor 2 está abierto, en caso contrario, girará en sentido antihorario. El
motor 2 girará en sentido horario si el interruptor 3 está cerrado, en caso contrario girará en
sentido horario.

#include <18F4550.h>
#use standard_io(A,C)

void leer_y_activar()
{
if(input(PIN_A0)==1)
{
output_low(PIN_D0);
output_low(PIN_D3);
}
else
{
output_high(PIN_D0);
output_high(PIN_D3);
}

if(input(PIN_B0)==1)
{
output_high(PIN_C4);
output_low(PIN_C7);
}
else
{
output_high(PIN_C7);
output_low(PIN_C4);
}

if(input(PIN_B7)==1)
{
output_high(PIN_E0);
output_low(PIN_D6);
}
else
{
output_high(PIN_D6);
output_low(PIN_E0);
}
return;
}

void main()
{
setup_adc_ports(NO_ANALOGS);//todos los puertos digitales
while(1)
{
leer_y_activar();
}
return;
}
Retardos

Los microcontroladores tienen frecuencias de trabajo elevadas que no permiten


observar, por ejemplo, un led intermitente, si no se toma la precaución de interponer
retardos entre las instrucciones de encendido y apagado del mismo. También debemos
considerar que ciertos interruptores tienen efectos de rebote, que se pueden suprimir
también con retardos. Es por esto que se incluyen en la tabla 6, la directiva y las funciones
que permiten generar retardos.

Tabla 6: Directiva y Funciones de Retardos


Directiva:
Sintaxis Descripción
Indica al compilador la frecuencia del oscilador
externo y permite utilizar las funciones delay_us(:)
#use delay (clock=frecuencia) y delay_ms(:).
La frecuencia debe expresarse en Hertz y son
válidos desde 1 hasta 100000000
(100MHz)
#use delay (internal=8000000) Utiliza el oscilador interno de 8 MHz y permite
utilizar las funciones delay_us(:) y delay_ms(:).
Funciones:
Sintaxis Descripción
Produce un retardo de n milisegundos. Donde
delay_ms(n)
n es un entero de 16 bits ( 0  n  65535)

Produce un retardo de n microsegundos. Donde


delay_us(n)
n es un entero de 16 bits ( 0  n  65535)

Ejemplo 3:

Genere por el pin RC3 una señal onda cuadrada de 9 ms con tiempo en alto (TH) y tiempo
en bajo (TL) dependiendo del valor colocado en RA1 y RA0:

RA1 RA0 TH TL
0 0 1 ms 8 ms
0 1 2 ms 7 ms
1 0 3 ms 6 ms
1 1 4 ms 5 ms
#include <18F4550.h>
#use standard_io(A,C)
#use delay (clock=16000000) // Reloj de 16 MHz

void generar( int TH, int TL)


{
output_high(PIN_C4);
delay_ms(TH);
output_low(PIN_C4);
delay_ms(TL);
return;
}

void leer_y_generar()
{
if(input(PIN_A1)==0 && input(PIN_A0)==0) generar(1,8);
if(input(PIN_A1)==0 && input(PIN_A0)==1) generar(2,7);
if(input(PIN_A1)==1 && input(PIN_A0)==0) generar(3,6);
if(input(PIN_A1)==1 && input(PIN_A0)==1) generar(4,5);
return;
}
void main()
{
setup_adc_ports(NO_ANALOGS);
while(1)
{
leer_y_generar();
}
return;
}
Anexo 1: Driver L293D

Descripción

El L293D es un driver de 4 canales capaz de proporcionar una corriente de salida de


hasta 1A por canal. Cada canal es controlado por señales de entrada compatibles TTL y
cada pareja de canales dispone de una señal de habilitación que desconecta las salidas de
los mismos. Dispone de una línea para la alimentación de las cargas que se están
controlando, de forma que dicha alimentación es independiente de la lógica de control. La
tabla A.10 muestra el encapsulado de 16 pines, su distribución y la descripción de los
mismos.

Tabla A.10: Descripción de los Pines del L293D


Pin Nombre Descripción Encapsulado
1 EN1 Habilitación de los canales 1 y 2
2 IN1 Entrada del Canal 1
3 OUT1 Salida del canal 1
4 GND Tierra de alimentación
5 GND Tierra de alimentación
6 OUT2 Salida del Canal 2
7 IN2 Entrada del Canal 2
8 VS Alimentación de las cargas
9 EN2 Habilitación de los canales 3 y 4
10 IN3 Entrada del Canal 3
11 OUT3 Salida del Canal 3
12 GND Tierra de alimentación
13 GND Tierra de alimentación
14 OUT4 Salida del Canal 4
15 OUT4 Entrada del Canal 4
16 VSS Alimentación de la lógica
Fuente: Hoja de Datos del L293D

En la Figura A.3, se muestra el diagrama de bloques del L293B, se observan los


cuatro canales, así como, sus líneas de entrada, salida y habilitación. En las Tablas A.11 y
A.12 se puede apreciar, respectivamente, la tabla de verdad de cada canal, así como sus
características eléctricas.
Figura A.3: Diagrama de Bloques del L293B
(Fuente: Hoja de Datos del L293B)

Tabla A.11: Tabla de Verdad para cada canal del L293B

EN IN OUT
H H H
H L L
L H Z
L L Z
Fuente: Hoja de Datos del L293B

Tabla A.12: Características Eléctricas


(Para cada canal, Vs = 24V, Vss = 5V, Temperatura=25ºC)
Condiciones de
Símbolo Parámetro Mínima Típica Máxima Unidades
Prueba
Tensión de
VSS alimentación 36 V
de las cargas
Fuente: Hoja de Datos del L293B
Tabla A.12: Características Eléctricas (Continuación)
(Para cada canal, Vs = 24V, Vss = 5V, Temperatura=25ºC)
Condiciones de
Símbolo Parámetro Mínima Típica Máxima Unidades
Prueba
Tensión de
VS alimentación 4.5 36 V
lógica
Vi=L_Io=0_Ven=H 2 6 mA
Corriente total
IS Vi=H_Io=0_Ven=H 16 24 mA
de reposo
Vi=H_Io=0_Ven=L 4 mA
Corriente total Vi=L_Io=0_Ven=H 44 60 mA
ISS de reposo con Vi=H_Io=0_Ven=H 16 22 mA
señal de control Vi=L_Io=0_Ven=L 16 24 mA
Tensión de
VIL entrada a nivel -0.3 1.5 V
bajo
Tensión de VSS  7V 2.3 VSS V
VIH entrada a
nivel alto VSS > 7V 2.3 7 V
Corriente de
IIL entrada a VIL =1.5V -10 A
nivel bajo
Corriente de
IIH entrada a 2.3V  VIH  VSS – 0.6 30 100 A
nivel alto
Tensión de
VEN L habilitación a -0.3 1.5 V
nivel bajo
Tensión de VSS  7V 2.3 VSS V
VEN H habilitación a
nivel alto VSS > 7V 2.3 7 V
Corriente de
IEN L habilitación a VEN L = 1.5V -30 -100 A
nivel bajo
Corriente de
IEN H habilitación a 2.3V  VIH  VSS – 0.6  10 A
nivel alto
Tensión de
VCE(sat)H salida saturada IO = 1 A 1.4 1.8 V
modo fuente
Tensión de
VCE(sat)L salida saturada IO = 1 A 1.2 1.8 V
modo sumidero
Fuente: Hoja de Datos del L293D

También podría gustarte