Está en la página 1de 29

4- Puertos de Entrada-Salida

Ing. Juan Ramon Terven Salinas 36


4 PUERTOS DE ENTRADA-SALIDA

Los pines de E/S del PIC32 permiten monitorear y controlar otros dispositivos. La
mayora de los pines del FPGA estn multiplexados con otras funciones de perifricos
internos del PIC.
Por ejemplo el pin 6 del PIC32MX534F064H que se muestra en la Figura 4-1 es el
bit 8 del puerto G (RG8), pero ese mismo pin est multiplexado con la seal SCL de un
mdulo I
2
C (SCL4), tambin est multiplexado con la seal SDO de un mdulo SPI
(SDO2), y con otras seales ms de mdulos internos (U3TX, PMA3, CN10).
Es responsabilidad del programador usar el pin de puerto o usar una seal de
mdulo interno sin que se interfieran.
Al reset todos los mdulos internos estn desactivados y los pines del PIC32MX
funcionan solo como seales de puertos de Entrada/Salida.
Cuando algn mdulo interno se habilita y usa un pin de un puerto, el uso del pin
del puerto queda deshabilitado.

Figura 4-1. Algunos pines del PIC32MX534F064H


4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 37
Registros de Control
Antes de realizar una operacin de lectura o escritura de algun puerto, los pines a
utilizar deben ser configurados apropiadamente.
Cada puerto tiene 4 registros asociados: TRIS, PORT, LAT y ODC; cada pin
de puerto tiene un bit correspondiente en cada uno de estos registros.
Los PIC32MX tienen los puertos llamados Puerto A, Puerto B, Puerto C, Puerto D,
Puerto E, Puerto F y Puerto G. Cada uno de estos puertos tiene los registros antes
mencionados. Por ejemplo para el Puerto A, los registros se llaman TRISA, PORTA,
LATA y ODCA.
En la siguiente explicacin nos referiremos a TRISx, PORTx, LATx y ODCx,
donde x representa el puerto (A, B, C, D o E).

Registro TRISx
El registro TRISx se usa para configurar el sentido de datos del puerto, puede ser
Entrada (con 1) o Salida (con 0). Una manera recomendable de recordar esto es 1
de Input y 0 de Output.

Registro PORTx
Por medio del registro PORTx se accede a los datos de los pines. Cuando se escribe
en PORTx, se escribe en el latch del puerto. Cuando se lee el PORTx, se lee el valor
directamente del pin.

Registro LATx
Este registro est directamente conectado con el latch del puerto. Cuando se escribe
en el LATx se escribe en el latch del puerto y cuando se lee el LATx se lee del latch del
puerto.

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 38
Registro ODCx
Cada pin de puerto puede ser individualmente configurado para salida digital
normal o salida de drenaje-abierto. Esta configuracin se realiza por medio del registro
ODCx. Si el bit del ODC para un pin est en 1, entonces el pin acta como salida de
drenaje abierto. Si el bit del ODC est en 0 la salida digital es normal. Este uso slo es
valido cuando el bit del puerto es salida.

La salida de tipo drenaje-abierto permite enviar voltajes mayores a VDD usando
una resistencia de pull-up externa. Tenga en cuenta que el voltaje mximo que se le
puede conectar por medio de la resistencia de Pull-up es de 5.5V.
La Figura 4-2 explica la diferencia de la salida digital normal y la salida de drenaje
abierto.


Figura 4-2. Salida Drenaje-abierto

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 39
La Figura 4-3 muestra un diagrama a bloques de un puerto tpico multiplexado.

Figura 4-3. Diagrama a bloques de un puerto tpico multiplexado

El Problema de la escritura
Cuando se enva un dato de salida por un puerto, los PIC32 usan una secuencia
conocida como Read-Modify-Write (RMW). Esto puede causar comportamientos
inesperados bajo ciertas circunstancias.
Cuando un programa cambia el estado de un pin, por ejemplo RB0 del PORTB, el
microcontrolador realiza la siguiente secuencia:
1. LEE todos los bits del PORTB (lee los pines fsicos).
2. Almacena este dato ledo en un registro interno.
3. Modifica el bit deseado (RB0).
4. Escribe todos los bits de vuelta al registro PORTB.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 40
El problema de esto ocurre cuando el pin que se desea modificar (RB0) tiene una carga
que afecta el estado lgico. Por ejemplo un LED sin resistencia limitadora de corriente o
una carga con alta capacitancia o inductancia.
Por ejemplo si el programa es el siguiente:
_RB0 = 1;
_RB1 = 1;

Asumiendo que el puerto est inicialmente en 0 y que todos los pines son salidas.
Supongamos que conectamos un capacitor descargado en el pin RB0.

La primera lnea _RB0=1 realiza lo siguiente:

Figura 4-4. Secuencia RMW en _RB0 = 1


La siguiente lnea _RB1 = 1 realiza lo siguiente:
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 41

Figura 4-5. Secuencia RMW para _RB1=1

Como resultado tenemos 00000010 en el puerto en lugar de 00000011.

Existen 2 soluciones a este problema:
SOLUCION 1: MODIFICAR TODO EL PUERTO
En lugar de modificar un solo bit, modificar todo el puerto.
Por ejemplo en lugar de escribir
_RB0 = 1;
_RB1 = 1;

Escribimos
PORTB = 0x3;

Sin embargo esta operacin modifica todo el PORTB y tal vez los otros pines no se
desean cambiar.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 42
SOLUCIN 2: USAR LATx EN LUGAR DE PORTx
Si modificamos el bit 0 usando LATB en lugar de PORTB, se realiza la misma
secuencia (RMW) pero la lectura no la realiza de los pines fsicos sino del registro
LATB.
Entonces en lugar de escribir
_RB0 = 1;
_RB1 = 1;

Escribimos
_LATB0 = 1;
_LATB1 = 1;
Y el problema queda resuelto. Con esto llegamos a la siguiente regla:
Regla del uso de puertos:
Cuando usemos un puerto x como entrada usamos PORTx y cuando usamos el
puerto como salida usamos LATx.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 43
Ejemplo 1. Uso de Puertos de Entrada/Salida
El siguiente ejemplo muestra el uso de los pines de entrada/salida para leer el estado
de interruptores (DSW1) y cambiar el estado de los LEDs. La Figura 4-6 muestra el
diagrama utilizado para este ejemplo. Para este circuito podemos usar solamente la
alimentacin que nos proporciona el USB a travs del cable y nos ahorramos usar una
fuente externa como muestra la figura.


Figura 4-6. Diagrama Electrnico para Ejemplo 1

Este programa realiza 3 rutinas en las salidas (RE0-RE7) en funcin del estado de las
entradas (RB0, RB1, RB4, RB5). Las rutinas son las siguientes:
Si la entrada RB0 tiene un 1 parpadea los LEDs.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 44
Si la entrada RB1 tiene un 1 muestra un contador ascendente en los LEDs.
Si la entrada RB4 y RB5 tienen 11 muestra un contador descendente en los LEDs.
El cdigo de este ejemplo se muestra en el Programa 4-1.

Programa 4-1. Uso de pines E/S
#include <p32xxxx.h>
#include "../librerias/retardos/retardos.h"

//Bits de configuracion
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20
#pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON
#pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON
#pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD

int main(void)
{
unsigned char contador;

AD1PCFG = 0xFFFF; // configura AN pins como digitales
TRISB = 0x0033; //bits 0, 1, 4 y 5 como entradas
TRISE=0; // puerto E como salida

contador = 0;
while(1)
{
//Si RB0=1 parpadea LEDs
if(_RB0)
{
LATE = 0;
retardoms(100); // retardo de aproximadamente 100ms
LATE = 0xFF;
retardoms(100);
}
//de lo contrario si RB1=1
else if(_RB1)
{
LATE = contador;
contador++;
retardoms(100);
}
//de lo contrario si RB4 y RB5 = "11"
else if(_RB4 && _RB5)
{
LATE = contador;
contador--;
retardoms(100);
}
}
return 0;
}

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 45
PRCTICA 1. Uso de Puertos de Entrada/Salida
a) Arme el circuito del ejemplo anterior mostrado en la Figura 4-6, grabe y
compruebe el funcionamiento del Ejemplo.
b) Crear un nuevo proyecto el cual realizar las 4 rutinas que se describen a
continuacin, considerando las entradas en este orden RB5,RB4,RB1,RB0:
1. Si las entradas son 0001 realiza una rutina de rotacin a la derecha de 1
slo bit en los 8 bits de salida.
2. Si las entradas son 0010 realiza una rutina de rotacin a la izquierda de
1 slo bit en los 8 bits de salida.
3. Si las entradas son 0100 realiza una rutina de ojo de kit en los 8 bits
de salida.
4. Si las entradas son 1000 realiza un contador binario de 2 en 2,
iniciando en 0, en los 8 bits de salida.
5. Si las entradas son cualquier otra combinacin, muestra los LEDs
apagados.
Toda rutina es independiente de las dems y debe continuar en el estado que se qued,
por ejemplo si el contador se queda en 12 cuando el usuario cambia de rutina, si se
regresa de nuevo a la rutina contador, debe seguir contando a partir de 12.



4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 46
Interfaces Digitales de Distintos Voltajes
Los PIC32MX se pueden alimentar en un rango de 2.3V a 3.6V. Un voltaje comn
de alimentacin es 3.3V. Por lo tanto, si VDD es 3.3V, los pines son capaces de enviar
3.3V de salida y son capaces de recibir hasta 3.3V de entrada.
Cuando se conectan 2 dispositivos que operan a distintos voltajes, es necesario
conocer los valores de umbral de entrada y salida de cada uno. Una vez que se conocen
estos valores se puede seleccionar una tcnica para realizar la conexin.
La Figura 4-7 muestra los niveles de umbral de salida (V
OH
, V
OL
) y de entrada (V
IH
,
V
IL
) que se deben de cumplir cuando hacemos una conexin de 2 dispositivos digitales.

Figura 4-7. Niveles lgicos y mrgenes de ruido [16]
Conexin de 3.3V a 5V
Existen varias formas de realizar una conexin de 3.3V de salida digital a 5V de entrada
digital.
1. Forma Directa
Cuando queremos conectar una salida digital del PIC32 de 3.3V a una entrada digital de
5V, podemos realizar la conexin directa siempre y cuando se cumplan los siguientes
requerimientos:
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 47
El V
OH
de la salida de 3.3V es mayor que el V
IH
de la entrada de 5V.
El V
OL
de la salida de 3.3V es menor que el V
IL
de la entrada de 5V.
La Tabla 4-1 muestra los niveles de V
OH
y V
OL
del PIC32MX534F064H.
Tabla 4-1. Caractersticas de DC: Especificaciones de salida de pin


2. Usando Salida de Drenaje Abierto
Si necesitamos enviar voltajes mayores a VDD por algn pin, ya vimos que
configurando dicho pin como salida de drenaje abierto (bit del ODC en 1) y una
resistencia de pull-up conectada a una fuente separada de voltaje mayor (mximo 5.5V),
es posible enviar voltajes de 5 (como se muestra en la Figura 4-8).

Figura 4-8. Salida de drenaje abierto con pull-up
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 48
3. Usando un transistor MOSFET
Para realizar una conexin de 3.3V a 5V o a mayor voltaje podemos usar un transistor
MOSFET como se muestra en la Figura 4-9.

Figura 4-9. Conexin de 3.3V a 5V con MOSFET

Para seleccionar el valor de R
1
deben considerarse 2 parmetros; la velocidad de
conmutacin de la seal a enviar y el consumo de corriente a travs de R
1
.
Cuando se conmuta de 0 a 1, debemos considerar el tiempo que toma en subir el
voltaje debido a la constate de tiempo RC formada por R
1
y la capacitancia de la entrada
de 5V (C
IN
), adems de capacitancias parsitas formadas en la tablilla (C
S
).
La velocidad a la que puede conmutar la entrada (T
SW
) est dada por la frmula:
[10]
Como las capacitancias son fijas, la nica manera de permitir mayor velocidad de
conmutacin es disminuyendo R
1
, sin embargo al hacer esto, aumenta la corriente de la
fuente de 5V a travs de la resistencia y el chip de 5V o a travs del MOSFET.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 49
Cuando se seleccione el MOSFET canal-N, escoja uno cuyo voltaje de umbral VGS sea
menor que el V
OH
del PIC32.
Existen otros mtodos para realizar este tipo de conexiones, sin embargo estos 3 pueden
ayudarnos a resolver casi cualquier interface de 3.3V a 5V. Para ver ms sobre trucos de
interfaces de diferentes voltajes vea la referencia [10] Microchip. 3V Tips n Tricks.
DS41285a, Microchip Technology Inc. 2006.

Conexin de 5V a 3.3V
Que pasa si queremos conectar un sensor con interface de 5V al microcontrolador
que funciona a 3.3V? Al igual que las interfaces de 3.3V a 5V, existen diversas formas
de conectar dispositivos de salida de 5V con dispositivos de entrada de 3.3V.
1. Forma directa
Se puede realizar una conexin directa solo si los pines del microcontrolador son
tolerantes a 5V como se muestra en la Figura 4-10.

Figura 4-10. Conexin directa con pines tolerantes a 5V [10]

En la hoja de datos del PIC32 que queremos usar se muestra la configuracin de
pines de cada encapsulado. En esta configuracin podemos ver cuales pines son
tolerantes a entradas de 5V. La Figura 4-11 muestra el diagrama de pines del
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 50
PIC32MX534F064H con encapsulado QFN-64. Observe en este diagrama que los pines
oscuros son tolerantes a 5V.
Nota: Tenga en consideracin que si los pines NO son tolerantes a 5V se puede
daar el chip si conectamos circuitos digitales de 5V.

Figura 4-11. Diagrama de Pines [9]
2. Interface con diodo
Se puede usar un diodo para aislar la seal de 5V del dispositivo de 3.3V como se
muestra en la Figura 4-12. El diodo no permite que pasen los 5V, por lo tanto se
requiere una resistencia (R1) a 3.3V para lograr el 1 lgico. El 0 lgico equivaldra
al voltaje del diodo; por esta razn se usan diodos Schottky ya que tienen un voltaje
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 51
menor (tipicamente 0.2 V) el cual debe ser menor que V
IL
para que sea considerado
como 0 lgico.

Figura 4-12. Interface con diodo [17]

La Tabla 4-2 tomada de la hoja de datos, muestra los niveles de voltaje V
IL
y V
IH

del PIC32MX534F064H.
Tabla 4-2. Caractersticas de DC: Especificaciones de pines de entrada [9]

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 52
3. Interface con transistor BJT
La Figura 4-13 muestra como usar un transistor 2N3904 para hacer una interface de 5V
a 3.3V. Como se puede ver se requiere una resistencia (R2) del lado de los 3.3V. Una
resistencia limitadora de corriente (R1) se usa del lado de 5V. Cuando el lado de 5V se
ponga en nivel alto, Q1 conducir llevando la entrada de 3.3V a tierra. Cuando la salida
de 5V est en nivel bajo, Q1 no conduce y R2 sube el voltaje a 3.3V. Observe que esta
interface con transistor invierte la lgica de la seal. Sin embargo podemos compensar
por software esta inversin.

Figura 4-13. Interface de 5V a 3.3V con transistor BJT [17]

4. Interface con transistor FET
La Figura 4-14 muestra la misma interface usando un transistor FET, en lugar de un
BJT. En este arreglo R2 se sigue utilizando para subir el voltaje a 3.3V, sin embargo R1
se conecta a tierra para asegurar que Q1 est apagado cuando la salida de 5V est
flotando (por ejemplo cuando el pin aun no se configura como salida).

Figura 4-14. Interface con transistor FET [17]
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 53
Al igual que la interface con BJT, esta interface tambin invierte la lgica de la seal.
Sin por alguna razn no podemos invertir la seal por software para compensar,
podemos crear un buffer de 2 etapas para invertir otra vez dejando la lgica igual. La
Figura 4-15 muestra est interface de 2 etapas.

Figura 4-15. Interface con FET de 2 etapas [17]

5. Interface con Optoacoplador
La interface con optoacoplador funciona de manera similar a la realizada con transistor,
sin embargo provee aislamiento elctrico entre los 2 dispositivos. Esta caracterstica es
muy til cuando se tiene ruido elctrico presente en la seal.
La Figura 4-16 muestra la interfaz de 5V a 3.3V por medio de un optoacoplador 4N25.
Observe que si queremos un aislamiento elctrico las tierras no deben ser comunes. Al
igual que las interfaces con transistor, la lgica de la seal se invierte.

Figura 4-16. Interface con optoacoplador [17]
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 54
Otra ventaja de la interfaz con optoacoplador es que es posible prevenir que la seal se
invierta conectando la entrada del opto como se muestra en la Figura 4-17.

Figura 4-17. Interfaz con optoacoplador sin inversin de seal [17]
Los optoacopladores son muy tiles para realizar interfaces a dispositivos de mayor
voltaje, tales como 12V de sistemas automotrices o 24V en aplicaciones industriales.
6. Interfaz con Buffer
La Figura 4-18 muestra una interfaz con un buffer 74LVC244A, el cual es un buffer
octal, con 2 grupos de 4 puertos con habilitaciones separadas. Este chip provee un
buffer de salida de 3.3V y las entradas pueden aceptar entradas de 5V y 3.3V. Las
salidas son capaces de proporcionar 50mA y la alimentacin est en el rango de 1.65V a
3.6V. La comunicacin es unidireccional. Cuando un pin OE est en nivel alto, las
salidas son de alta impedancia, cuando el pin OE est en nivel bajo, el dato pasa de la
entrada A a la salida Y. Las entradas no utilizadas se conectan a tierra para reducir ruido
y consumo de potencia.

Figura 4-18. Interfaz con Buffer [17]
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 55
7. Interfaz con traductor de voltaje
Una forma de realizar una interfaz bidireccional entre 2 dispositivos de voltajes
diferentes es usando un circuito traductor de voltaje. La Figura 4-19 muestra un
traductor TXB0108PW. Este chip usa 2 alimentaciones diferentes como se muestra en
la figura.

Figura 4-19. Interfaz con traductor de voltaje [17]

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 56
Display de Cristal Lquido (LCD)
Nuestra primer interfaz de 3.3V - 5V ser con un display LCD alfanumrico de
16x2. Las pantallas de cristal lquido o LCD (Liquid Crystal Display) alfanumricas
permiten mostrar mensajes y con esto podemos dotar a nuestros circuitos de una interfaz
mas llamativa para el usuario.
Un LCD comnmente usado debido a su bajo costo y disponibilidad es la pantalla
alfanumrica de 16 caracteres por 2 renglones mostrada en la Figura 4-20

Figura 4-20. Display 2x16

El funcionamiento de esta pantalla puede revisarlo en su hoja de datos o recomiendo el
libro Microcontrolador PIC16F84 Desarrollo de proyectos de Enrique Palacios para una
explicacin en espaol mas detallada.
Para el uso de este LCD haremos uso de una librera llamada alpha_lcd modificada
para el uso del PIC32. El cdigo de esta librera lo puede ver en el APNDICE B y la
puede descargar de la pgina de la materia.
En el archivo alpha_lcd.h de la librera puede modificar los pines del PIC32 que se
conectan con el LCD.
El Display LCD que usaremos se alimenta con 5V, por lo tanto su interfaz digital es de
5V, sin embargo el PIC32 lo alimentaremos con 3.3V. Entonces para poder saber que
tipo de interfaz usar, debemos analizar las caractersticas elctricas del display. La Tabla
4-3 muestra dichas caractersticas del display JHD162A.
Para la interfaz de salida del PIC32 (de 3.3V a 5V); como podemos observar un nivel
lgico de entrada alto del LCD (V
IH
) est en el rango de 2.2 a VDD, entonces podemos
realizar la interfaz de manera directa, ya que el nivel de voltaje alto del PIC32 (V
OH
) es
mayor que el V
IH
del LCD.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 57
Tabla 4-3. Caractersticas Elctricas del display JHD162A


Para la interfaz de entrada del PIC32 (de 5V a 3.3V) simplemente usaremos pines
tolerantes de 5V.
La Figura 4-21 muestra la interfaz de conexin del PIC32 con el display usando interfaz
directa con pines tolerantes a 5V.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 58
Ejemplo 2: Uso de Display LCD 16x2
El siguiente ejemplo demuestra el uso del LCD 16x2 con la librera alpha_lcd.
Este ejemplo simplemente muestra 2 mensajes en el display, como se muestra en la
figura.

Figura 4-21. Diagrama de conexin

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 59
Programa 4-2. Uso de LCD 16x2

#include <p32xxxx.h>
#include "alpha_lcd.h"

//Bits de configuracion
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20
#pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON
#pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON
#pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD

int main(void)
{
AD1PCFG = 0xFFFF; // configura pines AN como digitales

// configura LCD
openLCD();
//Muestra cadena "Probando LCD"
putsLCD("Probando LCD");

//Cambia al renglon 2
setDDRamAddr(0x40);

//Muestra cadena en rengln 2
putsLCD("EN PIC32!!");

while(1)
{
}

return 0;
}

Ejemplo 3: Mostrar valores numricos en LCD 16x2
Las funciones de la librera alpha_lcd slo nos permiten mostrar caracteres y
cadenas de caracteres en el display, que el display LCD alfanumrico recibe cdigos
ASCII y muestra el carcter asociado al cdigo.
Si queremos mostrar el contenido de variables, como resultados de operaciones
matemticas, primeramente necesitamos convertir el valor numrico a cadena para
luego mostrarlo en el display.
Para convertir un dato numrico a cadena podemos hacer uso de la funcin
sprintf de la librera stdio.h. La Figura 4-22 muestra la descripcin de esta
funcin dada por el documento 32-bit Language Tools Libraries, el cual describe las
funciones que contiene el lenguaje C32.
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 60

Figura 4-22. Funcin sprintf [11]

La funcin sprintf se usa de la siguiente manera:
Si queremos convertir el contenido de una variable short llamada num a una cadena
y almacenarla en strNum el procedimiento sera el siguiente:
short num; //declaro mi variable short
char strNum[6]; //declaro mi cadena strNum de 6 bytes porque
//el nmero mximo contiene 6 bytes(65535 + 0);

//asigno algn valor a la variable num
num = 100;

//Convierto a cadena el contenido de num
sprintf(strNum,%d,num);

//Muestro en LCD
putsLCD(strNum);
Tambin podemos convertir variables del tipo flotante a cadena usando la funcin
sprintf, inclusive podemos decirle la cantidad de decimales que incluya en la cadena,
por ejemplo:
double num; //declaro mi variable short
char strNum[16]; //declaro una cadena capaz de contener un nmero
// de 14 dgitos + punto decimal

//asigno algn valor a la variable num
num = 100.54321;

//Convierto a cadena el contenido de num con 5 decimales
sprintf(strNum,%.5f,num);

//Muestro en LCD
putsLCD(strNum);
4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 61
El siguiente programa muestra un contador en el display LCD usando el mismo
circuito del display mostrado anteriormente (Figura 4-21). Para hacer uso de la funcin
sprintf se necesita agregar la librera stdio.h.
Programa 4-3. Mostrar valores numricos en Display
#include <p32xxxx.h>
#include <stdio.h>
#include "../../librerias/LCD/alpha_lcd.h"
#include "../../librerias/retardos/retardos.h"

//Bits de configuracion
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20
#pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON
#pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON
#pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD

int main(void)
{
int num;
char strNum[6];

// configura pines AN como digitales
AD1PCFG = 0xFFFF;

// configura LCD
openLCD();

//Enva cadena "Numero en LCD"
putsLCD("Numeros en LCD");

num = 0;
while(1)
{
//se coloca en renglon 2
setDDRamAddr(0x40);

//convierte num a cadena en strNum
sprintf(strNum,"%d",num);

//muestra strNum en display
putsLCD(strNum);

//siguiente numero
num++;

//espera aprox 200ms
retardo1ms(200);
}

return 0;
}

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 62
Libreras de C32
El lenguaje C32 provee una gran cantidad de funciones disponibles para ser usadas.
Estas funciones bsicamente estn separadas en 2 categoras: Libreras geneales y
Libreras para uso de perifricos.
Libreras Generales
En estas libreras encontramos las funciones estndar del lenguaje C, por ejemplo
stdio.h, stdlib.h, string.h, time.h, math.h, etc. Tambin se tienen
libreras de procesamiento digital de seales (DSP) para realizar operaciones comunes
como multiplicaciones de vectores, filtros digitales y transformada de Fourier.
Para acceder al documento que detalla todas las Libreras generales, en el MPLAB
seleccione el men Help->Topics y dentro de este, seleccione C32 C Lib
Guide(PDF).
Libreras de Perifricos
Adems de las librerias generales, el lenguaje C32 proporciona una gran variedad
de funciones para el manejo de perifricos del PIC32, por ejemplo: Interrupciones,
Timers, Modulos de comunicacin serial, ADC, RTCC, etc.
Para acceder al documento que detalla todas las Libreras de Perifricos, en el
MPLAB seleccione el men Help->Topics y dentro de este, seleccione C32
Peripheral Lib Guide.

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 63
Tipos de datos de C32
La Tabla 4-4 muestra los tipos de datos enteros que maneja el lenguaje C32.
Observe que el tipo de dato int es de 32 bits a diferencia de otras implementaciones
del lenguaje C.
Tabla 4-4. Tipos de datos enteros


La Tabla 4-5 muestra los tipos de datos de punto flotante que maneja el lenguaje
C32.
Tabla 4-5. Tipos de datos con punto flotante

El PIC32 no posee una unidad de punto flotante, de tal forma que todas las
operaciones de punto flotante son realizadas por software y no por hardware. Por esta
razn, las operaciones con punto flotante funcionan mucho ms lento que las
operaciones con enteros.

4- Puertos de Entrada-Salida
Ing. Juan Ramon Terven Salinas 64
PRCTICA 2: Funciones Trigonomtricas en LCD 16x2
Desarrolle un proyecto que muestra el seno y coseno en un display LCD
alfanumrico como se muestra en la Figura 4-23.
1. Mostrar en el rengln 1 el seno.
2. Mostrar en el rengln 2 el coseno.
3. Debe mostrar automticamente el seno y coseno desde 0 hasta 359, al
llegar a 360 el ngulo se regresa a 0.
4. De un retardo de aproximadamente de segundo entre cada actualizacin
de la pantalla.
Nota: Existen funciones que calculan el seno y coseno de variables de punto
flotante en la librera de matemticas. Consulte las libreras generales.

Figura 4-23. Diagrama de Prctica