miércoles, 29 de mayo de 2019

Práctica 2, los puertos de entrada/salida


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:
LATASET = 0x0010; // 0000 0000 0001 0000
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