Práctica
2, los puertos de entrada/salida
En
esta familia de microcontroladores los puertos de e/s, se pueden
configurar como e/s digital, analógica o de colector abierto.
2.1
Entrada y salida digitales
El objetivo de esta práctica es que el
estudiante experimente con los puertos de E/S digitales. En esta
práctica se prende y apaga un ”led” usando un “push-button”
Equipo
-
Computadora personal
-
Fuente de poder de laboratorio
-
Programador ICD3 o similar
Material
Cantidad Descripción
1 PIC32MX220F032B
1 Resistencia
de 10kΩ
2 Resistencia
de un kΩ
2 Diodo
Emisor de luz (Led)
1 Tablilla
para prototipo (Protoboard)
1 Push-button
Armar
el sistema de acuerdo a la figura 1.1. y agregar los componentes que
se pueden ver en la figura 2.1:
Estos microcontroladores disponen de
puertos paralelos de E/S digitales de 16 bits, se designan con letras
del alfabeto, A, B, C, etc. Solo un subconjunto de sus bits están
asociados a patitas físicas del microcontrolador, esta cantidad está
en función de las patitas disponibles. Por ejemplo en el
PIC32MX220F032B el puerto A tiene solo 5 bits conectados a patitas
física. Cada bit se identifica como RXn, donde X es el puerto y la
n es el número que corresponde a ese bit. Entonces el puerto A tiene
los bits RA0, RA1, RA2, RA3 y RA4 conectados a patitas físicas, el
resto de RA6 a RA15 no están conectados a patitas. Estos puertos
disponen de hasta 10 registros asociados, en el caso del
PIC32MX220F032B solo dispone de 5 registros. Ver figura 2.2.
Poseen un registro de configuración,
el TRISx, donde la x corresponde al nombre del puerto, por ejemplo en
el caso del puerto B sería TRISB y para el puerto A sería TRISA.
En el registro TRISx se configura cada
bit del puerto para que la patita asociada funcione como Entrada o
como Salida.
1 = Input (Entrada)
0 = Output (Salida)
Observar la semejanza entre “1” y
la I de “Input”, y el “0” con la O de “Output”, puede ser
una manera de recordarlo.
Por ejemplo para configurar el bit RA4
como entrada y el resto como salida se puede hacer de estas maneras:
TRISA = 0x0010; //Formato
hexadecimal
TRISA = 0b0000000000010000;
//Formato binario
O solo modificarse el bit de interés
con:
TRISAbits.TRISA4 = 1;
Para entrada y salida los puertos
disponen de los registros PORTx y LATx, en PORTx se puede leer la
entrada y en LATx se puede escribir la salida. Es muy recomendable
solo usar LATx para escribir la salida y solo usar PORTx
para leer la entrada para evitar el problema del “Read Modify
Write”.
Se pueden leer y escribir los puertos
completos, Por ejemplo;
x =
PORTA;
LATB = x;
O a nivel de bit:
x = PORTAbits.RA4;
LATBbits.LATB7 = x;
Figura 2.1
Descripción
del programa:
Si
se presiona el “push-button”, se prende el led, si se libera, se
apaga el led.
Es importante observar que si el
“push-button no está presionado”, RB8 recibe +V, esto es, recibe
un uno lógico, si se le presiona, entonces +V se va a tierra a
través de la resistencia de 1k y RB8 recibe un cero lógico.
El
programa:
#include
<p32xxxx.h>
#pragma
config ICESEL = ICS_PGx2 //PGEC = patita 22
//PGED
= patita 21
#pragma
config JTAGEN = OFF //Deshabilita JTAG
#pragma
config FSOSCEN = OFF //Deshabilita oscilador secundario
#pragma
config FWDTEN = OFF //Deshabilita watchdog timer
#pragma
config FNOSC = FRC //Oscilador interno (8 MHz) sin PLL
#pragma
config FPBDIV = DIV_1 //Divide entre 1 el reloj a los
//perif'ericos
main(){
TRISBbits.TRISB8
= 1; //Input
TRISBbits.TRISB7
= 0; //Output
while(1){
if(PORTBbits.RB8==0)
LATBbits.LATB7=1;
else
LATBbits.LATB7=0;
}
}
En los “push-button”, los
contactos tardan un cierto tiempo para estabilizarse cuando hacen
contacto, en ciertas aplicaciones es necesario considerar esta
cuestión. Para ello existen varias soluciones por hardware y otras
por software.
2.2 Entrada/Salida analógica
Se dedica una práctica al final de
este manual para tratar al convertidor analógico digital (ADC), aquí
solo se mencionará que después de un “reset” los bits de
configuración del registro ANSELx están puestos a uno, lo que
significa que las patitas asociadas al ADC se encuentran en modo
analógico. Es decir, después de un “reset” la e/s analógica se
encuentra activada(ver figura 2.2), por lo tanto si se van a usar
estas patitas para e/s digital es necesario poner a ceros los bits
correspondientes en ANSELx. Por ejemplo si se van a usar todas las
patitas asociadas al puerto B como entradas y salidas digitales:
ANSELB = 0x0000;
Figura 2.2 Registros del puerto A y
puerto B después de un “reset”. Observar que los bits asociados
a la e/s analógica están puestos a uno(color
azul). También los bits del registro TRISx poseen
unos.
Observar que los bits 7 y 8 del puerto
B no posee e/s analógica, por lo tanto no es necesario configurarlos
como e/s digital.
2.3 Salida en colector abierto
Algunos puertos se pueden configurar
como salida en colector abierto (open-drain output), el registro para
su configuración es ODCx, como se puede ver en la figura 2.2,
después de in “reset”, este registro contiene ceros en todos
sus bits. Para configurarse como salida de colector abierto se ponen
a uno los bits correspondientes. Un “reset” se lleva a cabo cada
vez que el microcontrolador es energizado.
2.4 Operaciones atómicas
Para garantizar que cuando se modifica
un registro, la operación se complete, es decir que la modificación
no sea abandonada sin haberse finalizado correctamente por el CPU,
por ejemplo cuando se ve obligado a atender alguna interrupción, se
dispone de CLR, SET e INV, estas operaciones se realizan a nivel de
bit, son muy rápidas. Están disponible para los registros de todos
los periféricos.
Por ejemplo:
es equivalente a:
LATAbits.LATA4 = 1;
Pero la instrucción LATAbits.LATA4
no se realiza de forma atómica.
Fin de la práctica 2.
PROYECTOS:
Después de haber realizado esta
práctica, el estudiante está preparado para realizar algunos
proyectos con el objetivo de reforzar los conocimientos adquiridos.
Se recomiendan los siguientes:
-
Proyecto 2.1: Con un dip-switch dar un número binario de 4 bits y mostrarlo en decimal en un display de 7 segmentos.
-
Proyecto 2.2: Decodificar un teclado matricial de 4*4 y mostrar el número en un display de 7 segmentos.
-
Proyecto 2.3: Usando el proyecto 1.3, decodificar un teclado matricial que permita al usuario escribir una clave, si es correcta encienda un led verde y si es incorrecta, encienda un led rojo.
Bibliografía:
Capítulo
11 del manual de referencia del pic32 (DS60001168K)



No hay comentarios.:
Publicar un comentario