Entradas salidas digitales PIC


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

pic16f84a
Entradas salidas digitales PIC, los pines del microcontrolador PIC pueden tener múltiples funciones, eso dependerá del microcontrolador PIC que se utilice, en esta ocación se verá el uso de estos pines como entradas digitales o como salidas digitales, en los ejemplos que se hagan en esta página y en los vídeos publicados en el canal de youtube de MrElberni, se utilizarán diversos PIC, se recomienda siempre tener a mano la hoja de datos del microcontrolador PIC que se utilice.

En esta ocasión se verá el uso de los PIC16xx, cuyos pines normalmente vienen agrupados en grupos de 8 pines, a cada uno de estos grupos se les llama puertos, algunos puertos pueden tener menos de 8 pines. por ejemplo para el PIC16F84A  se tiene que el puerto B tiene 8 pines, mientras que el puerto A solo tiene 5 pines, la cantidad de puertos puede variar de un modelo de microcontrolador PIC a otro.

Cada uno de los pines a ser utilizados como entradas salidas digitales PIC tienen un nombre propio relacionado con el puerto al que pertenecen y al número de orden del bit con el cual  se programará, por ejemplo para el puerto B se tienen los pines RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7.

Para la manipulación de los pines del microcontrolador PIC como entradas salidas digitales PIC, el microcontrolador PIC cuenta con dos registros de 8 bits cada uno, estos registros son el TRISx, y el PORTx, las x depende del puerto a utilizar, en adelante se tomará como ejemplo el microcontrolador PIC16F84A, pero lo que aquí se comente en cuanto al uso de los pines como entradas salidas digitales PIC es muy similar para los demás microcontroladores PIC, la hoja de datos de este microcontrolador se puede ver y descargar desde aquí, la programación de los pines como entradas salidas digitales PIC se hará en C/C++.

Entradas salidas digitales PIC Registro TRISx 

Mediante el registro TRISx se eligen si los pines a utilizar del microcontrolador PIC serán salidas digitales o entradas digitales, la x representa el puerto al cual pertenezcan los pines a utilizar como entradas o salidas digitales, por ejemplo si es un pin del puerto A, entonces x será A, si es un pin de un puerto D de algún microcontrolador PIC, entonces x será D; para los microcontroladores PIC de 8 bits, el registro TRISx está conformado de 8 bits, cada uno de esos bits controlará a un pin del puerto al que pertenezca el registro TRISx para que el pin se comporte como una entrada digital o como una salida digital.

🙂 Para elegir que el pin se comporte como salida digital, se pondrá su bit correspondiente en el registro TRISx del puerto utilizado como 0.

.

🙂 Para elegir que el pin se comporte como entrada digital, se pondrá su bit correspondiente en el registro TRISx del puerto utilizado como 1.

La siguiente es la imagen del registro TRISB del microcontrolador PIC16F84A

Entradas salidas digitales PIC TRISB

Por ejemplo si el bit7 o bit TRISB7 se le pone a 0, el pin RB7 será una salida digital; si el bit3 o bit TRISB3 se pone a 1, el pin RB3 será una entrada digital, como se puede observar los bits se cuentan de 0 a 7 de derecha a izquierda, esto será siempre así para cualquier otro registro.

Este registro se puede programar para que todos los pines del puerto B sean salidas digitales o todos los pines sean entradas digitales o una mezcla de ambos, en C/C++ la programación del registro TRISB se puede hacer en binario, en decimal o hexadecimal, la forma de proceder dependerá del programa compilador que se esté utilizando.

En el caso de utilizar el compilador XC8 con el MPLABX, la forma de configurar todos los pines del puerto B, para usarlos como entradas salidas digitales PIC se hace como se muestra a continuación, ¡ups es hexadecimal!

entradas salidas digitales con el pic xc8

La forma binaria tiene la ventaja de que deja ver con que valores 0 o 1 se están programando  los bits del registro utilizado, el valor asignado al registro está comprendido entre 0 y 255 porque el registro es de 8 bits.

“Se ha comentado la forma de proceder en el XC8 para el caso del registro TRISB, pero en el XC8 se procede de la misma forma para cualquier otro registro del microcontrolador PIC que se quiera utilizar, que como se verá son muchos registros.”

Si se utiliza el compilador CCS, este tiene una función para programar todo el registro TRISx que es la función set_tris_x(número) donde x es el puerto y número está comprendido entre 0 y 255 ya que el registro es de 8 bits, el número dependerá de los pines utilizados como entradas salidas digitales PIC, la forma binaria tiene la ventaja de que deja ver con que valores 0 o 1 se  están  programando los bits del registro, por ejemplo para el puerto B se procederá como se puede ver en la siguiente imagen.

entradas-salidas-digitales-con-el-pic-ccs.

 😎 Muchas veces será necesario programar los bits de los registros bit por bit, no todos de una vez como se ha visto, esto en el lenguaje C/C++ se hace mediante operaciones con bits, y como el XC8 y el CCS están basados en C/C++, las operaciones de bits se puede utilizar, es muy importante dominar las operaciones de bits ya que facilita bastante la programación de los microcontroladores; lo que se comente en adelante para la manipulación de los bits registro TRISB será aplicable a cualquier otro registro del microcontrolador PIC.

Por ejemplo si se quiere utilizar solo el pin RB0 como salida digital, entonces el bit0 del registro TRISB se tiene que poner a 0, para lograr  esto se procede así:

TRISB &=~ (1<<0);//aquí se esta diciendo que el bit 0 del registro TRISB se ponga a 0

donde & es el operador de bits AND, ~ es la negación y (1<<0)  es un número binario de 8 bits donde el bit0 se ha puesto a 1, lo anterior es lo mismo que  hacer lo siguiente

TRISB=TRISB&~(0b00000001);

Se niega el número binario con lo que el bit0 se pone a 0 y todos sus demás bits se ponen a 1, luego se realiza la operación AND con el registro TRISB, con lo que se logra que el bit0 del registro TRISB mediante la operación AND se ponga a 0, los demás bits del registro TRISB mantendrán sus valores en la operación AND, ya que los otros bits del número binario se pusieron a 1 en la negación, por último el  resultado de la operación se le asigna al registro TRISB, mediante esta operación se logra que el bit0 del registro TRISB se ponga a 0 y así establecer que el pin RB0 será utilizado como una salida digital, en el XC8 esto mismo se puede programar  de la siguiente manera:

TRISBbits.TRISB0=0;

Por ejemplo si se necesita que el pin RB5 sea una salida digital, se puede proceder así

TRISB &= ~(1<<5);//viene del lenguaje C

TRISB=TRISB&~(0b00100000);//forma completa de la anterior

TRISBbits.TRISB5=0;//En el XC8

Si se quiere por ejemplo que los pines RB1, RB4 y RB7 sean salidas digitales, esto en una sola linea utilizando el operador de bits OR | sería así:

TRISB &=~ ((1<<1) | (1<<4) | (1<<7));

y en el XC8 también se puede hacer así

TRISBbits.TRISB1=0;

TRISBbits.TRISB4=0;

TRISBbits.TRISB7=0;

Por ejemplo si se quiere utilizar solo el pin RB0 como entrada digital, entonces el bit0 del registro TRISB se tiene que poner a 1, para lograr  esto se procede así:

TRISB |= (1<<0);//aquí se esta diciendo que el bit 0 del registro TRISB se ponga a 1

donde | es el operador de bits OR, y (1<<0)  es un número binario de 8 bits donde el bit0 se ha puesto a 1, lo anterior es lo mismo que  hacer lo siguiente

TRISB=TRISB|(0b00000001);

Se realiza la operación OR entre el número binario y registro TRISB, con lo que se logra que el bit0 del registro TRISB se ponga a 1 si antes estaba a 0 y si ya estaba a 1 se mantendrá a 1, los demás bits del registro TRISB mantendrán sus valores en la operación OR, ya que los otros bits del número binario están a 0, por último el resultado de la operación se le asigna al registro TRISB, mediante esta operación se logra que el bit0 del registro TRISB se ponga a 1 y así establecer que el pin RB0 será utilizado como una entrada digital, en el XC8 esto mismo se puede programar  de la siguiente manera:

TRISBbits.TRISB0=1;

Por ejemplo si se necesita que el pin RB5 sea una entrada digital, se puede proceder así

TRISB |=(1<<5);//viene del lenguaje C

TRISB=TRISB|(0b00100000);//forma completa de la anterior

TRISBbits.TRISB5=1;//En el XC8

Si se quiere por ejemplo que los pines RB1, RB4 y RB7 sean entradas digitales, esto en una sola linea utilizando el operador de bits OR | sería así:

TRISB |=((1<<1) | (1<<4) | (1<<7));

y en el XC8 también se puede hacer así

TRISBbits.TRISB1=1;

TRISBbits.TRISB4=1;

TRISBbits.TRISB7=1;

Entradas salidas digitales PIC Registro PORTx.

Cuando algún pin o pines del microcontrolador PIC se han configurado como salidas digitales mediante la programación de los bits del registro PORTx se indica si por la salida digital se tendrá un alto o un bajo que es lo mismo que un 1 o un 0.

Por ejemplo utilizando el compilador XC8  con la siguiente linea de código se pondrán todos los pines del puerto B como altos o a 1 o a 5V, si previamente mediante el registro TRISB se han configurado todos los pines del puerto B como salidas digitales.

PORTB=0b11111111; //en binario, también se puede hacer en decimal o hexadecimal.

mediante la siguiente linea de código se logra que por los pines impares del puerto B se obtendrán ceros o bajos , mientras que por los pines pares se obtendrán unos o altos.

PORTB=0b01010101;

si se quiere que solo por el pin RB3 salga un 1 será así

PORTB |= (1<<3);

en el XC8 también puede ser así

PORTBbits.RB3=1.

si se quiere que por los pines RB5 y RB2 salgan unos sería así:

PORTB |= ((1<<2)|(1<<5));

en el XC8 también puede ser así

PORTBbits.RB2=1;

PORTBbits.RB5=1;

Cuando algún pin o pines del microcontrolador PIC se han configurado como entradas digitales mediante los bits del registro PORTx se pueden leer los estados del los pines del puerto, esto es se puede leer si al pin del puerto x le está llegando una alto o un bajo, se puede leer bit por bit o todo el puerto a la vez, para esto será necesario crear variables donde se guardarán los estados leidos.

Por ejemplo si todos los pines del puerto B son utilizados como entradas digitales se puede proceder así

uint8_t estados;//variable entera sin signo de 8 bits

estados=PORTB;//en la variable de 8 bits se guarda los estados de los pines del PUERTO B

Entradas salidas digitales PIC ejemplos

Los siguientes ejemplos para la utilización de los pines del microcontrolador PIC como entradas salidas digitales PIC, será necesario para ver los  resultados de lo que se quiere hacer realizar pausas, normalmente los programas como el PBP, el CCS y el XC8 tienen funciones para controlar los tiempos.

Para el PBP son 

pause tiempo  ‘realiza pausas en milisegundos

pauseus tiempo  ‘realiza pausas en microsegundos

Para el CCS son

delay_ms(tiempo);//realiza pausas en milisegundos

delay_us(tiempo);//realiza pausas en microsegundos

Para el XC8 son

__delay_ms(tiempo);//realiza pausas en milisegundos

__delay_us(tiempo);//realiza pausas en microsegundos

Salidas digitales PIC

Ejemplo 1

En este primer ejemplo se hará parpadear un led que estará conectado a un pin del microcontrolador PIC, en un ejemplo básico en cuanto al uso de los pines del microcontrolador PIC como entradas salidas digitales PIC, se utilizará el PIC16F84A el que estará trabajando con un cristal de 4Mhz.

Para empezar se ha pensado conveniente realizar los ejemplos en vídeo, se ha realizado el mismo ejemplo desarrollado con el PBP, el CCS y el XC8 para que se pueda ver como crear los programas, elegir los bits de configuración, la programación de los registros TRISx y PORTx para la utilización de los pines como entradas salidas digitales PIC, desarrollar el programa y por último programar el microcontrolador PIC.

Se anima a que visualicen los siguientes vídeos ya que serán básicos para los proximos temas que se traten sobre los microcontroladores PIC

En el PBP En este primer vídeo se da a conocer como ayudarse de la hoja de datos del microcontrolador, como conectar el oscilador de cristal al PIC, el  como conectar el programador Pickit 3 al PIC, la alimentación del PIC, el pin RESET, la programación de los bits de configuración, la creación de variables, los tipos de datos en el PBP, el como hacer el programa en el PBP y como programar el PIC16F84A con el PICkit3.

El código de este primer ejemplo en PBP para la utilización de los pines como entradas salidas digitales PIC es el siguiente:

En el CCS En este segundo vídeo se da a conocer como ayudarse de la hoja de datos del microcontrolador, como conectar el oscilador de cristal al PIC, la alimentación del PIC, el pin RESET, la creación del  proyecto con el XC8 la programación de los bits de configuración con la ayuda del asistente del CCS, la creación de variables, los tipos de datos en el CCS, el como hacer el programa en el CCS y como programar el PIC16F84A con el PICkit3.

Los bits de configuración generados con el asistente en el CCS se realizan como se puede ver en la imagen

Entradas salidas digitales PIC ejemplo1 en CCS bits de configuración

El código de este primer ejemplo en CCS para la utilización de los pines como entradas salidas digitales PIC el que se encuentra dentro de la pestaña led.c es el siguiente:

En el XC8 En este tercer vídeo se ve la creación del proyecto con el XC8 para la utlización de los pines como entradas salidas analógicas PIC, la programación de los bits de configuración en el  XC8, la creación de variables, los tipos de datos en el XC8, el como hacer el programa en el XC8 y como programar el PIC16F84A con el PICkit3.

El código de este primer ejemplo en XC8 para la utilización de los pines como entradas salidas digitales PIC es el siguiente:

Ejemplo 2

En los siguientes vídeos se comenta como programar todo un puerto completo de los microcontroladores PIC para que todos los pines del puerto puedan ser utillizados como salidas digitales.

En el PBP

En este vídeo se muestra como crear un proyecto con el PBP, como preparar los bits de configuración, como configurar todo el registro TRISB para utilizar todos los pines de puerto B como salidas digitales, se programa el microcontrolador PIC con el pickit 3.

Uno de los código de este ejemplo en PBP para la utilización de todos los pines del puerto B como salidas digitales PIC es el siguiente:

En el CCS

En este vídeo se muestra como crear un proyecto con el CCS, como preparar los bits de configuración, como configurar todo el registro TRISB para utilizar todos los pines de puerto B como salidas digitales, se programa el microcontrolador PIC con el pickit 3.

Los bits de configuración generados con el asistente en el CCS se realizan como se puede ver en la imagen

Entradas salidas digitales PIC ejemplo1 en CCS bits de configuración

Uno de los código de este ejemplo en CCS para la utilización de todos los pines del puerto B como salidas digitales PIC es el siguiente:

En el XC8

En este vídeo se ve como preparar los bits de configuración en el XC8, como configurar todo el registro TRISB para utilizar todos los pines de puerto B como salidas digitales, se programa el microcontrolador PIC con el pickit 3.

El código de este ejemplo en XC8 para la utilización de todos los pines del puerto B como salidas digitales PIC es el siguiente:

Ejemplo 3

En el siguiente ejemplo se muestra como utilizar los pines del microcontrolador PIC como salidas digitales, pero en este caso se hace uso de las condicionales if else para el control de los efectos que se realizan en las salidas digitales, estos efectos serán vistos mediante leds.

En PBP

El como utilizar las condicionales if else en el PBP, asi como los efectos que se lograran mediante la utilización de las condicionales if else están comentados en el  vídeo.

El código utilizado en el vídeo sobre la utilización de las condicionales if else con el PBP es el siguiente:

En CCS

El como utilizar las condicionales if else en el CCS, asi como los efectos que se lograran mediante la utilización de las condicionales if else están comentados en el  vídeo.

Los bits de configuración generados con el asistente en el CCS se realizan como se puede ver en la imagen

Entradas salidas digitales PIC ejemplo1 en CCS bits de configuración

El código utilizado en el vídeo sobre la utilización de las condicionales if else con el CCS es el siguiente:

En XC8

El como utilizar las condicionales if else en el XC8, asi como los efectos que se lograran mediante la utilización de las condicionales if else están comentados en el  vídeo.

El código utilizado en el vídeo sobre la utilización de las condicionales if else con el XC8 es el siguiente:

Entradas digitales PIC

Ejemplo 1

En los siguiente  vídeos se ve como programar los pines del microcontrolador PIC como entradas digitales, al hacer el uso de los pines como entradas digitales normalmente se recurrirá a las condicionales if else para verificar el estado de los pines.

En PBP

En el siguiente ejemplo realizado con el PBP, mediante un pin utilizado como entrada digital se hará que el estado de otro pin utilizado como salida digital cambie, para lograr esto se utilizan las condicionales if else, los cambios de estado serán visibles a través de un led.

El código utilizado en el vídeo sobre la utilización de los pines del microcontrolador pic como entradas digitales en PBP es el siguiente:

En CCS

En el siguiente ejemplo realizado con el CCS, mediante un pin utilizado como entrada digital se hará que el estado de dos pines utilizados como salidas digitales cambien, para lograr esto se utilizan las condicionales if else, los cambios de estado serán visibles a través de leds.

Los bits de configuración generados con el asistente en el CCS se realizan como se puede ver en la imagen

Entradas salidas digitales PIC ejemplo1 en CCS bits de configuración

El código utilizado en el vídeo sobre la utilización de los pines del microcontrolador pic como entradas digitales en el CCS es el siguiente:

En XC8

En el siguiente ejemplo realizado con el XC8, normalmente 2 leds conectados  a dos pines utilizas como salidas digitales estarán alternando sus estados a cierta frecuencia, mediante un pin utilizado como entrada digital se hará que el estado de esos pines utilizados como salidas digitales alternen a una frecuencia mayor, para lograr esto se utilizan las condicionales if else.

El código utilizado en el vídeo sobre la utilización de los pines del microcontrolador pic como entradas digitales en el XC8 es el siguiente:

Si he logrado ayudarte en cuanto a la utilización de los pines del microcontroladora PIC como entradas salidas digitales PIC, comparte este enlace para poder ayudar a muchas personas mas.

Atte MrElberni.

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0