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 8 MHz 20 MHz
27 pF 22 pF 15 pF
27 pF 22 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 postescalar 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.