Sei sulla pagina 1di 44

Entradas salidas digitales PIC

Compartir: 0 0 0 0

Entradas salidas digitales PIC, los pines del microcontrolador PIC pueden
tener mltiples funciones, eso depender del microcontrolador PIC que
se utilice, en esta ocacin se ver el uso de estos pines como entradas
digitales o como salidas digitales, en los ejemplos que se hagan en esta
pgina y en los vdeos publicados en el canal de youtube de MrElberni,
se utilizarn diversos PIC, se recomienda siempre tener a mano la hoja
de datos del microcontrolador PIC que se utilice.

En esta ocasin 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 nmero 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 manipulacin 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 dems microcontroladores PIC, la hoja de
datos de este microcontrolador se puede ver y descargar desde aqu, la
programacin 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 sern 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 algn 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
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 programacin 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 continuacin, ups es
hexadecimal!

La forma binaria tiene la ventaja de que deja ver con que valores 0 o
1 se estn 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 funcin para programar


todo el registro TRISx que es la funcin set_tris_x(nmero) donde x
es el puerto y nmero est comprendido entre 0 y 255 ya que el registro
es de 8 bits, el nmero 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 estn programando los bits del registro, por
ejemplo para el puerto B se proceder como se puede ver en la siguiente
imagen.

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
estn basados en C/C++, las operaciones de bits se puede utilizar, es
muy importante dominar las operaciones de bits ya que facilita bastante
la programacin de los microcontroladores; lo que se comente en
adelante para la manipulacin 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 negacin y (1<<0) es un
nmero 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 nmero binario con lo que el bit0 se pone a 0 y todos sus


dems bits se ponen a 1, luego se realiza la operacin AND con el
registro TRISB, con lo que se logra que el bit0 del registro TRISB
mediante la operacin AND se ponga a 0, los dems bits del registro
TRISB mantendrn sus valores en la operacin AND, ya que los otros
bits del nmero binario se pusieron a 1 en la negacin, por ltimo el
resultado de la operacin se le asigna al registro TRISB, mediante esta
operacin 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 | sera
as:

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

y en el XC8 tambin 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 nmero 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 operacin OR entre el nmero 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 dems bits del
registro TRISB mantendrn sus valores en la operacin OR, ya que los
otros bits del nmero binario estn a 0, por ltimo el resultado de la
operacin se le asigna al registro TRISB, mediante esta operacin 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 | sera
as:

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

y en el XC8 tambin se puede hacer as

TRISBbits.TRISB1=1;

TRISBbits.TRISB4=1;

TRISBbits.TRISB7=1;
Entradas salidas digitales PIC Registro
PORTx.
Cuando algn pin o pines del microcontrolador PIC se han
configurado como salidas digitales mediante la programacin 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


cdigo se pondrn 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, tambin se puede hacer en decimal o


hexadecimal.

mediante la siguiente linea de cdigo se logra que por los pines impares
del puerto B se obtendrn ceros o bajos , mientras que por los pines
pares se obtendrn 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 tambin puede ser as

PORTBbits.RB3=1.

si se quiere que por los pines RB5 y RB2 salgan unos sera as:

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

en el XC8 tambin puede ser as

PORTBbits.RB2=1;

PORTBbits.RB5=1;

Cuando algn 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 guardarn 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 utilizacin 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

Como activar los valores de ADC 10 bits


en: 03 de Noviembre de 2010, 16:44:25
Hola, estoy tratando de asignarle a una variable int16 un valor de 10 bits
del ADC de un 16f876a
Pero me devuelve solo ocho bits.

mi codigo en el header (16f876a.h) es el siguiente:


#device PIC16F876A
#device ADC=10

Mi programa es el siguiente

#if defined(__PCM__) //.


#include <16F876A.h>
#include <stdlib.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT
#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7)

int16 temp;
int value;
float tempan1;
float voltsan0;
void main(void){

set_tris_b (0x00);
while (TRUE){
setup_adc (adc_clock_div_32);
setup_adc_ports (ALL_ANALOG);
set_adc_channel (0); //Elige canal a medir RA0
delay_us (20);
value=read_adc(); //Capturamos seal analgica que entra por el canal
previamente seleccionado (RA0)

set_adc_channel (1); //Elige canal a medir RA0


delay_us (20);
temp=read_adc(); //Capturamos seal analgica que entra por el canal
previamente seleccionado (RA0)

voltsan0 = 5.0 - (value * (5.0 / 256.0 ));


tempan1 = temp * (5.0*100.0/256.0);

printf("Valor volts, temp, hextempout:: %1.2f, %2.2f , %4X\n\r", voltsan0,


tempan1, temp);
output_high(PIN_B1); //(34)
delay_ms(500);
output_low(PIN_B1);
delay_ms(500);
}
}
gracias

Programacin en C para Electrnica. Microcontrolador PIC16F876. 1


Caractersticas C RISC. Reloj de hasta 20Mhz.(CM=1/4fosc) 35 instrucciones de 14 bit.
Instrucciones de 1 CM (excepto saltos) Power On Reset (POR) 8Kx14 bits en memoria flash.
368 bytes de RAM. 256 bytes de EEPROM. 22 E/S digital. 14
interrupciones. Programacin serie LVP. 2
Caractersticas 3
Perifricos. 3 temporizador /contador T0 = 8bits T1 y T2 = 16 bits 2 mdulos de
comparacin y captura / PWM. Puerto serie sncrono (SSP) con SPI y I2C. USART / SCI. 5
entradas A/D de 10 bits. Hasta 22 E/S digital. Comparador analgico. Perro guardian
(WDT) 4
Encapsulado. 5
Diagrama de bloques: 6
Caractersticas de los puertos Son bidireccionales. Acceso como byte o
bit. Lectura del valor del pin. Corriente mxima del pin 25mA. Corriente mxima del puerto
200mA. Despus de un reset todas son entradas. 7
Organizacin de la memoria 8
Programacin en C para Electrnica. Entrada/Salida digital. 9
Entrada salida digital El PIC 16F876A dispone de 22 lineas de E/S digital configurables
repartidas en 3 puertos. Puerto A = 6 lineas (RA0..RA5) Puerto B = 8 lineas (RB0..RB7)
Puerto C = 8 lineas (RC0..RC7) Los puertos son independientes y se puede programar cada
terminal para que se comporte como entrada o como salida. 10
Entrada salida digital La configuracin como entrada o salida se hace a travs
del registro TRISx correspondiente del banco 1 de la memoria. TRISA=85h (Puerto A)
TRISB=86h (Puerto B) TRISC=87h (Puerto C) Un valor 0 en los bits de
estos registros configuran el pin correspondiente del puerto como salida y un 1 como
entrada. 11
Entrada salida digital Para configurar los puertos se utiliza la funcin set_tris_X(valor) Se
puede leer la configuracin de los puertos con la funcin get_tris_X(valor) Ejemplos:
set_tris_A (0x3F) /* Puerto A como entradas.*/ set_tris_B (0x00) /* Puerto B como
salidas.*/ set_tris_C (0b00001111) /*Pines RB0..RB3 salidas y RB4..RB7 entradas*/ 12
Entrada salida digital La lectura o escritura de datos en los puertos se hace mediante la
lectura o escritura en el registro del banco 0 asociado a cada puerto. PORTA=05h (Puerto
A) PORTB=06h (Puerto B) PORTC=07h (Puerto C) La lectura y/o escritura se realiza
directamente sobre los pines del puerto. 13
Entrada salida digital CCS tiene funciones predefinidas para el uso de los puertos de E/S
digital. Las funciones pueden tratar el puerto completo o un bit del mismo. Los parmetros
de estas funciones estn definidos en un fichero include (p.ej:16F876A.h) con un formato
PIN_Xn donde X es el puerto y n el bit. 14
Funciones de Salida (bit) output_low(PIN_Xn) //pone a 0. output_high(PIN_Xn) //pone a
1. output_bit(PIN_Xn,valor) //pone el pin Xn a valor (0 1). output_toggle (PIN_Xn)
//complementa el valor del pin output_float (PIN_Xn) //Pin como entrada (simula d. ab.)
15
Funciones de Entrada (bit) input_state(PIN_Xn) //Lee el valor del pin sin cambiar //el
sentido del terminal. input(PIN_Xn) //Lee el valor del pin. 16
Funciones de E/S (bit) Ejemplos: output_low(PIN_A0); output_high(PIN_B1);
output_bit(PIN_B3,0); output_toggle (PIN_C6); output_float (PIN_A2);
valor=input_state (PIN_B7); valor=input(PIN_C3); 17
Funciones de E/S (byte) output_X(valor): X= puerto (A,B o C) Valor= byte a escribir en el
puerto. Escribe valor en X. Ejemplo: output_B(0xA5); //PORTB=10100101 input_X(): X=
puerto (A,B o C) Lee el valor del puerto X. Ejemplo: valor=input_B(); /*guarda en valor el
contenido del puerto B*/ 18
Entrada salida digital CCS provee directivas y funciones predefinidas para el uso de los
puertos de E/S digital. Las funciones output_X() e input_X() dependen de la directiva de
configuracin que usemos. Directivas: #use fast_io (puerto) #use standar_io (puerto) #use
fixed_io (puerto) 19
Directivas del preprocesador 20
Directivas de gestin de puertos #use fast_io (puerto) No modifica el registro TRIS en
lecturas y escrituras. Hay que asegurarse de que los pines est configurados correctamente.
#use standar_io (puerto) Modifica el registro TRIS correspondiente en lecturas y
escrituras. (Modo por defecto) #use fixed_io (puerto) Configura el puerto y no modifica el
registro TRIS en lecturas y escrituras. 21
Programacin en C para Electrnica. Ejemplos 22
Led intermitente 23
Led intermitente 24
Led intermitente (con funciones) 25
Pulsador 26
Pulsador (con funciones) 27
Cruce semforos 28
Cruce semforos 29

Comentarios

Leer ms: http://www.monografias.com/trabajos104/entrada-salida-digital-ccs/entrada-salida-digital-


ccs.shtml#ixzz4UvYi8pES
MEDIR
TEMPERATURA CON
ARDUINO Y SENSOR
LM35
SHARE ON:

15 JULIO, 2015

QUE ES UN SENSOR LM35?


El LM35 es un sensor de temperatura digital. A diferencia de otros dispositivos
como los termistores en los que la medicin de temperatura se obtiene de la
medicin de su resistencia elctrica, el LM35 es un integrado con su propio circuito
de control, que proporciona una salida de voltaje proporcional a la temperatura.
La salida del LM35 es lineal con la temperatura, incrementando el valor a
razn de 10mV por cada grado centgrado. El rango de medicin es de -55C (-
550mV) a 150C (1500 mV). Su precisin a temperatura ambiente es de 0,5C.

Los sensores LM35 son relativamente habituales en el mundo de los


aficionados a la electrnica por su bajo precio, y su sencillez de uso.

PRECIO
Los sensores LM35 son baratos. Podemos encontrar un sensor LM35 por
0,60 en vendedores internacionales en Ebay o AliExpress.

ESQUEMA ELCTRICO
El patillaje del LM35 se muestra en la siguiente imagen. Los pines extremos
son para alimentacin, mientras que el pin central proporciona la medicin en una
referencia de tensin, a razn de 10mV/C.
Por tanto, el esquema elctrico que necesitamos es el siguiente.
ESQUEMA MONTAJE
Mientras que el montaje en una protoboard sera el siguiente.
EJEMPLO DE CDIGO
El cdigo necesario para realizar la lectura es simple. Simplemente leemos el
valor del tensin mediante la entrada analgica, y traducimos el valor a grados
celsius usando la relacin 10 mV/C.

1 const int sensorPin= A0;

3 void setup()

4 {
5

7 Serial.begin(9600);

8 }

1 void loop()
0
{
1
1 int value = analogRead(sensorPin);

1 float millivolts = (value / 1023.0) * 5000;


2
float celsius = millivolts / 10;
1
Serial.print(celsius);
3
Serial.println(" C");
1
4 delay(1000);
1 }
5

1
6

Si te ha gustado est

Potrebbero piacerti anche