Вы находитесь на странице: 1из 45

1

A. Microcontrolador PIC 18F4550

A.1. Arquitectura Harvard

El término arquitectura Harvard, proviene del computador Harvard Mark I,


se encarga de almacenar instrucciones en cinta perforada y los datos en
interrupciones. Es la misma arquitectura de los computadores, posee dispositivos
de almacenamiento que se encuentran separados físicamente para los datos y las
instrucciones. Las partes principales de las computadores es la memoria y la CPU,
la primera guarda los datos y la SPU los procesa. A través de la memoria no solo
se pueden manejar los datos sino también el lugar donde se encuentran
almacenados, estos dos parámetros son de mucha importancia para la CPU.

El microcontrolador PIC 18F4550 dispone de diferentes buses para el


acceso a Memoria de Programa y Memoria de Datos (arquitectura Harvard):
• Bus de Memoria de programa:
•21 líneas de dirección;
•16/8 líneas de datos (16 líneas para instrucciones / 8 líneas para
datos).
•Bus de Memoria de Datos:
•12 líneas de dirección;
•8 líneas de datos.
Esto permite acceder simultáneamente a la memoria de programa y a la
memoria de datos. Es decir se puede ejecutar una instrucción (lo que por lo
general requiere acceso a memoria de datos) mientras se lee de la memoria de
programa la siguiente instrucción (proceso Pipeline). Ver Figura A.1.
2

Figura A.1. Esquema de Pipeline.

Por lo tanto la ejecución completa de una instrucción (lectura instrucción +


ejecución) se hace en un ciclo de instrucción (4 Tosc). Con la excepción de las
instrucciones que modifican el contenido requieren 2 ciclos de instrucción.

A.2. Organización de memoria

El microcontrolador PIC 18F4550 dispone de las siguientes memorias:


• Memoria de programa: memoria Flash interna de 32.768 bytes,
almacena instrucciones y constantes / datos, puede ser escrita/leída
mediante un programador externo o durante la ejecución de un
programa mediante punteros;
• Memoria RAM de datos: memoria SRAM interna de 2048 bytes en la
que están incluidos los registros de función especial, almacena datos de
forma temporal durante la ejecución del programa, puede ser escrita /
leída en tiempo de ejecución mediante diversas instrucciones;
• Memoria EEPROM de datos: memoria no volátil de 256 bytes,
almacena datos que deben conservar aun en ausencia de tensión de
alimentación, puede ser escrita/leída en tiempo de ejecución a través de
registros;
• Pila: bloque de 31 palabras de 21 bits, almacena la dirección de la
instrucción que debe ser ejecutada después de una interrupción o
subrutina;
3

• Memoria de configuración: memoria en la que se incluyen los bits de


configuración (12 bytes de memoria Flash) y los registros de
identificación (2 bytes de memoria de solo lectura).

A.2.1. Memoria de programa

El microcontrolador PIC 18F4550 dispone de una memoria de programa


de 32.768 bytes (0000H a 7FFFH). Las instrucciones ocupan 2 bytes, excepto
CALL, MOVFF, GOTO, LSFR que ocupan 4; por lo tanto la memoria de programa
pueden almacenar hasta 16.384 instrucciones. Ver Figura A.2.

Figura A.2. Distribución de la memoria en PIC 18F4550.


La operación de lectura en posición de memoria por encima de 7FFFH da
cero como resultado, equivalente a la instrucción NOP.
Las direcciones especiales de la memoria de programa son:
• Vectorización del Reset en 0000H;
• Vectorización de las interrupciones de alta prioridad es la 0008H;
4

• Vectorización de las interrupciones de baja prioridad es la 0018H.

A.2.2. Memoria RAM de datos

El microcontrolador dispone de una memoria RAM de datos 2.048 bytes (8


bancos de 256 bytes). Además dispone de 160 bytes dedicados a los registros de
funciones especiales (SFR’s) situados en la parte alta del banco 15. Ver Figura A.
3.

Figura A.3. Distribución memoria RAM de PIC 18F4550.


Para acceder a un byte de la memoria RAM de datos primero debe
seleccionarse el banco al que pertenece el byte mediante el registro de selección
de banco (BRS) y a continuación direccionar el byte dentro del banco. Además
existe una modalidad de acceso rápido de 96 posiciones de la parte baja del
5

banco 0 a los 160 bytes de SFR’s (banco de acceso rápido). Los bancos 4, 5, 6 y
7 se utilizan también para el USB.

A.2.3. Memoria EEPROM de datos

El microcontrolador PIC 18F4550 dispone de una memoria EEPROM de


datos de 256 bytes. Al ser una memoria no volátil los datos almacenados en ella
se mantienen aun en ausencia de tensión de alimentación.

El acceso a esta memoria se realiza mediante los SFR (EECON1,


EECON2, EEDATA, EEADR). Esta memoria permite hasta 1.000.000 de ciclos de
borrado/escritura. Se puede leer y escribir de forma individual en cada una de las
256 posiciones de memoria.

Cuando se realiza una operación de escritura la circuitería interna del


microcontrolador se encarga de borrar previamente la posición en la que se desea
escribir. La duración de un ciclo completo de borrado/escritura de un byte en la
memoria EEPROM suele ser de unos 4 [mS].

Un problema bastante común en las memorias EEPROM es la corrupción


de los datos almacenados debido a operaciones de escrituras indeseadas. Para
evitar este tipo de situaciones durante la inicialización del microcontrolador
( Power up, Reset) la operación de escritura queda deshabilitada.

A.2.4. Pila
6

La Pila es un bloque de memoria RAM independiente de 31 palabras de


21 bits que sirve para almacenar temporalmente el valor del PC cuando se
produce una llamada a subrutina o una interrupción. Ver Figura A.4.

Figura A.4. Manipulación de memoria de Pila.

El puntero de Pila, contenido en el registro STKPTR, es un contador de 5


bits que indica la posición actual del final de pila. El contenedor del final de pila es
accesible mediante los registros TOSU, TOSH, TOSL. Cuando se procesa una
interrupción o se ejecutan las instrucciones, las instrucciones CALL o RCALL (el
PC está apuntando a la siguiente instrucción) se incrementa el STKPR y se
almacena en el final de la pila el valor del PC. Cuando se ejecutan las
instrucciones RETURN, RETLW o RETFIE se copia el valor almacenado en la
cima de la pila en el PC y se decrementa el STKPTR.

A.2.5. Memoria de configuración

Se trata de un bloque de memoria situado a partir de la posición 30000H


de memoria de programa (más allá de la zona de memoria de programa de
usuario).
7

En esta memoria de configuración se incluyen los bits de Configuración


que están contenidos en 12 bytes de memoria Flash permiten la configuración de
algunas opciones del microcontrolador como:
• Opciones del oscilador;
• Opciones del Reset;
• Opciones del Watchdog;
• Opciones de la circuitería de depuración y programación;
• Opciones de protección contra escritura de memoria de programa y
memoria EEPROM de datos.

Estos bits se configuran generalmente durante la programación del


microcontrolador, aunque también pueden ser leídos y modificados durante la
ejecución del programa.

Los Registros de Identificación son dos registros situados en las


direcciones 3FFFFEH y 3FFFFFH que contienen información del modelo y revisión
del dispositivo. Son registros de sólo lectura y no pueden ser modificados por el
usuario.

A.3. Sistema de interrupciones de PIC 18F4550

Dispone de 21 fuentes de interrupciones (INTCON). Se distinguen dos


grupos de interrupciones: Grupo general de interrupciones y Grupo de
interrupciones de periféricos.

Se dispones de niveles de prioridad:


• Nivel alto, vectorizado en la dirección 0008H;
• Nivel bajo, vectorizado en la dirección 0018H.
8

Todas las interrupciones pueden ser programadas con cualquiera de las


dos prioridades, salvo la interrupción externa 0 (que siempre tiene alta prioridad).
Además, las interrupciones disponen de 3 bits de configuración, excepto la
interrupción externa 0, que tiene dos:
• Bit de habilitación de interrupción: permite habilitar a nivel individual la
interrupción;
• Flag de interrupción: se pone a “1” cuando se produce la condición de
interrupción independientemente de si la interrupción está habilitada o
no. Este Flag debe ponerse a “0” por software cuando se procesa la
interrupción;
• Bit de prioridad de interrupción: establece si la interrupción es de alta o
de baja prioridad, este bit no está disponible para la interrupción externa
0.

A.4. Unidades funcionales del microcontrolador

El microcontrolador PIC 18F4550 dispone de una serie de unidades


funcionales que le permiten realizar tareas especificas especializadas (conversión
ADC, Transmisión / Recepción de datos, generación de señales digitales con
temporización programable). Además optimizar el rendimiento del
microcontrolador ya que estas unidades trabajan en paralelo a la CPU permitiendo
que ésta se centre en otras tareas como procesado de datos, cálculos, movimiento
de datos, etc.

La unidades funcionales más importantes del PIC 18F4550 son:


• Puertos de E/S;
• Temporizadores (0 al 3);
• Convertidores ADC;
9

• Unidades de Comparación / Captura / PWM (CCP);


• Unidades de Comparación / Captura / PWM mejorada (ECCP);
• Canal de comunicación serie EUSART;
• Canal de comunicación serie MSSP;
• Canal de comunicaciones serie USB;
• Módulo analógico de comparación;
• Canal de transmisión de datos en paralelo (SPP);
• Canal de comunicación I2C.

A.4.1. Puerto de E/S

El microcontrolador dispone de cinco puertos de Entrada y Salida (E/S)


que incluyen un total de 35 líneas digitales.

Tabla A1. Listado de puertos del microcontrolador PIC 18F4550.

Puerto Líneas de Entrada/Salida

PORTA 7 líneas de Entrada / Salida

PORTB 8 líneas de Entrada / Salida

PORTC 6 líneas de Entrada / Salida + 2 líneas de Entrada

PORTD 8 líneas de Entrada / Salida

PORTE 3 líneas de Entrada / Salida + 1 línea de Entrada

Todas las líneas digitales de E/S disponen de al menos una función


alternativa asociada a alguna circuitería específica del microcontrolador. Cuando
una línea trabaja en el modo alternativo no puede ser usada como línea digital de
E/S estándar.
10

Cada puerto de E/S tiene asociado tres registros:


• Registro TRIS: mediante este registro se configura cada una de las
líneas de E/S del puerto como Entrada (bit correspondiente a “1”) o
como Salida (bit correspondiente a “0”);
• Registro PORT: mediante este registro se puede leer el nivel de pin de
E/S y se puede establecer el valor del Latch de salida;
• Registro LAT: mediante este registro se puede leer o establecer el valor
del Latch de salida.

El Puerto A, dispone de siete líneas de Entrada y Salida. Las funciones


alternativas son:
• RA0: Entrada análoga (AN0) / Entrada de comparación (C1IN-);
• RA1: Entrada análoga (AN1) / Entrada de comparación (C2IN-);
• RA2: Entrada análoga (AN2) / Entrada de comparación (C2IN+);
• RA3: Entrada análoga (AN3) / Entrada de comparación (C2IN+);
• RA4:Entrada de reloj del temporizador 0 (TOCKI) / Salida de
comparación (C1OUT);
• RA5: Entrada análoga (AN4) / Salida de comparación (C2OUT) /
HLVDIN entrada de detección de tensión alta/baja;
• RA6: Entrada del oscilador principal (OSC2) / Salida de señal de reloj
(CLK0).

En el Reset de las líneas RA0, RA1, RA2, RA3 y RA5 se configuran como
líneas de entrada analógicas. Para poder utilizarlas como líneas digitales de E/S
hay que desactivar la función analógica.

El Puerto B dispone de ocho líneas de Entrada y Salida. Las funciones


alternativas son:
11

• RB0: Entrada análoga (AN12) / Interrupción externa 0 (INT0) / Entrada


de fallo del ECCP (FLT0) / Entrada de datos del SPI (SDI) / Línea de
datos del I2C (SDA);
• RB1: Entrada análoga (AN10) / Interrupción externa 1 (INT1) / Línea de
reloj del SPI (SDI) / Línea de reloj del I2C (SDA);
• RB2: Entrada análoga (AN8) / Interrupción externa 2 (INT2) / Salida de
datos del USB (VCMO);
• RB3: Entrada análoga (AN9) / Línea de E/S del CCP2 / Salida de datos
USB (VPO);
• RB4: Entrada análoga (AN11) / Interrupción por cambio en pin (KBI0) /
Salida de CS del SSP (VPO);
• RB5: Interrupción por cambio en pin (KBI1) / Línea de programación
(PGM);
• RB6: Interrupción por cambio en pin (KBI2) / Línea de programación
(PGC);
• RB7: Interrupción por cambio de pin (KBI3) / Línea de programación
(PGD).

Todas las líneas del Puerto B disponen de resistencias de Pull-up internas


que pueden ser activadas poniendo el pin RBPU del registro INTCON2 a
“0” (RPBU=”1” después de un Reset). Si una línea del Puerto B se configura como
salida de la resistencia de Pull-up correspondiente se desactiva automáticamente.

Por defecto, en el Reset de las líneas RB4,RB3,RB2,RB1,RB0 están


programadas como entradas analógicas. Existen dos formas de configurar estos
puertos como líneas de E/S digitales: poniendo a “0” el bit PBADEN del registro de
configuración CONFIG3H o si PBADEN=”1” desactivando la función analógica.
12

El Puerto C dispones de cinco líneas de Entrada y Salida (RC0, RC1,


RC2, RC6 Y RC7) y dos líneas de solo entrada (RC4 y RC5). Las funciones
alternativas son:
• RC0: Salida del oscilador del temporizador 1 (T1OS0) / Entrada de
controlador de los temporizadores 1 y 3 (T13CK1);
• RC1: Entrada del oscilador del temporizador 1 (T1OS1) / Línea de E/S
del CCP2 / Salida OE del transciever del USB (UOE);
• RC2: Línea de E/S del CCP1 / Salida PWM del ECCP1 (P1A);
• RC4: Línea menos del bus USB (D-) / Línea de entrada del USB (VM);
• RC5: Línea más del bus USB (D+) / Línea de entrada del USB (VP);
• RC6: Salida de transmisión del EUSART (TX) / Línea de reloj del
EUSART (CK);
• RC7: Entrada de recepción del EUSART (RX) / Línea de datos síncrona
del EUSART (DT) / Salida de datos del SPI (SDO).

En el Reset de todas las líneas del Puerto C quedan configuradas como


entradas digitales.

El Puerto D dispone de ocho líneas de Entrada y Salida. Las funciones


alternativas son:
• RD0: Línea de datos del SPP (SPP0);
• RD1: Línea de datos del SPP (SPP1);
• RD2: Línea de datos del SPP (SPP2);
• RD3: Línea de datos del SPP (SPP3);
• RD4: Línea de datos del SPP (SPP4);
• RD5: Línea de datos del SPP (SPP5) / Salida PWM del ECCP1 (P1B);
• RD6: Línea de datos del SPP (SPP6) / Salida PWM del ECCP1 (P1C);
• RD7: Línea de datos del SPP (SPP7) / Salida PWM del ECCP1 (P1D).
13

Todas las líneas del Puerto D disponen de resistencias Pull-up internas


que pueden ser activadas poniendo el bit RDPU del registro PORTE a “1”. Si una
línea del Puerto D se configura como salida la resistencia de Pull-up
correspondiente se desactiva automáticamente.

El Puerto E dispone de tres líneas de Entrada y Salida (RE0, RE1, RE2) y


una línea de sólo entrada (RE3). Las funciones alternativas son:
• RE0: Entrada análoga (AN5) / Salida de reloj 1 del SPP (CK1SPP);
• RE1: Entrada análoga (AN6) / Salida de reloj 2 del SPP (CK2SPP);
• RE2: Entrada análoga (AN7) / Salida habilitación del SPP (OESPP);
• RE3: Línea de Reset externo (MCLR) / Línea de programación (VPP).

En el Reset todas las líneas RE2,RE1,RE0 se configuran como entrada


analógicas. Para poder utilizarlas como líneas digitales de E/S hay que desactivar
la función analógica.

La línea RE3 por defecto tiene la función de Reset del microcontrolador. Si


se desea desactivar la función de Reset y utilizar RE3 como línea de entrada
digital hay que poner a “0” el bit MCLRE del registro de configuración CONFIG3H.

A.4.2. Temporizadores

El Temporizador 1 dispone de un oscilador propio que permite:


• Generar la señal de reloj del Temporizador 1;
• Generar la señal de reloj principal en algunos modos de bajo consumo.

Está diseñado con un oscilador interno para trabajar a una frecuencia de


32 KHz. Este microcontrolador ejecuta una instrucción en un ciclo de máquina
14

(cuatro periodos de reloj). Además dispone de un modulo de bajo consumo,


aunque presenta el inconveniente de que cuando el oscilador trabaja en este
modo se vuele más sensible a las interferencias. A partir de este oscilador y
utilizando la interrupción del Temporizador 1, se puede implementar un reloj en
tiempo real de forma muy sencilla.

Cundo se requiere aumentar la velocidad de procedimiento se debe


conectar un oscilador externo con frecuencias de osciladores de 8, 10, 12, 16, 20,
32, 40, 48 MHz.

En los modos de oscilación HS, HSPLL, XT y XTPLL, un cristal o


resonador de cerámica debe ser conectado en las líneas de entrada OSC1 y
OSC2, mostrado en la Figura A.5.

Figura A.5. Oscilador con Cristal.

Una alta capacitáncia incrementa la estabilidad de la oscilación pero


también incrementa el tiempo de inicio del microcontrolador. Además cuando el
microcontrolador opera bajo los 3V VDD, o cuando es usado un resonador de
cerámica a cualquier voltaje, debe ser necesario utilizar el modo HS en la
configuración. Ver Tabla A.2.
15

Tabla A.2. Valores para condensadores según cristal a usar.

Modo Frecuencia cristal Valor típico condensadores

OSC1 OSC2

XT 4 MHz 27 pF 27 pF

HS 4 MHz 27 pF 27 pF
8 MHz 22 pF 22 pF
20 MHz 15 pF 15 pF

En tanto el Temporizador 2, posee las siguientes características


fundamentales:
• Temporizador de 8 bits (registro TMR2);
• Registro de periodo PR2;
• Pre-escalar de 2 bits programable (1:1, 1:4, 1:16);
• Post-escalar de 4 bits (1:1, ... 1:16);
• Interrupción por igualdad entre TMR2 y PR2;
• Se pude utilizar con los módulos CCP y ECCP;
• Se puede utilizar como señal de reloj para MSSP en modo PSI;
• Los registros TMR2 y PR2 son de lectura y escritura, además los
contadores del pre-escalar y del post-escalar no son accesible por el
usuario;
• La señal de salida del Temporizador 2 puede ser utilizada en el modulo
CCP para generar señales PWM o en el módulo MSSP como señal de
reloj del modulo SPI;
• La señal de salida del Temporizador está conectada a un contador post-
escalar que se incrementa cada vez que se produce la igualdad entre
TMR2 y PR2.
16

Y el Temporizador 3 posee las siguientes características fundamentales:


• Configurable como temporizador/contador de 16 bits;
• Dispones de varias opciones de señal de reloj en el modo temporizador;
• Pre-escalar de 3 bits programable;
• Interrupción por desbordamiento.

A.4.3. Convertidores ADC

Las características fundamentales son:


• 10 bits de resolución;
• 13 canales multeplexados;
• Señal de reloj de conversión configurable;
• Tiempo de adquisición programable (0 a 20TAD);
• Posibilidad de establecer el rango de tensión de conversión mediante
tensiones de referencias externas.

Por defecto, el rango de tensión de conversión del convertidor ADC del


PIC 18F4550 es de 0V a 5V. Sin embargo, en ocasiones puede resultar
interesante modificar este rango para aumentar la resolución de la conversión
acercando las tensiones de referencia máxima y mínima VREF+ y VREF- a los limites
de variación de la señal que se desea digitalizar. Esto se puede conseguir
configurando las líneas RA2/AN2/VREF- y RA3/AN3/VREF+ como tensión de
referencia del convertidor A/D, poniendo a “1” los bits VCFG1 y VCFG0 del registro
ADCON1. De esta forma el rango de tensiones de conversión vendrá determinado
por las tensiones que conecten a dichas líneas. Esto puede ser mostrado en la
siguiente Figura A.6.
17

Figura A.6. Distribución de ADC y los voltajes de referencias VREF+ y VREF-.

A.4.4. Módulo de Comparación/Captura/PWM

Dispone de tres modos de funcionamiento:


• Modo de Captura: se utiliza para medir eventos externos como la
duración de pulsos digitales;
• Modo de Comparación: se utiliza para generar señales digitales com
temporizaciones programables. Este tipo de señales son muy útiles
para el control de etapas de potencia (convertidores DC/DC, DC/AC,
AC/DC, AC/AC);
• Modo PWM: se utiliza para generar señales de modulación por ancho
de pulso.
18

Los elementos asociados a estos modos son los siguientes:


• Temporizadores asociados: Temporizador 1 y Temporizador 3;
• Registros de comparación: CCP2RH y CCPR2L;
• Pines de E/S: RC1/T1OSC1/CCP2 o RB3/AN9/CCP2;
• Interrupción asociada a los módulos de Captura y Comparación.

A.4.4.1. Modo de Captura

En el Modo de Captura, ver Figura A.7, el valor del Temporizador 1 o


Temporizador 3 pasa al par de registros CCPR2H o CCP2L cuando se produce
alguno de los siguientes eventos en el pin del CCP (RB3 o RC1):
• En cada flanco de bajada;
• En cada flanco de subida;
• Cada cuatro flacos de subida;
• Cada 16 flancos de subida.

La selección del Temporizador que se captura se utiliza mediante los bits


T3CCP2 y T3CCP1 del registro T3CON.

El Temporizador que se utilice debe configurarse en modo Temporizador o


en modo contador síncrono. Si se configura en modo contador asíncrono el modo
no captura, no funcionará.

Figura A.7. Diagrama de Bloques Modo de Captura.


19

A.4.4.2. Modo de Comparación

En el Modo de Comparación, ver Figura A.8, el par de registros CCPR2H y


CCPR2L se comparan continuamente con el Temporizador asociado. Existen
varios modos de comparación en función del valor de los bits CCP2M3 a
CCP2M0.

Figura A.8. Diagrama de Bloques modo de Comparación.

A.4.4.3. Modo PWM

El Modo PWM permite generar una señal PWM de ciclo de trabajo y


frecuencia programable, ver Figuras A.9 y A.10. El funcionamiento de este modo
es el siguiente:
• Un registro de 10 bits, compuesto por CCPR2H y por un registro interno
de 2 bits, se comprara constantemente con un contador de 10 bits,
compuesto por el registro TMR2 del Temporizador 2 y un pre-escalar de
2 bits;
• Cuando el valor del contenedor se hace igual al del registro se pone a
“0” el pin de salida del CCP;
• En paralelo el registro PR2 se compara constantemente con el registro
TMR2 del Temporizador 2. Cuando el valor de TMR2 alcanza PR2, se
pone a “1” el pin de salida del CCP, se inicializa a “0” el valor del
20

contador de 10 bits y el valor del registro de 10 bits se recargan con el


valor del registro CPPR2L y los bits CCP2CON.

Figura A.9. Diagrama de Bloques del Modo PWM.

Figura A.10. Periodo y ciclo de trabajo para PWM.

Para generar la señal PWM s deben seguir los siguientes pasos:


• Configurar el pin CCP (RC1 o RB3) como salida;
• Configurar el Temporizador 2 para que trabaje como temporizador.
Puede utilizarse el pre-escalar del Temporizador 2, pero no puede
utilizarse el post-escalar;
• Configurar el modulo CCP en modo PWM;
• Establecer el periodo de la señal PWM mediante el valor del registro
PR2.
21

Mediante las formulas 2.1, 2.2, se puede lograr la obtención el periodo y el


ciclo de trabajo para PWM del microcontrolador.

(A.1)

(A.2)

A.4.5. Modulo de Comparación/Captura/PWM mejorado

Dispone de cuatro modos de funcionamiento:


• Modo de Captura: se utiliza para medir eventos externos como la
duración de pulsos digitales;
• Modo de Comparación: se utiliza para generar señales digitales con
temporizaciones programables. Este tipo de señales son muy útiles
para el control de etapas de potencia (convertidores DC/DC, DC/AC,
AC/DC);
• Modo PWM: se utiliza para generar señales de modulación por ancho
de pulso;
• Modo PWM mejorado: se utiliza para generar señales PWM
complementarias para el control de semi-puentes de transistores
(puente H o H-Bridge). Las funciones son las mismas que los módulos
anteriores con excepción del PWM mejorado.

A.4.5.1. Modo PWM mejorado:

El Modo PWM mejorado del módulo ECCP permite generar señales PWM
por los pines RC2/P1A, RD5/P1B, RD6/P1C y RD7/P1D con una gran flexibilidad.
Algunas de las posibilidades de este modo son:
22

• Generación de 1 salida PWM (pin RC2/P1A), modo estándar;


• Generación de 2 salidas PWM complementarias (pines RC2/P1A, RD5/
P1B);
• Generación de 4 salidas PWM (pines RC2/P1A, RD5/P1B, RD6/P1C,
RD7/P1D) con posibilidad de realizar modulación PWM en dos de ellas,
modo puente completo;
• Flexibilidad en la configuración de los niveles activos de las señales
PWM;
• Programación de tiempos muertos entre las transiciones de las señales
de salida;
• Programación de condiciones de Auto-Shutdown y de reinicio
automático una vez que desaparece la condición de Auto-Shutdown.

El Modo PWM mejorado, ver Figura A.11, se puede utilizar para la


generación de las señales de disparo de la etapa de potencia de convertidores
DC/DC (control unidireccional y bidireccional de motores DC) y AC/AC (inversores,
control de motores AC).

Figura A.11. Diagrama de bloques de PWM mejorado.

En el modo semi-puente, ver Figura A.12, el ECCP genera señales PWM


complementarias por los pines RC2/P1A y RD5/P1B. Las señales PWM pueden
23

configurarse para que sean activas por nivel alto o por nivel bajo. Se puede
programar un tiempo muerto entre las transiciones de las señales con el fin de
evitar cortocircuitos en la alimentación de la etapa de potencia.

Figura A.12. Configuración de semi-puente o puente H.

Figura A.13. Configuración de puente completo.

Las limitaciones al usar el puente completo, ver Figura A.13, y a pesar del
intervalo de transición, en determinadas condiciones de funcionamiento se puede
producir un cortocircuito en algunas de las semi-ramas del puente completo. Si el
cambio de sentido se produce cuando el ciclo de trabajo del PWM está cerca del
24

100% y los transistores utilizados en el semi-puente tiene un tiempo de


conmutación a OFF superior al tiempo de conmutación a ON, se producirá un
cortocircuito en las semi-ramas del puente. Para evitar este problema caben varias
soluciones:
• Reducir el ciclo de trabajo ligeramente antes de realizar el cambio de
sentido;
• Utilizar transistores o circuitos de disparo de los transistores que
permitan que la conmutación OFF sea más rápida que la conmutación a
ON.

A.4.6. Canal de comunicación serie EUSART

Las características fundamentales de este sistema de comunicación son:


• Modo de trabajo;
• Modo asíncrono de 8 bits;
• Modo asíncrono de 9 bits;
• Modo síncrono Maestro;
• Modo síncrono Esclavo;
• Auto activación por detección de datos recibidos;
• Detección automática de velocidad de comunicación (Baud Rate);
• Transmisión y detección de carácter de Break (bus LIN).

Solo se explicara el método de transmisión TX/RX asíncrono.

Los pines RC6/TX y RC7/RX deben configurarse adecuadamente para


que puedan funcionar como las líneas de transmisión y recepción
respectivamente.
25

El microcontrolador 18F4550 dispone de un generador de velocidad de


comunicación. Se trata de un temporizador cuya frecuencia es controlada
mediante un registro. El registro puede ser de 8 (SPBRG) o 16 bits (SPBRGH). El
generador de velocidad de comunicación tiene dos velocidades de funcionamiento
que pueden seleccionarse mediante el bit BGRH.

En la recepción de la USART incorpora un registro de desplazamiento


serie (RSR). Los datos entran en serie por el pin RC7/RX y son muestreados por
un bloque de lectura de bits. Una vez se han recibido todos los bits
correspondientes a un byte el valor recibido se pasa en paralelo de RSR al registro
RCREG. De esta forma el registro RSR queda listo para recibir un nuevo dato. Si
durante el proceso de recepción se produce algún error de formato o de
sobreescritura se pondrá a “1” el bit correspondiente (FERR/OERR).

La recepción de datos puede hacerse por dos métodos:


• Polling: en este caso el programa monitorea el estado del bit RCIF,
siendo este el estado “1” para poder leer el registro RCREG;
• Interrupción: cada vez que se recibe un dato, el Flag se pone a “1”,
habilitando la interrupción de recepción del canal EUSART (RCIE=1) se
producirá un interrupción y el microcontrolador saltará a la dirección
vectorizada que corresponda según se hayan configurado las
prioridades.

En la transmisión de la USART, el bloque de recepción incorpora un


registro de desplazamiento serie (TSR) que se encarga de enviar en serie por el
pin RC6/TX los bits del dato a transmitir. La lógica que el registro TSR se encarga
de enviar además de los 8 bits de datos, el Start bit y el Stop bit. La cadencia de
26

esta transmisión viene determinada por la señal de reloj producida por el


generador de velocidad de comunicación.

Para transmitir datos por el canal EUSART, se puede hacer de las


siguientes maneras:
• Polling: en este caso el programa monitorea el estado del bit TXIF, si
esta en “1” significa que TXREG esta vacío y por lo tanto podemos
escribir el siguiente dato;
• Interrupción: si se habilita la interrupción del transmisor del canal
EUSART se producirá una interrupción por cada vez que el registro
TXREG este vacío. La interrupción de transmisión del canal serie
permite por tanto detectar cuando TXREG queda libre para poder enviar
un nuevo dato. Por tanto solo se debe habilitar esta interrupción
después de haber enviado el primer dato y debe ser deshabilitada
cuando se haya transmitido el último dato.

A.4.7. Canal de comunicación MSSP

El modulo MSSP o Master Syncronous Serial Port, es una interface serial,


muy usada para comunicarse con otros periféricos o microcontroladores. Estos
dispositivos pueden ser memorias seriales EEPROM, Shift Registers, Displays,
conversores ADC.

El modulo MSSP puede operar en uno de estos dos modos:


• Serial Peripheral Interface (SPI) o interface serial para periféricos;
• Inter-Integrated Circuit (I2C):
• Modo maestro o Master;
• Modo esclavo o Slave con direcciones generales.
27

El modulo MSSP posee tres registros de control asociados, SSPSTAT y


dos registros de control SSPCON1, SSPCON2. El uso de estos registros y al
configuración individual difieren significativamente dependiendo de como va ser
usado el modulo MSSP.

En el modo SPI los 8 bits de datos son sincronizados para transmitir o


recibir simultáneamente. Los cuatro modos del SPI son:
• Salida dato serial (SDO): RC7/RX/DT/SDO;
• Entrada de dato serial (SDI): RB0/AN12/INT0/FLT0/SDI/SDA;
• Reloj serial (SCK): RB1/AN10/INT1/SCK/SCL.

El modo I2C, se explica en el punto 2.5.10.

A.4.8. Canal de Comunicación serie USB

El microcontrolador PIC 18F4550 contiene una interfaz serie compatible


con el SIE (Serial Interface Engine, máquina con comunicación serie) USB
(Universal Serial Bus), ya sean de “Full Speed” (2.0) y “Low Speed” (1.1) que
permite la comunicación rápida entre cualquier dispositivo USB y el
microcontrolador PIC.

El SIE se puede interconectar directamente al USB, utilizando el


Transmisor / Receptor interno, o puede conectarse a través de un Transmisor /
Receptor externo. El PIC tiene un regulador interno de 3,3 Volt para accionar el
Transmisor / Receptor interno en aplicaciones de 5 Volt. Ver Figura A.14.

Se ha incluido algunas características especiales en el hardware para


mejorar el funcionamiento. Se proporciona memoria de puerto dual en la memoria
28

de datos del dispositivo (RAM del USB) para tener acceso directo a la memoria
dede el núcleo del microcontrolador y desde el SIE. También se puede
proporcionar unos buffer para poder elegir libremente el final de la memoria dentro
del espacio de la RAM del USB. Existe un puerto paralelo para transmitir datos
grandes, por ejemplo datos al puerto paralelo, se ha proporcionado la ayuda de
transferencia interrumpida de volúmenes de datos grandes, por ejemplo datos
síncronos, a los Buffer de memoria externos.

Figura A.14. Periférico y opciones del puerto USB.

A.4.8.1. Estado y control del USB

Las operaciones del modulo USB se configura y controlan con tres


registros. En total hay 22 registros para manejar las transacciones del USB. Los
registros son:
• Registro de control del USB (UCON): contiene los bits necesarios para
dirigir el comportamiento del modulo durante la transferencia. El registro
29

contiene los bits que gobiernan los permisos del periférico principal del
USB, Reset de los punteros tipo Ping-pong, control del modo al
suspender y desactivación de la transferencia de paquetes;
• Registro de configuración del USB (UCFG): contiene la mayor parte de
los bits que dirigen el comportamiento del modulo USB como la
velocidad del bus, permiso de las resistencias Pull-up del PIC, permiso
del transmisor del PIC y el uso del Buffer Ping-pong;
• Registro de estado de la transferencia del USB (USTAT): cuando el SIE
publica una interrupción de transferencia completa por el USB, hay que
leer USTAT para determinar el estado de la transferencia, ya que
contiene el número de los Endpoints de la transferencia, dirección y
valor del puntero del Buffer Ping-pong;
• Registro de dirección de dispositivo USB (UADDR): contiene una única
dirección del USB que el periférico descifra cuando esta activo. Se pode
a “0” cuando recibe un Reset del USB, la dirección del USB la tiene que
escribir el microcontrolador durante la parte de Setup como parte del
Firmware de ayuda del USB;
• Registro del número del Frame (UFRMH, UFRML): contienen 11 bits del
número del Frame y estos registros son solo de lectura. El registro del
número del Frame se utiliza sobre todo para transferencias asíncronas.;
• Registro activadores de los Endpoints de 0 a 15 (UEPn).

A.4.8.2. Resistencias Pull-up

El microcontrolador PIC 18F4550 tiene unas resistencias Pull-up internas


diseñadas para conocer los requerimientos del USB “Low speed” y “Full speed”. El
bit UPUEN activa las Pull-up internas.
30

Además se pueden utilizar resistencias Pull-up externas. El pin VUSB se


puede utilizar para aumentar D+ o D-. Las resistencias Pull-up tienen que ser de
15KOhm. Ver Figura A.15.

Figura A.15. Resistencia Pull-up en circuito externo.

Es el caso de la Tarjeta de Desarrollo, es recomendable utilizar las


resistencias internas de Pull-up, por razones de comodidad y reducción de
espacio.

A.4.8.3. RAM del USB

Los datos del USB se mueven entre el núcleo del microcontrolador


y el SIE a través de una memoria conocida como USB RAM. Esta es
una memoria de puerto dual especial que está mapeada en la memoria
normal de datos en los bancos de 4 a 7 (400h a 7FFh) para un total de 1 Kbyte.

El banco 4 se utiliza específicamente en el control del buffer del Endpoint,


mientras que los bancos 5 a 7 están disponibles para los datos del USB.
Dependiendo del tipo de buffer que se utilice, los 8 bytes del banco 4 pueden estar
disponibles ara utilizarlos como Buffer del USB.
31

Aunque la RAM del USB está disponible en el microcontrolador como


memoria de datos, las secciones que esta modificando el SIE no las puede usar el
microcontrolador. Se utiliza un mecanismo de semáforo para determinar el acceso
al Buffer en un momento dado.

A.4.8.4. Interrupciones del USB

El modulo USB puede generar condiciones de interrupción múltiples. Para


acomodar todas estas fuentes de interrupción, el modulo proporciona su propia
lógica de estructura de interrupción, similar a la del microcontrolador. Las
interrupciones del USB se activan con un sistema de registro de control y
registradas con u sistema separado de Flags. Todas las fuentes se concentran en
una sola petición de interrupción del USB, USBIF.

Hay dos capas de registro de interrupción en el modulo USB, ver Figura A.


16. El nivel superior consiste en todas las interrupciones de estado del USB; estos
se permiten y señalan por medio de una Flag en los registros UIE y UIR,
respectivamente. El segundo nivel consiste en las condiciones de error del USB,
se permiten y señalan por medio de un Flag en los registros UEIR y UEIE.
Ninguna condición de interrupción en estos provoca la activación del Flag de
interrupción por error del USB (UERRIF) en el nivel superior. Las interrupciones se
pueden utilizar para detectar acontecimientos rutinarios en una transacción USB.
32

Figura A.16. Lógica embudo de la interrupción del USB.

A.4.8.5. Modos de energía del USB

Las aplicaciones USB tendrán diferentes requisitos y configuración de


energía. Entre las cuales se pueden nombrar:
• Sólo energía en el bus: es el método más simple de energía para el
dispositivo, ver Figura A.17;
• Sólo Self-power: el uso del USB proporciona su propia energía, con la
energía muy pequeña cedida por el USB, ver Figura A.18;
• Energía dual con dominancia de Self-power: algunas aplicaciones
necesitan una opción con dos energías. La aplicación utiliza la fuente
de energía interna como primaria, pero cambia a la energía del USB
cuando no se dispone de una fuente lineal, ver Figura A.19.

Figura A.17. Diagrama de sólo energía en el bus.


33

Figura A.18. Diagrama de sólo Self-power.

Figura A.19. Diagrama de energía dual con dominancia Self-power.

A.4.9. Canal de transmisión de datos en paralelo

El microcontrolador PIC 18F4550 proporciona un Puerto Paralelo


Streaming como interfaz de alta velocidad para mover datos a desde un sistema
externo. Este puerto paralelo funciona como puerto principal, completo con un
Chip-select y salida de reloj para controlar el movimiento de los datos a los
dispositivos auxiliares. Los datos se pueden dirigir directamente al SIE del USB o
al núcleo del microcontrolador, ver Figura A.20.

Además, el SPP puede proporcionar tiempo multiplexado tratando la


información junto con los datos usados segunda salida estroboscópica. Así, el
34

número del Endpoint del USB se puede escribir con juntamente con los datos en
este Endpoint.

Figura A.20. Trayectoria de datos del SPP.

La operación del SPP se controla con dos registros (SPPCON, SPPCFG).


El registro SPPCON dirige la operación total del puerto paralelo y determina si
funciona bajo el control del USB o del microcontrolador. El Registro SPPCFG
controla la configuración del tiempo y los pines de salida. Para permitir el SPP se
debe activar el bit SPPEN. Además los bits del TRIS del SPP correspondiente, los
pines se deben configurar correctamente. El SPP se diseña con la capacidad de
agregar estados de espera para las operaciones de lectura y escritura. Esto
permite el acceso paralelo a los dispositivos que requieren más tiempo para
acceder.

Registrar el estado de espera se basa en el reloj de la fuente de datos. Si


el SPP se configura para funcionar como Endpoint del USB, entonces los estados
de espera se basan en el reloj del USB. Así mismo, si el SPP se configura para
que funcionar desde el microcontrolador, entonces los estados de espera se basa
en la razón de instrucción (FOSC/4).
35

Las líneas de datos del SPP poseen resistencias Pull-up internas para
aplicaciones que puedan salir del puerto en condiciones de alta impedancia. Los
Pull-up se permiten con el bit de control, RDPU.

El SPP puede actuar como puerto paralelo del microcontrolador, el control


puede generar una interrupción para notificar la aplicación cuando termina cada
operación de lectura y escritura. El Flag de interrupción es SPPIF y se permite con
el bit SPPIE. Como el resto de prioridades de interrupciones del microcontrolador,
se puede fijar a un nivel bajo o prioritario. Esto se hace con el bit SPPIP.

A.4.10. Canal de comunicación I2C

El bus I 2 C, es un estándar que facilita la comunicación entre


microcontroladores, memorias y otros dispositivos con cierto nivel de inteligencia.
Su principal característica es que utiliza dos líneas para transmitir la información,
una para los datos y otra para la señal de reloj.

Los dispositivos conectados al bus I2C tienen una dirección única para
cada uno. También pueden ser maestro o esclavo. El dispositivo maestro inicia la
transferencia de datos y además genera la señal de reloj, pero no es necesario
que el maestro sea siempre el mismo dispositivo, esta característica se la pueden
ir pasando los dispositivos que tengan esa capacidad. Esta característica hace
que la bus I2C se le denomine bus multimaestro.

La metodología de comunicación de datos del bus I2C es en serie y


sincrónica. Una de las señales del bus marca el tiempo (pulso de reloj) y la otra se
utiliza para intercambiar datos.
36

La descripción de la señales son:


• SCL (System Clock): es la línea de los pulsos de reloj que sincronizan
el sistema;
• SDA (System Data): es la línea por la que se mueven los datos entre los
dispositivos;
• GND (masa): común de la interconexión entre todos los dispositivos
conectados al bus.

Las líneas SDA y SCL son del tipo drenaje abierto, es decir, un estado
similar al colector abierto, pero asociado a un transistor de efecto de campo o FET.
Se deben polarizar en estado alto, conectando a la alimentación por medio de
resistencias Pull-up, lo que define una estructura de bus que permite conectar en
paralelo múltiples entradas y salidas.

Figura A.21. Diagrama conexión puerto I2C.

La Figura A.21. Es suficientemente autoexplicativo. Las dos líneas del bus


están en un nivel lógico alto cuando están inactivas. En principio, el número de
dispositivos que se puede conectar al bus no tiene límites, aunque hay que
observar que la capacidad máxima sumada de todos los dispositivos no supere los
400 pF. El valor de las resistencias de Pull-up no es muy crítico, y puede ir desde
1,8 KOhm a 47KOhm. Un valor menor de resistencia incrementa el consumo de
37

los integrados pero disminuye la sensibilidad al ruido y mejora el tiempo de los


flancos de subida y bajada de las señales.

A.4.10.1. Comunicación del I2C.

El protocolo de comunicación del bus I2C, habiendo varios dispositivos


conectados sobre el bus, es lógico que para establecer una comunicación a través
de él se deba respetar un protocolo. Digamos, en primer lugar, lo más importante:
existen dispositivos Maestro y dispositivos Esclavos. Sólo los dispositivos
maestros pueden iniciar una comunicación.

La condición inicial, de bus libre, es cuando ambas señales están en


estado lógico alto. En este estado cualquier dispositivo maestro puede ocuparlo,
estableciendo la condición de Inicio (Start). Esta condición se presenta cuando un
dispositivo maestro pone en estado bajo la línea de datos (SDA), pero dejando en
alto la línea de reloj (SCL).

El primer byte que se transmite luego de la condición de inicio contiene


siete bits que componen la dirección del dispositivo que se desea seleccionar, y un
octavo bit que corresponde a la operación que se quiere realizar con él (lectura o
escritura). Ver Figura A.22.

Figura A.22. Modo de secuencia de inicio I2C.


38

Si el dispositivo cuya dirección corresponde a la que se indica en los siete


bits (A0-A6) está presente en el bus, éste contesta con un bit en bajo, ubicado
inmediatamente luego del octavo bit que ha enviado el dispositivo maestro. Este
bit de reconocimiento (ACK) en bajo le indica al dispositivo maestro que el esclavo
reconoce la solicitud y está en la condición de comunicarse. Aquí en la
comunicación se establece en firme y comienza el intercambio de información
entre los dispositivos. Ver Figura A.23.

Figura A.23. Transmisión de bits en I2C.

Si el bit de Lectura / Escritura (R/W) fue puesto en esta comunicación a


nivel lógico bajo (escritura), el dispositivo maestro envía datos al dispositivo
esclavo. Esto se mantiene mientras continúe recibiendo señales de
reconocimiento, y el contacto concluye cuando se haya transmitido todos los
datos.

En el caso contrario, cuando el bit de Lectura / Escritura estaba a nivel


lógico alto (lectura), el dispositivo maestro genera pulsos de reloj para que el
dispositivo esclavo pueda enviar los datos. Luego de cada byte recibió el
dispositivo maestro (quien está recibiendo los datos) genera un pulso de
reconocimiento. El dispositivo maestro puede dejar libre el bus generando una
condición de parada (o detención o Stop). Ver Figura A.24.
39

Figura A.24. Modo de secuencia de parada I2C.

Si se desea seguir transmitiendo, el dispositivo maestro puede generar


otra condición de inicio en lugar de una condición de parada. Esta nueva condición
de inicio se denomina Inicio Reiterado y se puede emplear para direccionar un
dispositivo esclavo diferente o para alterar el estado del bit de lectura/escritura.

En una forma más detallada, cuando el dispositivo maestro quiere


comunicarse con un esclavo, produce una secuencia de inicio en el bus. La
secuencia de inicio es una de las dos secuencias especiales que se han definido
en el bus I2C; la otra es la secuencia de parada. Las secuencias de inicio y la de
parada son especiales porque son los dos únicos casos en que se permite que la
línea de datos (SDA) cambie cuando la línea de reloj (SCL) está alta. Cuando se
están transmitiendo datos, la línea SDA debe permanecer estable, y jamás
cambiar, mientras la línea SCL está alta. Las secuencias de inicio y de parada
señalan el comienzo y el final de una transacción con los dispositivos esclavos.

Los datos se transfieren en secuencias de 8 bits. Estos bits se colocan en la


línea SDA comenzando por el bit de más peso (o más significativo). Una vez
puesto un bit en SDA, se lleva la línea SCL a alto. Debemos recordar que el chip
no puede llevar la línea a un estado alto, en realidad, lo que hace es "soltarla", y el
que la pone en nivel lógico alto es la resistencia de polarización. Por cada 8 bits
40

que se transfieren, el dispositivo que recibe el dato envía de regreso un bit de


reconocimiento, de modo que en realidad por cada byte de dato se producen 9
pulsos sobre la línea SCL (es decir, 9 pulsos de reloj por cada 8 bits de dato). Si el
dispositivo que recibe envía un bit de reconocimiento bajo, indica que ha recibido
el dato y que está listo para aceptar otro byte. Si retorna un alto, lo que indica es
que no puede recibir más datos y el dispositivo maestro debería terminar la
transferencia enviando una secuencia de parada.

A.4.10.2. Direccionamiento del bus I2C

Lo más común en los dispositivos para el bus I2C es que utilicen


direcciones de 7 bits, aunque existen dispositivos de 10 bits. Este último caso es
raro. Una dirección de 7 bits implica que se pueden poner hasta 128 dispositivos
sobre un bus I2C, ya que un número de 7 bits puede ir desde 0 a 127. Cuando se
envían las direcciones de 7 bit, de cualquier modo la transmisión es de 8 bits. El
bit extra se utiliza para informarle al dispositivo esclavo si el dispositivo maestro va
a escribir o va a leer datos desde él. Si el bit de Lectura / Escritura (R/W) es cero,
el dispositivo maestro está escribiendo en el esclavo. Si el bit es 1 el maestro está
leyendo desde el esclavo. La dirección de 7 bit se coloca en los 7 bits más
significativos del byte y el bit de Lectura / Escritura es el bit menos significativo.

El hecho de colocar la dirección de 7 bits en los 7 bits más significativos del


byte produce confusiones entre quienes comienzan a trabajar con este bus. Si, por
ejemplo, se desea escribir en la dirección 21 (hexadecimal), en realidad se debe
enviar un 42, que es un 21 desplazado un bit hacia arriba. También se pueden
tomar las direcciones del bus I2C como direcciones de 8 bit, en las que las pares
son de sólo escritura y las impares son de sólo lectura. Para dar un ejemplo, el
integrado de brújula magnética CMPS03 es fijado en fábrica en la dirección 0xC0
41

($C0). La dirección 0xC0 se utiliza para escribir en él y la dirección 0xC1 es para


leer de él.

A.4.10.3. Protocolo de programación del bus I2C

Lo primero que ocurre en un bus I2C es que el dispositivo maestro envía


una secuencia de inicio. Esto alerta a los dispositivos esclavos, poniéndolos a la
espera de una transacción. Éstos quedan atentos para ver si se trata de una
solicitud para ellos. A continuación el dispositivo maestro envía la dirección de
dispositivo. El dispositivo esclavo que posee esa dirección continuará con la
transacción, y los otros ignorarán el resto de los intercambios, esperando la
próxima secuencia de inicio.

Habiendo direccionado ya el dispositivo esclavo, lo que debe hacer ahora el


maestro es enviar la ubicación interna o número de registro desde el que desea
leer o al que va a escribir. La cantidad depende, obviamente, de qué dispositivo es
y de cuántos registros internos posee. Algunos dispositivos muy simples no tienen
ninguno, pero la mayoría sí los poseen. Siguiendo con el ejemplo del CMPS03,
éste posee 16 ubicaciones internas, numeradas desde el 0 al 15. Otro dispositivo,
el medidor ultrasónico de distancia SRF08, tiene 36 registros.

Una vez que el maestro ha enviado la dirección del dispositivo en el bus I2C
y la dirección del registro interno del dispositivo, puede enviar ahora el byte o
bytes de datos. El dispositivo maestro puede seguir enviando bytes al esclavo, que
normalmente serán puestos en registros con direcciones sucesivas, ya que el
esclavo incrementa automáticamente la dirección del registro interno después de
recibir cada byte. Cuando el maestro ha terminado de escribir datos en el esclavo,
envía una secuencia de parada que concluye la transacción.
42

Escritura en un dispositivo esclavo:


• Enviar una secuencia de inicio;
• Enviar la dirección de dispositivo con el bit de lectura/escritura en bajo;
• Enviar el número de registro interno en el que se desea escribir;
• Enviar el byte de dato;
• [Opcionalmente, enviar más bytes de dato];
• Enviar la secuencia de parada.

Como ejemplo, veamos un SRF08, que tiene una dirección de bus fijada en
fábrica de 0xE0. Para comenzar una medición de distancia con el SRF08 se debe
escribir 0x51 en el registro de comando, ubicado en la dirección interna 0x00. La
secuencia es la que sigue:
• Enviar una secuencia de inicio;
• Enviar 0xE0 (La dirección de dispositivo del SRF08 con el bit de
Lectura / Escritura en bajo);
• Enviar 0x00 (dirección interna del registro de comando);
• Enviar 0x51 (el comando para comenzar la medición del SRF08);
• Enviar la secuencia de parada.

La lectura desde un dispositivo esclavo, esta operación es algo más


complicada, pero no demasiado. Antes de leer datos desde el dispositivo esclavo,
primero se le debe informar desde cuál de sus direcciones internas se va a leer.
De manera que una lectura desde un dispositivo esclavo en realidad comienza con
una operación de escritura en él. Es igual a cuando se desea escribir en él: Se
envía la secuencia de inicio, la dirección de dispositivo con el bit de Lectura /
Escritura en bajo y el registro interno desde el que se desea leer. Ahora se envía
otra secuencia de inicio nuevamente con la dirección de dispositivo, pero esta vez
43

con el bit de Lectura / Escritura en alto. Luego se leen todos los bytes necesarios y
se termina la transacción con una secuencia de parada.

Volviendo al ejemplo del módulo de brújula CMPS03, veamos cómo se lee


el registro de ángulo:
• Enviar una secuencia de inicio;
• Enviar 0xC0 (La dirección de dispositivo del CMPS03 con el bit de
Lectura / Escritura en bajo);
• Enviar 0x01 (dirección interna del registro de ángulo en valor 0-255);
• Enviar una secuencia de inicio (inicio reiterado);
• Enviar 0xC1 (La dirección de dispositivo del CMPS03 con el bit de
lectura/escritura en alto);
• Leer un byte de dato desde el CMPS03;
• Enviar la secuencia de parada.

A.7. Reset

El microcontrolador PIC 18F4550 posee las siguientes clases de Reset:


• Reset por fallo de energía (POR);
• Reset por MCLR durante la operación normal;
• Reset de MCLR durante modos de ahorro de energía;
• Reset por el perro guardián (WDT) durante ejecución;
• Reset por cese de energía (BOR);
• Instrucción RESET;
• Reset por desbordamiento de la Pila;
• Reset por vaciado de la Pila.
44

El pin MCLR, proporciona un método para accionar un Reset externo del


dispositivo. El Reset se genera poniendo el pin a “0”. Estos dispositivos tienen un
filtro anti-ruido en la trayectoria del Reset de MCLR que detecta y no hace caso de
pulsos pequeños. El pin MCLR no se pone a cero con ningún Reset interno,
incluyendo el WDT. La entrada MCLR se puede inhabilitar con la configuración del
bit MCLRE. Cuando MCLR está desactivado, el pin se convierte en una entrada
digital. Ver Figura A.25.

Figura A.25. Diagrama simplificado del circuito Reset del PIC 18F4550.

Un Reset por subida tensión o POR, se genera en el chip cuando VDD


sube hasta un umbral. Esto provoca que el dispositivo se inicialice cuando VDD
tenga un valor adecuado. Para aprovechar del POR, conectar el pin MCLR a VDD a
través de una resistencia ( 1KOhm a 10KOhm). Esto elimina los componentes RC
externos que se necesitan para crear un retraso en el Reset por subida de tensión.
Ver Figura A.26.
45

Figura A.26. Circuito Reset externo POR.

Cuando el dispositivo comienza la operación normal, los parámetros de


funcionamiento del dispositivo se deben conocer para asegurar el correcto
funcionamiento del dispositivo.

Un Reset por BOR, el microcontrolador tiene un circuito BOR en ejecución


que provee al usuario un número de opciones de configuración y de ahorro de
energía. El BOR se controla con los bits BORV1,BORV0 y BOREN1,BOREN0.
Hay un total de cuatro configuraciones del BOR. Cualquier tensión Vdd por debajo
de VBOR durante un tiempo mayor que TBOR resetea el dispositivo. Un reset puede
o no puede ocurrir si VDD baja por debajo de VBOR durante un tiempo menor que
TBOR. El microcontrolador permanece en Reset hasta que VDD vale más que VBOR.