Visita mi canal de youtube

domingo, 4 de septiembre de 2016

El microcontrolador PIC18F4550 y el PIC18F2550


Configuracion de pines del PIC18f4550:



DIAGRAMA DE BLOQUES DEL PIC18F4455/4550 40/44PINES





TIPOS DE OSCILADOR
Hay que programar los bits de configuración FOSC3:FOSC0 para seleccionar un modo de estos:
• XT: XTAL/ circuito resonante.
• XTPLL: XTAL/ circuito resonante con PLL activo.
• HS: XTAL/ circuito resonante muy rápido.
• HSPLL: XTAL/ circuito resonante muy rápido con PLL activo.
• EC: Reloj externo con Fosc/4 como salida en RA6.
• ECIO: Reloj externo con RA6 como E/S.
• ECPLL: Reloj externo con Fosc/4 como salida en RA6 y PLL activo.
• ECPIO: Reloj externo con RA6 como E/S y PLL activo.
• INTHS: Oscilador interno usado como reloj del microcontrolador y HS como reloj del USB.
• INTXT: Oscilador interno usado como reloj del microcontrolador y XT como reloj del USB.
• INTIO: Oscilador interno usado como reloj del microcontrolador y EC como reloj del USB con RA6 como E/S.
• INTCKO: Oscilador interno usado como reloj del microcontrolador y EC como reloj del USB con Fosc/4 como salida en RA6.

 MODOS DEL OSILADOR Y OPERACIONES CON EL USB:
En la familia PIC18F2455/PIC18F2550/PIC18F4455/PIC18F4550 el oscilador primario forma parte del módulo USB y no se puede asociar a ninguna otra fuente de reloj.

   El módulo USB tiene que ser controlado por la fuente primaria y los otros dispositivos o el microcontrolador se pueden controlar por fuentes secundarias u osciladores internos como en el resto de microcontroladores PIC.

   Al utilizar el USB necesitamos un reloj interno de 6MHz ó 48MHz, el resto del sistema puede funcionar con cualquier otro oscilador.

XTAL/RESONADORES CERÁMICOS
   En HS, HSPLL, XT y XTPLL el XTAL o el circuito resonador se conecta a OSC1 y OSC2.
   Un postscaler interno permite elegir una frecuencia distinta a la del reloj de entrada. La división de la frecuencia se elige con el bit de configuración CPUDIV y se puede seleccionar a 1/2, 1/3 ó 1/4 de la frecuencia de entrada.
   Se puede utilizar un reloj externo cuando el microcontrolador está en modo HS.

En este caso el pin OSC2/CLK0 está abierto.


MULTIPLICADOR DE FRECUENCIA PLL
Esta familia de dispositivos incluye un circuito PLL (Paced Locked Loop). Se utiliza en aplicaciones USB con velocidad baja de oscilación y como fuente de reloj para el microcontrolador. El PLL está activo en los modos HSPLL, XTPLL, ECPLL y ECPIO. Está diseñado para producir una señal de referencia de 96MHz de una señal de entrada de 4MHz. La salida se puede dividir y utilizar para el USB y el reloj del microcontrolador porque el PLL tiene una señal de entrada y salida fijas. Tiene ocho opciones de
prescaler para elegir la frecuencia de entrada al PLL.

   Hay un postscaler para elegir la velocidad del microcontrolador, para que el USB y el microcontrolador tengan una entrada de reloj y funcionen a velocidades diferentes. El postscaler tiene las opciones de 1/2, 1/4 y 1/6 de la salida del PLL.
   
   Los modos HSPLL, ECPLL y ECPIO utilizan el modo del oscilador HS para frecuencias superiores a 48MHz. El prescaler divide la señal de entrada por 12 para producir 4MHz para el PLL. El modo XTPLL sólo utiliza la frecuencia de entrada de 4MHz que dirige el PLL directamente.

MODOS DEL OSCILADOR INTERNO
   Cuando el oscilador interno funciona como reloj del microcontrolador, uno de los otros modos debe utilizarse como reloj del USB. La elección del USB se determina dependiendo del modo de funcionamiento interno.

Hay cuatro modos distintos:
• INTHS: Da la señal el oscilador en modo HS.
• INTXT: Da la señal el oscilador en modo XT.
• INTCKO: La señal la da un oscilador externo conectado al OSC1; en el OSC2 podemos obtener Fosc/4.
• INTIO: La señal la da un oscilador externo conectado al OSC1; en el OSC2 tenemos un pin E/S (RA6).

REGISTRO OSCTUNE
   La salida interna de oscilación está calibrada de fábrica pero se puede ajustar a la aplicación del usuario. Se puede hacer escribiendo el registro OSCTUNE. La sensibilidad del ajuste es constante en todo el rango. Cuando se modifica el OSCTUNE las frecuencias INTOSC e INTRC se cambiarán a la nueva frecuencia. El reloj INTRC alcanzará la nueva frecuencia en 8 ciclos de reloj mientras que el reloj INTOSC se estabilizará en 1ms. El programa se seguirá ejecutando durante este proceso. No hay ninguna indicación de que el suceso haya concluido.
El registro OSCTUNE contiene el bit INTSRC que permite seleccionar que oscilador interno da la señal de reloj cuando la frecuencia de 31kHz está seleccionada.

 FRECUENCIA DEL OSCILADOR INTERNO Y CAMBIOS
    El oscilador interno está calibrado para dar 8MHz. Sin embargo, esta frecuencia se puede modificar cuando VDD o la temperatura cambian, puede afectar el control de una operación de muchas formas. La baja frecuencia del oscilador INTRC funciona independientemente de la fuente INTOSC. Cualquier cambio en
INTOSC por tensión o temperatura no tiene porqué reflejarse en INTRC y viceversa.

COMPENSACIÓN POR LOS CAMBIOS EN INTOSC
   Es posible ajustar la frecuencia del INTOSC modificando el registro OSCTUNE. Esto no producirá ningún cambio en la frecuencia de INTRC. El ajuste de INTOSC debe hacerse dependiendo de la aplicación. Por ejemplo, si necesitamos la EUSART, debemos ajustar la frecuencia para evitar fallos de recepción o de cuadrar los pulsos. Los errores por no cuadrar los pulsos indican que la frecuencia de reloj es muy alta, para ajustarla decrementamos el valor del OSCTUNE. Los errores en
datos puedes ocurrir porque la velocidad del reloj es muy baja, para compensarlo aumentamos el OSCTUNE.


   Es posible comparar la velocidad del reloj con un reloj de referencia. Se pueden usar dos temporizadores: un reloj externo, y el otro es un reloj de referencia como el oscilador Timer1. Ambos temporizadores se borran pero el reloj tomado como referencia genera interrupciones. Cuando ocurre una interrupción, se lee el reloj interno y los dos temporizadores borrados. Si el valor del temporizador interno es demasiado alto, el bloque del oscilador interno funciona muy deprisa. Para ajustarlo, hay que decrementar el registro OSCTUNE.


   Se puede utilizar un módulo CCP libremente en el Timer1 o el Timer3, ajustado por el bloque oscilador interno y un evento externo con un periodo conocido (por ejemplo, una corriente alterna). El periodo del primer evento se captura en los registros
CCPRxH:CCPRxL y se graba para poder utilizarlo posteriormente. Cuando ocurre un segundo evento, se resta al tiempo del segundo el del primero. Como se conoce el periodo externo, se puede calcular la diferencia entre los dos eventos. Si la medida es mucho mayor que el tiempo calculado quiere decir que el bloque del oscilador interno está funcionando demasiado rápido; para compensarlo, hay que decrementar el registro OSCTUNE. Si la medida es mucho menor que la calculada, el bloque del oscilador interno funciona muy lento; para compensarlo, aumentar el registro OSCTUNE.

MODOS DE CONTROL DE ENERGÍA
   Los dispositivos PIC18F2455/2550/4455/4550 ofrecen un total de siete modos de funcionamiento para controlar la energía. Estos modos proporcionan una variedad de opciones para la conservación selectiva en las aplicaciones donde los recursos pueden ser limitados (es decir, los dispositivos con pilas).
Hay tres categorías de modos de control de energía:
• Modo ejecución.
• Modo reposo
• Modo sleep.
   Estas categorías definen qué porciones del dispositivo se utilizan y a veces, qué velocidad. Los modos ejecución y reposo pueden utilizar cualquiera de los tres relojes disponibles (primario, secundario o bloque interno); el modo sleep no utiliza una fuente
del reloj.
   Los modos de control de energía incluyen varias características de ahorro de energía que se ofrecieron en los microcontroladores antiguos. Una es la característica de la conmutación del reloj, ofrecida en otros dispositivos PIC18, permitiendo que el
regulador utilice el oscilador Timer1 en lugar del oscilador primario. También se incluye el modo sleep, ofrecido en todos los dispositivos PICmicro, donde se paran todos los relojes del dispositivo.

SALIDA POR DESBORDAMIENTO DEL WDT
La salida por el WDT causará diversas acciones dependiendo del modo de ahorro de energía que esté activo cuando se desborde.
Si el dispositivo no está ejecutando código (en cualquier modo reposo o en el modo sleep), el desbordamiento dará lugar a una salida del modo ahorro de energía. Si el dispositivo está ejecutando código (cualquiera de los modos de ejecución), el
desbordamiento dará lugar a un reset del WDT. El contador de tiempo y el postscaler del WDT se borran una instrucción SLEEP
o CLRWDT, la pérdida de la fuente de reloj seleccionada (si se permite el monitor de reloj de seguridad) y la modificación de los bit IRCF en el OSCCON si el bloque del oscilador interno es la fuente del reloj del dispositivo.

SALIDA POR RESET
   Normalmente, el dispositivo se resetea con el contador de inicio (OST) hasta que el reloj primario esté listo. En ese momento, el bit OSTS se activa y el dispositivo comienza a ejecutar código. Si el bloque del oscilador interno es la nueva fuente del reloj, el bit IOFS se activa en lugar de otro. El retraso entre el reset hasta que comienza la ejecución de código depende de las fuentes de reloj de antes y después del reinicio y del tipo de oscilador si la nueva
fuente de reloj es el oscilador primario. La ejecución del código puede comenzar antes de que el reloj primario este listo. Si el inicio con dos velocidades o el monitor de reloj de seguridad están activos, el dispositivo puede comenzar la ejecución tan pronto como la fuente del reset haya desaparecido. La ejecución se controla con el multiplexor INTOSC conducido por bloque del oscilador interno. La ejecución la controla por el bloque del interno oscilador hasta que el reloj primario esté listo o entre en un modo de ahorro de energía antes de que el reloj primario esté listo; el reloj primario se desactiva.

RESET
Los dispositivos PIC18F2455/2550/4455/4550 distinguen entre las distintas clases de reset:
a) Reset por fallo de energía (POR)
b) Reset por MCLR* durante la operación normal
c) Reset de MCLR* durante modos ahorro de energía
d) Reset por el perro guardián (WDT) (durante ejecución)
e) Reset por cese de energía (BOR)
f) Instrucción RESET
g) Reset por desbordamiento la Pila
h) Reset por vaciado de la Pila
Esta sección discute los resets generados por MCLR*, POR y BOR y cubre la operación de los varios contadores de tiempo inicio.

RESET POR SUBIDA DE TENSIÓN (POR)
   Un reset por subida de tensión 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 aprovecharse del POR, conectar el pin MCLR* a VDD a través de una resistencia (1kΩ a 10kΩ). Esto elimina los componentes RC externos que se necesitan para crear un retraso en el reset por subida de tensión.

   Cuando el dispositivo comienza la operación normal (es decir, salir de la condición de reset), los parámetros de funcionamiento del dispositivo (tensión, frecuencia, temperatura, etc.) se deben conocer para asegurar el correcto funcionamiento del dispositivo. Si estas condiciones no se conocen, el dispositivo debe estar en reset hasta averiguarlas. Los reset POR se capturan con el bit POR (RCON<1>). El estado del bit se fija a ‘0’ siempre que ocurra un POR; no lo cambia ningún otro reset. POR no se ajusta a ‘1’ con ningún acontecimiento de hardware. Para capturar acontecimientos múltiples, el


CONTADORES DEL RESET
Los dispositivos PIC18F2455/2550/4455/4550 incorporan tres contadores de tiempo separados en el chip que ayudan a regular el proceso de puesta en marcha del reset. Su función principal es asegurarse de que el reloj del dispositivo es estable antes de que se ejecute el código. Estos contadores de tiempo son:

• Temporizador de inicio (PWRT).
• Oscilador temporizador de arranque (OST).
• Temporizador de control del PLL.

TEMPORIZADOR DE INICIO (PWRT)
El temporizador de inicio (PWRT) de los dispositivos PIC18F2455/2550/4455/4550 es un contador de 11 bits que utiliza la fuente de INTRC como entrada de reloj. Este intervalo del tiempo de 2048x32μs=65,6ms. Mientras que el PWRT está contando, el dispositivo está en reset.
El retraso depende del reloj INTRC y variará en el chip debido a la variación de la temperatura y del proceso.
El PWRT se permite borrando el bit PWRTEN.

OSCILADOR TEMPORIZADOR DE ARRANQUE (OST)
El oscilador temporizador de arranque (OST) proporciona un ciclo de 1024 oscilaciones (de la entrada OSC1) se inicia después del retraso PWRT. Esto asegura que el oscilador XTAL o el resonador haya comenzado y se haya estabilizado.
El desbordamiento de OST ocurre solamente en los modos XT, HS y HSPLL y solamente en un inicio o al salir de un modo de ahorro de energía.

ORGANIZACIÓN DE LA MEMORIA
Hay tres tipos de memoria en los PIC18:
• Memoria de programa
• RAM de datos
• EEPROM de datos
Como dispositivos de arquitectura Harvard, los buses la memoria de datos y del programa están separados; esto permite el acceso a la vez en las dos memorias. La EEPROM de datos, en la práctica, se puede utilizar como un dispositivo periférico, puesto que se maneja a través de un sistema de registros de control.

ORGANIZACIÓN DE LA MEMORIA DE PROGRAMA
   Los microcontroladores PIC18 implementan un contador de programa de 21bits que es capaz de tratar 2Mb memoria de programa. Accediendo a una localización en medio el límite superior de la memoria implementada físicamente y los 2Mb
direccionables se leerá todo ‘0’ (una instrucción NOP).
Los PIC18F2455 y los PIC18F4455 cada uno tienen 24kb de memoria flash y pueden almacenar hasta 12.288 instrucciones de palabra única. El PIC18F2550 y PIC18F4550 cada uno tienen 32kb de la memoria flash y puede almacenar hasta 16.384 instrucciones de palabra única. Los dispositivos PIC18 tienen dos vectores de interrupción. En un reset, la dirección del vector está en 0000h y los vectores de interrupción están en las direcciones 0008h y 0018h.

CONTADOR DE PROGRAMA
   El contador de programa (PC) especifica la dirección de la instrucción que se va a ejecutar. El PC es de 21bits de ancho separados en tres registros de 8bits. El byte bajo, conocido como registro PCL, es legible y escribible. El byte alto, o registro PCH,
contiene los bits<15:8> del PC; no es directamente ni legible ni escribible. Las actualizaciones del registro PCH se realizan a través del registro de PCLATH. El byte superior se llama PCU. Este registro contiene los bits<20:16> del PC; no es directamente ni legible ni escribible. Las actualizaciones del registro PCU se realizan a través del registro PCLATU.

   El contenido de PCLATH y de PCLATU se transfiere al contador de programa por cualquier operación que escriba el PCL. Semejantemente, los dos bytes superiores del contador de programa se transfieren al PCLATH y al PCLATU por cualquier
operación que lea el PCL. El PC trata bytes en la memoria del programa. Para evitar que el PC no se alinee bien con la instrucción, el bit menos significativo de PCL está fijado a un valor de ‘0’. El PC se incrementa de 2 en 2 para tratar instrucciones secuenciales en la memoria de programa. Las rutinas de salto CALL, los RCALL y GOTO escriben en el contador de
programa directamente. Con estas instrucciones, el contenido de PCLATH y PCLATU no se transfieren al contador de programa.

MEMORIA FLASH DE PROGRAMA
   La memoria flash de programa es legible, escribible y borrable, durante la operación normal sobre la gama entera de VDD.
La lectura en la memoria de programa se ejecuta de byte en byte. Al escribir en la memoria de programa se ejecuta en bloques de 32 bytes a la vez. La memoria de programa se borra en bloques de 64 bytes. No se pueden borrar grandes cantidades con el código del usuario.

   Escribir o borrar memoria de programa parará las búsquedas de instrucciones hasta que se complete la operación. No se puede acceder a la memoria de programa al escribir o borrar, por lo tanto, código no se puede ejecutar. Un contador interno de la memoria de programa termina las operaciones de escribir y borrar. No siempre se va a escribir una instrucción válida en la memoria de programa. Ejecutar una localización de la memoria de programa que no sea instrucción válida dará lugar a un NOP.

BORRADO DE MEMORIA FLASH DE PROGRAMA
   El mínimo bloque de borrado es de 32 palabras ó 64 bytes. Solamente con el uso de un programador externo, o con control ICSP, se podrán borrar bloques más grandes. No se pueden borrar palabras en la matriz flash. Cuando el micro inicia una secuencia de borrado se borra un bloque de 64 bytes de memoria de programa. Se borran los 16 bits más significativos del TBLPTR<21:6> hasta el bloque. Se ignoran los bits TBLPTR<5:0>.
El registro EECON1 ordena la operación de borrado. El bit EEPGD se debe activar para señalar la memoria flash de programa. El bit WREN se debe activar para permitir las operaciones de escritura. El bit FREE se activa para seleccionar una operación de borrado.

   Por protección, se debe utilizar la secuencia de inicio de escritura en EECON2. Se necesita una escritura larga para borrar la flash interna. Se para la ejecución de instrucciones mientras que dure el ciclo de escritura. La escritura la finalizará el contador de tiempo de programación interno.

SECUENCIA DE BORRADO DE LA MEMORIA FLASH DE
PROGRAMA
La secuencia de eventos para borrar un bloque de la memoria interna del programa es:

1. Carga el registro del puntero de tabla con la dirección de la fila que se va a borrar.
2. Activa el registro EECON1 para la operación de borrado:
• Activa el bit EEPGD para dirigirse a la memoria de programa;
• Borra el bit CFGS para tener acceso a memoria de programa;
• Activa el bit WREN para permitir la escritura;
• Activa el bit FREE para permitir el borrado.
1. Inhabilita las interrupciones.
2. Escribe 55h en EECON2.
3. Escribe 0AAh en EECON2.
4. Activa el bit WR. Esto comenzará el ciclo de borrado de la fila.
5. La CPU se parará durante el borrado (cerca de 2ms usando el contador de tiempo interno).
8. Permite las interrupciones.

MEMORIA DE DATOS EEPROM
   La EEPROM es una matriz de memoria permanente, separada de la RAM de datos y de la memoria de programa, se utiliza en almacenamientos de larga duración de los datos del programa. No está mapeada directamente en los registros de archivo o en la memoria del programa, sino que se trata indirectamente a través de los registros especiales de la función (SFRs). La EEPROM es legible y escribible durante la operación normal sobre la gama entera de VDD.
Cuatro SFRs se utilizan para leer y para escribir los datos en la EEPROM así como la memoria del programa. Son:
• EECON1
• EECON2
• EEDATA
• EEADR
   Los datos EEPROM permiten la lectura y escritura de bytes. Cuando se conecta al bloque de la memoria de datos, el EEDATA sostiene los 8bits de datos para la lectura/escritura y el registro EEADR lleva a cabo el direccionamiento de la localización de la EEPROM.
   La memoria de datos EEPROM se clasifica como muy resistente a los ciclos de escritura/borrado. Un byte escribe y automáticamente borra la localización y escribe los datos nuevos (borrar-antes-escribir). El tiempo de escritura se controla por un contador de tiempo en el chip; variará con la tensión y la temperatura así como de chip a chip.

LECTURA DE LOS DATOS DE LA MEMORIA EEPROM
   Para leer una posición de memoria de datos, el usuario debe escribir la dirección en el registro EEADR, borrar el bit EEPGD (EECON1<7>) y después activar el bit RD (EECON1<0>). Los datos están disponibles en el siguiente ciclo de instrucción; por lo
tanto, el registro EEDATA se puede leer con la instrucción siguiente. EEDATA mantendrá este valor hasta otra operación de lectura o hasta que lo escriba el usuario (durante una operación de escritura).

ESCRITURA EN LA MEMORIA DE DATOS EEPROM
   Para escribir una localización de la EEPROM, se tiene que escribir la dirección en el registro EEADR y los datos al registro EEDATA. La escritura no comenzará si no se ejecuta la secuencia: escribir 55h en EECON2, escribir 0AAh en EECON2, después activar el bit WR; para cada byte. Se recomienda que las interrupciones estén desactivadas durante esto segmento de código.

INTERRUPCIONES
   Los dispositivos PIC18F2455/2550/4455/4550 tienen fuentes múltiples de interrupción y una prioridad de interrupción que permite que cada fuente de interrupción se le asigne un nivel prioritario o un nivel bajo de prioridad. El puntero de alta prioridad está en 000008h y el puntero de interrupción de baja prioridad está en 000018h. Los acontecimientos prioritarios de interrupción pararán cualquier interrupción de prioridad baja que pueda estar en marcha.

Hay diez registros que se utilizan para controlar las operaciones de interrupción.
Estos registros son:
• RCON
• INTCON
• INTCON2
• INTCON3
• PIR1, PIR2
• PIE1, PIE2
• IPR1, IPR2
Cada fuente de interrupción tiene tres bits para controlar su operación. Las funciones de estos bits son:
• Flag para indicar que ha ocurrido una interrupción
• El bit que permite la ejecución de programa en la dirección del puntero de interrupción cuando se activa el flag
• El bit de prioridad para seleccionar alta o baja prioridad

   Las características de prioridad de las interrupciones se determinan activando el bit IPEN (RCON<7>). Cuando se permite la prioridad de las interrupciones, hay dos bits que permiten las interrupciones globalmente. Activando el bit GIEH (INTCON<7>)
se permiten todas las interrupciones que tengan el bit de prioridad activo (prioritario). Seteando el bit GIEL (INTCON<6>) permite todas las interrupciones que tengan el bit de prioridad borrado (prioridad baja). Cuando el flag de interrupción, el bit de permiso y el bit de las interrupciones globales están activos, el programa saltará inmediatamente a la dirección 000008h ó 000018h, dependiendo del bit de prioridad. Las interrupciones individuales pueden desactivarse con su correspondiente bit de permiso.

  Cuando el bit IPEN está borrado (estado por defecto), las características de prioridad de las interrupciones están desactivadas y las interrupciones son compatibles con los dispositivos de alcance medio de PICmicro®. En el modo de compatibilidad, los bits de prioridad de las interrupciones para cada fuente no tienen ningún efecto. INTCON<6> es el bit PEIE el cuál permite/inhabilita todas las fuentes periféricas de interrupción. INTCON<7> es el bit GIE que permite/inhabilita todas las fuentes de interrupción. Todas las interrupciones saltan a la dirección 000008h en modo de compatibilidad.

   Cuando se responde una interrupción, el bit de permiso de las interrupciones globales está borrado para inhabilitar las otras. Si el bit IPEN está reseteado, éste es el bit GIE. Si se utilizan los niveles de prioridad de interrupción, éste será el bit GIEH o GIEL. Las fuentes de interrupción prioritarias pueden interrumpir una interrupción de baja prioridad. Las interrupciones de prioridad bajas no se procesan mientras que las interrupciones prioritarias estén en marcha.

   La dirección de retorno se pone en la pila y el PC se carga con la dirección del puntero de interrupción (000008h ó 000018h). Una vez en la rutina de la interrupción, las fuentes de interrupción se pueden determinar interrogando los flags de interrupción.

   Los flags de interrupción se tienen que despejar por software antes de volver a permitir las interrupciones para evitar interrupciones recurrentes. La “instrucción para volver de la interrupción”, RETFIE, devuelve de la rutina de interrupción y activa el bit GIE (GIEH o GIEL si se utilizan los niveles de prioridad) que vuelve a permitir las interrupciones.

    Para los acontecimientos externos de interrupción, tales como los pines INT o la interrupción por cambio de la entrada PORTB, el estado latente de la interrupción es de tres a cuatro ciclos de instrucción. El exacto el estado latente es igual para instrucciones
de uno o dos ciclos. Los flags individuales de interrupción se activan sin importar el estado de su bit de permiso correspondiente o el bit GIE.

Nota: No utilizar la instrucción MOVFF para modificar registros de control de interrupción mientras que se permita cualquier interrupción. Al hacerlo puede provocar un comportamiento errático del microcontrolador.

INTERRUPCIONES DEL USB
   Como otros periféricos, el módulo USB es capaz de generar una amplia gama de interrupciones para muchos tipos de acontecimientos. Éstos incluyen varios tipos de acontecimientos normales de comunicación y de estado y varios niveles de errores de acontecimientos.

   Para manejar estos acontecimientos, el módulo USB se equipa con su propia lógica de interrupción. La lógica funciona de una forma similar a las interrupciones del microcontrolador, con cada fuente de interrupción tenemos un flag separado y los bits de permiso. Todos los acontecimientos se concentran en una sola interrupción del dispositivo, USBIF (PIR2<5>). A los acontecimientos individuales de interrupción del USB no se les puede asignar su propia prioridad. Esto se determinada en el nivel de prioridad de las interrupciones del dispositivo para todos los acontecimientos del USB con el bit USBIP.

REGISTROS INTCON
   Los registros INTCON son legibles y escribibles y contienen varios bits de permiso, prioridad y flags.
Nota: Se fijan los flags cuando ocurre una condición de interrupción sin importar el estado del bit de permiso correspondiente o del bit de permiso global. El usuario debe asegurarse de que el flag de la interrupción esté a cero antes de habilitar dicha interrupción.

REGISTROS PIR
   Los registros PIR contienen los flags individuales de las interrupciones periféricas. Debido al número de fuentes de interrupción periféricas hay dos registros de respuesta de las interrupciones periféricas (PIR1 y PIR2).

REGISTROS PIE
   Los registros PIE contienen los bits de permiso individual para las interrupciones periféricas. Debido al número de fuentes de interrupción periféricas, se necesitan dos registros de permiso (PIE1 y PIE2). Cuando IPEN = 0, el bit PEIE se debe activar para
no permitir ninguna de estas interrupciones.

REGISTROS IPR
   Los registros IPR contienen los bits de prioridad de las interrupciones periféricas. Debido al número de fuentes de interrupción periféricas, hay dos registros (IPR1 e IPR2). Al usar los bits de la prioridad requieren que la prioridad de la
interrupción esté permita (IPEN activado).

REGISTRO RCON
   El registro RCON contiene los flags los cuales se utilizan para determinar la causa del reset o del reinicio que ha provocado la salida de los modos de reposo o SLEEP. RCON también contiene el bit IPEN el cuál permite las prioridades de las interrupciones.

PINES DE INTERRUPCIONES INTn
 Las interrupciones externas de los pines RB0/AN12/INT0/FLT0/SDI/SDA, RB1/AN10/INT1/SCK/SCL y RB2/AN8/INT2/VMO son activas por flanco. Si el bit correspondiente INTEDGx en el registro INTCON2 se activa (= 1), la interrupción se acciona por un flanco de subida; si el bit está borrado, el disparo ocurre en el flanco de bajada. Cuando ocurre un flanco válido en el pin RBx/INTx, el flag el correspondiente se activa, INTxIF. Esta interrupción se puede inhabilitar borrando el bit INTxIE. El flag, INTxIF, debe borrarse por software antes de volver a permitir la interrupción.

   Todas las interrupciones externas (INT0, INT1 e INT2) pueden despertar al procesador de los modos de ahorro de energía si se activa el bit, INTxIE antes de entrar en ellos. Si se permiten las interrupciones globales, se activa GIE, el procesador saltará
al puntero de la interrupción después del reinicio.

   La prioridad de la interrupción para INT1 e INT2 se determina con el valor contenido en los bits de prioridad de la interrupción, el INT1IP (INTCON3<6>) y el INT2IP (INTCON3<7>). No hay un bit de prioridad asociado a la interrupción INT0. Siempre es una fuente de interrupción prioritaria.

INTERRUPCIÓN TMR0
   En el modo de 8 bits (que está por defecto), un desbordamiento en el registro TMR0 (FFh => 00h) activará el flag, TMR0IF. En modo de 16 bits, un desbordamiento en el par de registros TMR0H:TMR0L (FFFFh => 0000h) activará TMR0IF. La interrupción se puede permitir/inhabilitar activando/borrando el bit de permiso, TMR0IE (INTCON<5>). La prioridad de la interrupción para Timer0 se determina por el valor contenido en el bit de prioridad de la interrupción, TMR0IP (INTCON2<2>).

PUERTOS DE ENTRADA-SALIDA
  Dependiendo del dispositivo seleccionado y de las características permitidas, hay hasta cinco puertos disponibles. Algunos pines de los puertos de entrada-salida se multiplexan con una función alternativa de las características periféricas del dispositivo.
Generalmente cuando se activa un periférico, ese pin no se puede utilizar como pin de entrada-salida.

Cada puerto tiene tres registros para operar. Estos registros son:
• Registro TRIS (registro de la dirección de los datos)
• Registro POR (lee los niveles en los pines del dispositivo)
• Registro LAT (latch de salida)
El registro del latch de datos (LATA) es útil para leer-modificar-escribir las operaciones en el valor de los pines de entrada-salida.

REGISTROS PORTA, TRISA Y LATA
   El PORTA es un puerto bidireccional de 8bits de ancho. El registro de la dirección de los datos es TRISA. Activar el bit TRISA (=1) hará que el pin correspondiente de PORTA sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISA (=0)
hace que el pin correspondiente de PORTA sea una salida (es decir, pone el contenido del latch de salida en el pin seleccionado).
Leyendo el registro PORTA se lee el estado de los pines; escribiendo en él, se graba el latch.

   El registro del latch de datos (LATA) sólo es memoria mapeada. Las operaciones de lectura-modificación-escritura en el registro LATA lee y escribe el valor del latch de salida del PORTA.

  El pin RA4 se multiplexa con la entrada de reloj del módulo Timer0 para hacerse el pin RA4/T0CKI. El pin RA6 se multiplexa con el pin principal del oscilador; se permite como un oscilador o pin de entrada-salida al seleccionar el oscilador principal en el registro 1H de la configuración. Cuando no está utilizado como un puerto, RA6 y su TRIS asociado y los bits del LAT se leen como ‘0’. El RA4 también se multiplexa con el módulo del USB; sirve como una entrada receptora de un transmisor-receptor externo del USB. Varios pines de PORTA se multiplexan con las entradas analógicas, las entradas analógicas de VREF+ y de VREF- y la salida de referencia de la tensión del comparador. La operación de los pines RA5 y RA3:RA0 como entradas del convertidor A/D se seleccionan al borrar/activar los bits de control en el registro ADCON1 (registro de control A/D1).

Nota: En un reset por subida de tensión, RA5 y RA3:RA0 se configuran como entradas analógicas y se leen como ‘0’. RA4 se configura como entrada digital. El resto de los pines de PORTA tienen niveles de introducción de datos de TTL y drivers de salida de CMOS.

  El registro TRISA controla la dirección de los pines RA, aun cuando se están utilizando como entradas analógicas. El usuario debe asegurarse de que los bits del registro TRISA son ‘1’ al usarlos como entradas analógicas.

REGISTROS PORTB, TRISB y LATB
   El PORTB es un puerto bidireccional de 8bits de ancho. El registro de la dirección de los datos es TRISB. Activar el bit TRISB (=1) hará que el pin correspondiente de PORTB sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISB (=0) hace que el pin correspondiente de PORTB sea una salida (es decir, pone el contenido del latch de salida en el pin seleccionado).

  El registro del latch de datos (LATB) sólo es memoria mapeada. Las operaciones de lectura-modificación-escritura en el registro LATB lee y escribe el valor del latch de salida del PORTB. Cada uno de los pines de PORTB tiene un pull-up interno. Un solo bit de control puede cambiar todo el pull-up. Esto se realiza borrando el bit, RBPU* (INTCON2<7>).

El pull-up cambia automáticamente cuando el pin se configura como salida. Se inhabilita el pull-up en un reinicio.

Nota: En reinicio, RB4:RB0 se configuran como entradas analógicas por defecto y se leen como ‘0’; Se configuran los bits RB7:RB5 como entradas digitales. Programando el bit de configuración, PBADEN (CONFIG3H<1>), RB4:RB0 se configuran alternativamente como entradas digitales en POR. Cuatro de los pines de PORTB (RB7: RB4) tienen una interrupción “al cambiar”. Solamente los pines configurados como entradas pueden provocar esta interrupción. Cualquier pin RB7:RB4 configurado como salida se excluye de la interrupción “al cambiar”. Los pines se comparan con el último valor leído en el PORTB.

La interrupción se puede utilizar para despertar al dispositivo del sleep. El usuario, en la rutina del servicio de la interrupción, puede inhabilitar la interrupción de la manera siguiente:

a) Una lectura o escritura en el PORTB (excepto con la instrucción MOVFF x, PORTB). Esto terminará la condición de error de conexión.

b) Borrar el flag, RBIF. Al leer el PORTB finalizará la condición de error de conexión y permitirá que el flag, RBIF, sea borrado.

   La interrupción “por cambio” se recomienda para despertar el dispositivo cuando se presiona una tecla y operaciones en las que el PORTB se utiliza solamente por su interrupción. No es recomendable interrogar el PORTB cuando estamos usando
la interrupción “por cambio”.

   Los pines, RB2 y RB3, se multiplexan con el USB y sirven como las salidas para un transmisor-receptor externo USB (configuración TRIS). RB4 se multiplexa con CSSPP, el chip selecciona funcionar con puerto paralelo (SPP) ajustando el TRIS.

REGISTROS PORTC, TRISC Y LATC
El PORTC es un puerto bidireccional de 7bits de ancho. El registro de la dirección de los datos es TRISC. Activar el bit TRISC (=1) hará que el pin correspondiente de PORTC sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISC (=0) hace que el pin correspondiente de PORTC sea una salida (es decir, pone el contenido del latch de salida en el pin seleccionado).

   En los dispositivos PIC18F2455/2550/4455/4550, el pin RC3 no está implementado. El registro del latch de datos (LATC) sólo es memoria mapeada. Las operaciones de lectura-modificación-escritura en el registro LATC lee y escribe el valor del latch de salida del PORTC. PORTC se multiplexa sobre todo con los módulos de comunicación serie, incluyendo el EUSART, el módulo MSSP y el módulo USB. A excepción de RC4 y RC5, el PORTC utiliza buffer de disparo de entrada Schmitt. Los pines RC4 y RC5 se multiplexan con el módulo USB. Dependiendo de la configuración del módulo, pueden servir como las líneas de datos diferenciales para el transmisor-receptor del USB del chip, o las entradas de datos del transmisor-receptor del USB externo. RC4 y RC5, el PORTC tiene buffer de entrada TTL en lugar de los buffer Schmitt de los otros pines.

   RC4 y RC5 no tienen bits de TRISC asociados a ellos. Como puertos digitales, sólo pueden funcionar como entradas digitales. Cuando se configura para operaciones con USB, la dirección de los datos se determina por la configuración y el estado del módulo USB en ese momento. Si se utiliza un transmisor-receptor externo, siempre funcionarán RC4 y RC5 como entradas del transmisor-receptor. Si se utiliza el transmisor-receptor del chip, la dirección de los datos se determina por la operación que se realiza por el módulo en el momento. Cuando se permite el transmisor-receptor externo, RC2 sirve como la salida de control del transmisor-receptor.

   Al permitir funciones periféricas en los pines de PORTC con excepción de RC4 y de RC5, hay que tener cuidado al definir los bits de TRIS. Algunos periféricos eliminan el bit TRIS para configurar un pin como salida, mientras que otros periféricos activan el bit TRIS para configurar un pin como entrada.

Nota: En un reset por subida de tensión, estos pines, excepto RC4 y RC5, se configuran como entradas digitales. Para utilizar los pines RC4 y RC5 como entradas digital, el módulo USB debe desactivarse (UCON<3>=0) y en el chip el transmisorreceptor
del USB debe desactivarse también (UCFG<3>=1). El contenido del registro de TRISC afectado por el periférico se elimina. La
lectura de TRISC siempre devuelve el contenido actual, aun cuando un dispositivo periférico puede eliminar uno o más pines.

REGISTROS PORTD, TRISD Y LATD
Nota: El PORTD solamente está disponible en dispositivos de 40/44pines. El PORTD es un puerto bidireccional de 8bits de ancho. El registro de la dirección de los datos es TRISD. Activar el bit TRISD (=1) hará que el pin correspondiente de PORTD sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISD (=0)
hace que el pin correspondiente de PORTD sea una salida (es decir, pone el contenido del latch de salida en el pin seleccionado).

   El registro del latch de datos (LATD) sólo es memoria mapeada. Las operaciones de lectura-modificación-escritura en el registro LATD lee y escribe el valor del latch de salida del PORTD.
Todos los pines del PORTD están implementados con buffer de entrada de disparadores Shmitt. Cada pin se puede configurar independientemente como entrada o salida.

   Cada uno de los pines de PORTD tiene un pull-up interno. Un solo bit de control puede cambiar todo el pull-up. Esto se realiza borrando el bit, RDPU (PORTE<7>). El pull-up cambia automáticamente cuando el pin se configura como salida. Se inhabilita el pull-up en un reinicio.

  Tres de los pines de PORTD se multiplexan con salidas, P1B, P1C y P1D, del módulo CCP.

Nota: En un reset por subida de tensión estos pines se configuran como entrada de datos digital. El PORTD también se puede configurar como un puerto paralelo (SPP) de 8bits de ancho. En este modo, los Buffers de entrada son TTL.

Nota: Cuando se utiliza el modo PWM mejorado con salidas dobles o cuádruples, las funciones del MSSP en el PORTD se desactivan automáticamente.

REGISTROS PORTE, TRISE Y LATE
   Dependiendo del PIC18F2455/2550/4455/4550 seleccionado, el PORTE se pone en ejecución en dos maneras diferentes.
Para los dispositivos 40/44pines, el PORTE es un puerto de 4bits de ancho. Tres pines (RE0/AN5/CK1SPP, RE1/AN6/CK2SPP y RE2/AN7/OESPP) se configuran individualmente como entradas o salidas. Estos pines tienen buffer de entrada tipo disparador Shmitt. Cuando se seleccionan como entrada analógica, éstos pines se leerán como ‘0’s.

  El registro de dirección de los datos es TRISE. Activar el bit TRISE (=1) hará que el pin correspondiente de PORTE sea una entrada (es decir, pone el conductor correspondiente de la salida en un modo alta impedancia). Borrar un bit de TRISE (=0) hace que el pin correspondiente de PORTE sea una salida (es decir, pone el contenido del latch de salida en el pin seleccionado).

   Además de los datos del puerto, el registro PORTE también contiene el bit de control RDPU (PORTE<7>); esto permite o inhabilita el pull-up del PORTD. TRISE controla la dirección de los pines RE, incluso cuando se utilizan como entradas analógicas. El usuario debe cerciorarse de mantener los pines configurados como entradas cuando use las analógicas.

Nota: En un reset por subida de tensión, RE2:RE0 se configuran como entradas analógicas.

   El registro del latch de datos (LATE) sólo es memoria mapeada. Las operaciones de lectura-modificación-escritura en el registro LATE lee y escribe el valor del latch de salida del PORTE.
El cuarto pin PORTE (MCLR*/VPP/RE3) sólo es un pin de entrada. Su operación se controlada con el bit de configuración MCLRE. Cuando se selecciona como puerto (MCLRE = 0), funciona como una entrada digital; como tal, no tiene bits TRIS o LAT asociados. Si no, funciona como entrada Master Clear del dispositivo. En cualquier configuración, RE3 también funciona como entrada de tensión de programación.

Nota: En un reset de subida de tensión, se activa RE3 como una entrada digital solamente si la función de Master Clear está desactivada.

MÓDULO TIMER0
El módulo Timer0 incorpora las siguientes características:
• Contador de 8bits ó 16bits seleccionable por software
• Registros legibles y escribibles
• 8 bits dedicados al prescaler programable por software
• Fuente de reloj (interno o externo) seleccionable
• Flanco seleccionable del reloj externo
• Interrupción por desbordamiento
  El registro de T0CON controla todos aspectos de operación del módulo, incluyendo selección del prescaler. Es legible y escribible.

OPERACIONES DEL TIMER0
   Timer0 puede funcionar como un temporizador o contador; el modo se selecciona borrando el bit T0CS (T0CON<5>). En modo temporizador, el módulo se incrementa en cada pulso del reloj a menos que se seleccione un prescaler. Si el registro TMR0 se escribe, se inhibe el incremento en los dos ciclos siguientes de la instrucción.
  El usuario puede trabajar con esto escribiendo un valor al registro TMR0. El modo contador se selecciona activando el bit T0CS (=1). En este modo, el Timer0 se incrementa en cualquier flanco de subida o de bajada del pin RA4/T0CKI. El flanco se determina por el pin T0SE (T0CON<4>); borrando este bit se selecciona el flanco de subida.

  Se puede utilizar una fuente de reloj externa para controlar el Timer0; sin embargo, debe cumplir ciertos requisitos para asegurarse que el reloj externo se sincronice con reloj interno de fase (TOSC). Hay un retraso en la sincronización y el inicio del incremento del temporizador/contador.

PRESCALER
   Estos micros disponen de un contador de 8bit como prescaler para el módulo Timer0. El prescaler no se puede leer o escribir directamente; su valor se fija con los bits PSA y T0PS2:T0PS0 (T0CON<3: 0>), los cuáles determinan el divisor del prescaler y la asignación del prescaler.

   Borrar el bit PSA asigna el prescaler al Módulo Timer0. Cuando se activa, los valores del prescaler van de 1:2 a 1:256, con incrementos de potencias de 2. Cuando está activo el módulo Timer0, todas las instrucciones que escriben en él (ej., CLRF TMR0, MOVWF, TMR0, BSF TMR0, etc.) se borra el prescaler.
Nota: Al escribir el TMR0 cuando el prescaler está asignado al Timer0 lo despejará pero no cambiará su asignación.

INTERRUPCIÓN TIMER0
    Se genera la interrupción TMR0 cuando se desborda de FFh a 00h en modo de 8 bits, o de FFFFh a 0000h en modo de 16 bits. Este desbordamiento activa el flag TMR0IF. La interrupción se puede enmascarar al borrar el bit TMR0IE (INTCON<5>).

  Antes de volver a permitir la interrupción, el bit TMR0IF debe borrarse por software en la rutina de la interrupción. Como el Timer0 se desconecta en el modo sleep, su interrupción no puede despertar el dispositivo.

MÓDULO TIMER1
El módulo temporizador/contador Timer1 incorpora las siguientes
características:
• Temporizador/contador de 16bits seleccionable por software.
• Registros legibles y escribibles de 8 bits (TMR1H y TMR1L)
• Fuente seleccionable de reloj (interna o externa) con opciones del reloj o del oscilador interno Timer1 del dispositivo
• Interrupción por desbordamiento
• El módulo reset en un evento especial de disparo del CCP
• Flag de estado del reloj del dispositivo (T1RUN)
El módulo incorpora su propio oscilador de baja potencia para proporcionar una opción de registro adicional. El oscilador Timer1 se puede utilizar como fuente de baja potencia de reloj para el microcontrolador en las operaciones de ahorro de energía.

   El Timer1 se puede utilizar para proporcionar la funcionalidad del reloj en tiempo real (RTC) en las aplicaciones con un mínimo de componentes externos y de código.

   El Timer1 se controla con el registro T1CON. También contiene el bit de permiso del oscilador Timer1 (T1OSCEN). El Timer1 puede permitirse o inhabilitarse activando o borrando el bit de control, TMR1ON (T1CON<0>).

OPERACIONES DEL TIMER1
Timer1 puede funcionar en uno de estos modos:
• Temporizador
• Contador síncrono
• Contador asincrónico
El modo de funcionamiento se determina con el bit de selección TMR1CS (T1CON<1>). Cuando se borra TMR1CS (=0), incrementos del Timer1 en cada instrucción interna (FOSC/4). Cuando se activa el bit, los incrementos Timer1 en cada
flanco de subida de la entrada del reloj externa Timer1 o del oscilador Timer1, si está activo.

   Cuando se permite el Timer1, los pines RC1/T1OSI/UOE y
RC0/T1OSO/T13CKI se convierten en entradas. Esto significa que se ignoran los valores de TRISC<1:0> y los pines se leen como ‘0’.

INTERRUPCIÓN TIMER1
   El par de registros TMR1 (TMR1H:TMR1L) incrementan de 0000h a FFFFh y vuelve a 0000h. La interrupción Timer1, si está permitida, se genera en el desbordamiento que activa el flag de la interrupción, TMR1IF (PIR1<0>). Esta interrupción se puede permitir o inhabilitar activando o borrando el bit, TMR1IE (PIE1<0>).

USAR TIMER1 COMO RELOJ DE TIEMPO REAL (RTC)
   Añadiendo un oscilador externo al Timer1 da a los usuarios la opción de incluir  aplicaciones en tiempo real. Esto se logra con un cristal de reloj para proporcionar una frecuencia exacta de base y varias líneas de código de la aplicación para calcular el tiempo. Al funcionar en modo sleep y con batería o súper condensador como fuente de energía, puede eliminar la necesidad de un RTC separado y una batería de reserva.

  La rutina del código, RTCisr, demuestra un método simple para incrementar un contador en intervalos de un segundo usando una rutina de interrupción. Incrementando el par de registros TMR1 para desbordarlo y provocar la llamada de la interrupción, que incrementa el segundo contador en uno. Los contadores adicionales para minutos y horas se incrementan al desbordar el contador anterior.

   Puesto que el par del registro es de 16 bits de ancho, contando hasta que se desborde el registro directamente con un reloj de 32,768kHz tardaría 2s. Para forzar el desbordamiento en intervalos de un segundo, es necesario cargar el temporizador. El método más simple es fijar el MSb TMR1H con una instrucción BSF. Observar que el registro TMR1L nunca se carga o se altera; el hacerlo, puede introducir un error acumulativo sobre muchos ciclos.

   Para que este método sea exacto, el Timer1 debe funcionar en modo asíncrono y la interrupción del desbordamiento Timer1 debe estar permitida (PIE1<0>=1) según las indicaciones de rutina, RTCinit. El oscilador Timer1 tiene que estar permitido y funcionando siempre.

MÓDULO TIMER2
El temporizador Timer2 incorpora las siguientes características:
• Registros temporizador y período de 8bit (TMR2 y PR2,
respectivamente)
• Legible y escribible (ambos registros)
• Prescaler programable por software (1: 1, 1:4 y 1:16)
• Postscaler programable por software (1: 1 a 1:16)
• Interrupción en TMR2 unida al PR2
• Uso opcional como reloj del cambio para el módulo MSSP
El módulo se controla a través del registro T2CON que permite o inhabilita el temporizador y configura el prescaler y el postscaler. El Timer2 se puede apagar borrando el bit de control, TMR2ON (T2CON<2>), para reducir al mínimo el consumo de energía.

OPERACIONES DEL TIMER2
   En una operación normal, TMR2 se incrementa de 00h en cada pulso del reloj (FOSC/4). Un contador/prescaler de 2bits en la entrada de reloj da la entrada directa, con las opciones de prescaler divisor por 4 y divisor por 16. Éstos se eligen con los bits, T2CKPS1:T2CKPS0 (T2CON<1:0>). El valor de TMR2 se compara al del registro del período, PR2, en cada ciclo de reloj. Cuando los dos valores son iguales, el comparador genera una señal de sincronismo como temporizador de salida. Esta señal también resetea el valor de TMR2 a 00h en el ciclo siguiente y controla el contador/postscaler de salida.

Los registros TMR2 y PR2 son directamente legibles y escribibles. El registro TMR2 se borra en cualquier reset del dispositivo, mientras que el registro PR2 se inicializa en FFh. Los contadores del prescaler y del postscaler se borran con los siguientes acontecimientos:

• Al escribir en el registro TMR2
• Al escribir en el registro T2CON
• Cualquier reset del dispositivo El TMR2 no se borra cuando se escribe el T2CON.

INTERRUPCIÓN TIMER2
  Timer2 puede generar una interrupción opcional en el dispositivo. La señal de salida Timer2 (TMR2 unida con PR2) proporciona la entrada para el contador/postscaler de salida de 4 bits. Este contador genera el flag de interrupción del TMR2 que está en TMR2IF (PIR1<1>). La interrupción se permite activando el bit de la interrupción, TMR2IE (PIE1<1>). Una gama de 16 postscaler (de 1:1 a 1:16 inclusivo) puede seleccionarse con los bits de control, T2OUTPS3:T2OUTPS0 (T2CON<6:3>).

SALIDA DEL TMR2
La salida sin escala del TMR2 está disponible sobre todo para los módulos de CCP, donde se utiliza como base de tiempos de operaciones en modo PWM. El Timer2 se puede utilizar opcionalmente como fuente del reloj para el módulo MSSP que funciona en modo SPI.

MÓDULO TIMER3
El módulo Timer3 temporizador/contador incorpora las siguientes
características:
• Temporizador de 16bits o contador seleccionable por software
• Registros legibles y escribibles de 8bits (TMR3H y TMR3L)
• Fuente seleccionable de reloj (interna o externa) con opciones internas del reloj o del oscilador Timer1
• Interrupción del dispositivo al desbordarse
• El módulo de reset en un disparo especial del CCP
  El módulo Timer3 es controlado con el registro T3CON. También selecciona la fuente del reloj opciones para los módulos de CCP.

OPERACIONES DEL TIMER3
El Timer3 puede funcionar en uno de estos modos:
• Temporizador
• Contador síncrono
• Contador asincrónico
   El modo de funcionamiento se determina con el bit, TMR3CS (T3CON<1>). Cuando TMR3CS está borrado (=0), el Timer3 incrementa en cada instrucción interna ciclo (FOSC/4). Cuando se activa el bit, los incrementos de Timer3 en cada flanco de subida de la entrada de reloj externa Timer1 o el oscilador Timer1, si está permitido. Como el Timer1, los pines RC1/T1OSI/UOE RC0/T1OSO/T13CKI se convierten en entradas cuando el oscilador Timer1 se permite. Esto significa se ignoran los valores de TRISC<1:0> y los pines se leen ‘0’.

MODO DE LECTURA/GRABACIÓN DE 16BIT
  Timer3 se puede configurar para que lea y escriba 16bits. Cuando el bit RD16 (T3CON<7>) se activa, la dirección del TMR3H se mapea con un registro de almacenamiento intermedio con el byte alto de Timer3. Al leer TMR3L cargará el contenido del byte alto de Timer3 en el byte alto del registro de almacenamiento intermedio. Esto proporciona al usuario la capacidad de leer los 16 bits sin tener que determinar si es el byte alto, seguido por el byte bajo, las lecturas redundantes provocan
que sea inválido.

  Al escribir el byte alto del Timer3 debe pasar a través del registro de almacenamiento intermedio de TMR3H. El byte alto del Timer3 se actualiza con el contenido de TMR3H cuando se escribe el TMR3L. Esto permite que el usuario escriba los 16 bits a los bytes altos y bajos de Timer3 inmediatamente.

  No se puede leer o escribir el byte alto de Timer3 directamente en este modo. Toda lectura y escritura debe hacerse a través del registro de almacenamiento intermedio. Al escribir el TMR3H no se borra el prescaler del Timer3. El prescaler se borra solamente escribiendo el TMR3L.

INTERRUPCIÓN TIMER3
  El par de registros TMR3 (TMR3H:TMR3L) incrementa de 0000h a FFFFh y se desborda a 0000h. La interrupción Timer3, si está permitida, se genera en el desbordamiento y activa en el flag de interrupción, TMR3IF (PIR2<1>). Esta interrupción puede permitirse o inhabilitarse activando o borrando el bit de interrupción del Timer3, TMR3IE (PIE2<1>).

MÓDULOS CAPTURA/COMPARACIÓN/PWM (CCP)
  Los dispositivos PIC18F2455/2550/4455/4550 tienen dos módulos CCP (Captura/Comparación/PWM). Cada módulo contiene un registro de 16 bits, que puede funcionar como registro de captura de 16bit, registro de comparación de 16bit o un registro PWM maestro/esclavo.

   En dispositivos de 28pines, los dos módulos estándares CCP (CCP1 y CCP2) funcionan según lo descrito en este capítulo. En los dispositivos 40/44pines, CCP1 se implementa como módulo CCP mejorado, con los modos de captura y comparación estándar y PWM mejorado. Las operaciones captura y comparación descritas en este capítulo se aplican a los módulos CCP estándares y al mejorado.

CONFIGURACIÓN DEL MÓDULO CCP
  A cada módulo Captura/Comparación/PWM se le asocia un registro de control (genéricamente, CCPxCON) y registro de datos (CCPRx). El registro de datos, alternadamente, abarca dos registros de 8bit: CCPRxL (byte bajo) y CCPRxH (byte alto). Todos los registros son legibles y escribibles.

RECURSOS DE LOS MÓDULOS CCP Y DEL TEMPORIZADOR
  Los módulos CCP utilizan los temporizadores 1, 2 ó 3, dependiendo del modo seleccionado. Timer1 y Timer3 están disponibles en los módulos de los modos captura o comparación, mientras que Timer2 está disponible para los módulos en modo PWM.

  La asignación de un temporizador particular a un módulo se determina con el bit de permiso del temporizador a CCP del registro T3CON. Ambos módulos pueden activarse en cualquier momento y pueden compartir el mismo recurso del temporizador
si se configuran para funcionar en el mismo modo (la captura/comparación o PWM) al mismo tiempo. La captura no estará disponible con el Timer1 en modo asíncrono.

CCP2 ASIGNACIÓN DE PIN
   La asignación de pines para el CCP2 (la entrada de captura, salida de comparación y PWM) puede cambiar, basado en la configuración del dispositivo. El bit de configuración CCP2Mx determina qué pin CCP2 se multiplexa. Por defecto, está asignado a RC1 (CCP2Mx=1). Si el bit de configuración se borra, CCP2 se multiplexa con RB3. Cambiar la asignación del CCP2 no cambia automáticamente los requisitos del puerto del pin. Los usuarios deben verificar siempre que el registro TRIS se configura correctamente con la operación CCP2, sin importar donde se localiza.

MODO CAPTURA
  En el modo captura, el par de registros CCPRxH:CCPRxL capturan el valor del 16bits del TMR1 o del TMR3 cuando ocurre un acontecimiento en el pin correspondiente CCPx. Un acontecimiento se define como:
• cada flanco de bajada
• cada flanco de subida
• cada 4º flanco de subida
• cada 16º flanco de subida
  El acontecimiento se selecciona con los bits de selección del modo, CCPxM3:CCPxM0 (CCPxCON<3:0>). Cuando se hace una captura, el flag de petición de la interrupción, CCPxIF, se activa; se debe borrar por software. Si ocurre otra captura antes de que el valor en el registro CCPRx se lea, el valor anterior capturado se sobrescribe con el valor nuevo.

CONFIGURACIÓN DEL PIN CCP
En el modo captura, el pin apropiado CCPx debe configurarse como entrada activando el bit correspondiente del TRIS.
Nota: Si se configura RB3/CCP2 o RC1/CCP2 como salida, al escribir en el puerto puede causar una condición de captura.

SELECCIÓN DE MODO TIMER1/TIMER3
  Los temporizadores que se deben utilizar con la característica de captura (Timer1 y/o Timer3) deben funcionar en modo temporizador o modo contador síncrono.
  En el modo contador asíncrono, la captura no funcionará. El temporizador que se utilice con cada módulo CCP se selecciona en el registro T3CON.

INTERRUPCIÓN POR SOFTWARE
Cuando se cambia el modo captura, se puede generar una interrupción falsa de captura. El usuario debe mantener el bit de permiso de interrupción CCPxIE borrado para evitar falsas interrupciones. El flag de interrupción, CCPxIF, tiene que borrarse después de cualquier modo de funcionamiento.

CCP PRESCALER
   Hay cuatro ajustes del prescaler en el modo captura. Se especifican como parte del modo de funcionamiento seleccionado por los bits selectores del modo (CCPxM3:CCPxM0). Siempre que el módulo CCP se apague o el modo captura se desactiva, el contador del prescaler se borra. Esto significa que cualquier reset borrará el contador del prescaler.

   El cambio de un prescaler de captura a otro puede generar una interrupción. También, el contador del prescaler no se borra, por lo tanto, la primera captura puede
ser de un prescaler diferente a cero.

MODO COMPARACIÓN
En el modo comparación, el valor del registro CCPRx de 16 bits se compara constantemente con el valor del par de registros de TMR1 o de TMR3. Cuando se igualan, el pin de CCPx:
• Se pone en alto
• Se pone en bajo
• flip-flop (alto-a-bajo o bajo-a-alto)
• sin cambiar (es decir, refleja el estado del latch de la E/S)
La acción del pin se basa en el valor del modo seleccionado con los bits (CCPxM3:CCPxM0). Al mismo tiempo, se fija el flag de interrupción, CCPxIF.

TIPO DE CONEXIÓN CCP
El usuario debe configurar el pin CCPx como salida borrando el bit apropiado del TRIS.

Nota: Borrar el registro CCP2CON forzará el latch de comparación de salida de RB3 o RC1 (dependiendo de la configuración del dispositivo) a nivel bajo por defecto. Éste no es el PORTB o el latch de E/S de PORTC.

SELECCIÓN DE MODO TIMER1/TIMER3
  Timer1 y/o Timer3 deben funcionar en modo temporizador, o modo contador síncrono, si el módulo CCP usa la característica de comparación. En modo contador asíncrono, no funciona la comparación.

MODO PWM
  En modo de modulación del ancho del pulso (PWM), el pin CCPx produce una salida PWM de hasta 10bits de resolución. Como el pin CCP2 se multiplexa con el PORTB o el latch del PORTC, el bit apropiado de TRIS tiene que borrarse para configurar el pin CCP2 como salida.

Nota: Borrar el registro CCP2CON forzará el latch de comparación de salida de RB3 o RC1 (dependiendo de la configuración del dispositivo) a nivel bajo por defecto. Éste no es el PORTB o el latch de E/S de PORTC. Una salida PWM tiene un tiempo base (periodo) y un tiempo en el que la salida permanece en nivel alto (Duty cicle). La frecuencia del PWM es la inversa del periodo.

DUTY CICLE PWM
   El ciclo trabajo de PWM se especifica escribiendo en el registro CCPRxL y los bits CCPxCON<5:4>. Tiene una resolución de 10bits. El CCPRxL contiene los ocho MSbs y los bits CCPxCON<5:4> los dos LSbs. Este valor de 10bits se representa con CCPRxL:CCPxCON<5:4>.

CONFIGURACIÓN DEL PWM
Hay que seguir los siguientes pasos para configurar el PWM:
3. Fijar el período de PWM escribiendo el registro PR2.
4. Fijar el ciclo trabajo de PWM escribiendo el registro CCPRxL y los bits
CCPxCON<5:4>.
5. Configurar el pin CCPx como salida borrando el bit del TRIS.
6. Fijar el valor del prescaler TMR2, después permitir el Timer2
escribiendo el T2CON.
7. Configurar el módulo CCPx para la operación PWM.

MÓDULO MEJORADO DE
CAPTURA/COMPARACIÓN/PWM (ECCP)
Nota: El módulo de ECCP se implementa en los dispositivos de 40/44pines. En los dispositivos PIC18F4455/4550, CCP1 se implementa como módulo estándar CCP con capacidades mejoradas de PWM. Incluyen la disposición para 2 ó 4 canales de salida, la polaridad seleccionable por el usuario, el control de banda-muerta y la parada automática y el reinicio. La captura, comparación y las funciones de salida simple de PWM del módulo ECCP son iguales al módulo estándar CCP. El registro de control para el módulo mejorado diferencia de los registros CCPxCON de los dispositivos PIC18F2255/2550 en que los dos bits más significativos están implementados para controlar el PWM.

  Además de la gama mejorada de los modos disponibles a través del registro de CCP1CON, el módulo ECCP tiene dos registros adicionales asociados a las características de las operaciones mejoradas y de la auto-parada de PWM. Son:
• ECCP1AS (configuración de la banda-muerta)
• ECCP1DEL (Configuración de la auto-parada)

SALIDAS Y CONFIGURACIÓN DE ECCP
  El módulo mejorado de CCP puede tener hasta cuatro salidas PWM, dependiendo del modo de funcionamiento seleccionado. Estas salidas, señaladas P1A a P1D, se multiplexan con los pines de entrada-salida de PORTC y PORTD. Las salidas activas dependen del modo de funcionamiento del CCP seleccionado.
Para configurar los pines de entrada-salida como salidas PWM, se debe seleccionar el modo apropiado PWM activando los bits P1M1:P1M0 y CCP1M3:CCP1M0. Se tienen que activar los bits apropiados de TRISC y de TRISD para configurarlos como salidas.

RECURSOS DEL TEMPORIZADOR Y MÓDULO ECCP
Como los módulos estándar CCP, el módulo ECCP puede utilizar los temporizadores 1, 2 ó 3, dependiendo del modo seleccionado. Timer1 y Timer3 están disponibles para los modos captura o comparación, mientras que Timer2 está disponible para el modo PWM. Las interacciones entre el estándar y los módulos mejorados CCP son idénticas a las descritas para los módulos estándares CCP.

EL MODO PWM MEJORADO
  El modo PWM mejorado proporciona opciones adicionales de salida PWM para ampliar las aplicaciones de control. El módulo es una versión compatible del módulo estándar CCP y ofrece hasta cuatro salidas, señaladas de P1A a P1D. Los usuarios pueden seleccionar la polaridad de la señal (activo-alto o activo-bajo). El modo y la polaridad de la salida del módulo se configuran determinando los bits P1M1:P1M0 y CCP1M3:CCP1M0 del registro CCP1CON.

  Todos los registros de control tienen un doble buffer y se cargan al principio de un nuevo ciclo de PWM (el límite del período cuando se resetea Timer2) para prevenir interferencias en las salidas. La excepción es el registro de retraso “banda-muerta” PWM, ECCP1DEL, que se carga en el límite del duty cicle o en el límite del período (el que llegue primero). Debido al buffer, el módulo espera hasta los resets asignados del temporizador en vez de comenzar inmediatamente. Esto significa que las formas de onda de PWM mejorado no son exactamente las formas de onda estándares PWM, pero se compensa con un ciclo completo de la instrucción (4TOSC). Como antes, el usuario debe configurar manualmente los bits apropiados de TRIS como salida.

El MODO HALF-BRIDGE
  En el modo de salida half-bridge, dos pines se utilizan como salidas para controlar cargas en dos sentidos. La señal de salida PWM sale por el pin P1A, mientras que la señal de salida complementaria sale por el pin P1B. Este modo se puede utilizar
para aplicaciones de half-bridge, o en aplicaciones full-bridge donde cuatro interruptores se modulan con dos señales PWM.
En modo de salida half-bridge, el retraso programable banda-muerta se puede utilizar para prevenir los picos de corriente. El valor de los bits PDC6:PDC0 determinan el número de ciclos de la instrucción antes de que la salida se active. Si el valor es mayor que el ciclo de trabajo, la salida correspondiente no se activa durante el ciclo entero.

Como las salidas P1A y P1B se multiplexan con los latch PORTC<2> y PORTD<5>, los bits TRISC<2> y TRISD<5> se tienen que borrar para configurar P1A y P1B como salidas.

MODO FULL-BRIDGE
  En la salida del modo Full-Bridge, los cuatro pines se utilizan como salidas; con dos entradas activas a la vez. En el modo directo, el pin P1A está activo y el pin P1D modula. En el modo inverso, el pin P1C está activo y el pin P1B modula.
Las salidas P1A, P1B, P1C y P1D se multiplexan con los latchs de datos PORTC<2>, PORTD<5>, PORTD<6> y PORTD<7>. Los bits TRISC<2>, TRISD<5>, TRISD<6> y TRISD<7> deben borrarse para configurar los pines como salidas.

PASOS PARA CONFIGURAR EL PWM
Hay que tomar los siguientes pasos para configurar el módulo ECCP en el modo PWM:

1. Configurar los pines de PWM, P1A y P1B (y P1C y P1D, si se utilizan), como entradas activando los bits correspondientes de TRIS.
2. Fijar el período de PWM cargando el registro PR2.
3. Si se requiere el Auto-apagado:
• Inhabilita el Auto-apagado (ECCPASE = 0)
• Configurar la fuente (FLT0, comparador 1 o comparador 2)
• Esperar una condición de no apagado
4. Configurar el módulo ECCP con el modo PWM deseado y configurar el registro CCP1CON cargando los valores apropiados:
• Seleccionar una de las configuraciones y de las direcciones disponibles de salida con los bits P1M1:P1M0.
• Seleccionar las polaridades de las señales de salida de PWM con los bits CCP1M3:CCP1M0.
5. Fijar el ciclo de trabajo de PWM cargando el registro CCPR1L y los bits CCP1CON<5:4>.
6. Para el modo de salida Half-Bridge, fijar el retraso “banda-muerta” cargando el valor apropiado en ECCP1DEL<6:0>.
7. Si se necesita el auto-apagado, cargar el registro ECCP1AS:
• Seleccionar las fuentes del auto-apagado usando los bits ECCPAS2:ECCPAS0.
• Selecciona los estados de parada de los pines de salida usando los bits PSSAC1:PSSAC0 y PSSBD1:PSSBD0.
• Activar el bit ECCPASE (ECCP1AS<7>).
• Configurar los comparadores con el registro CMCON.
• Configurar las entradas del comparador como entradas
analógicas.
8. Si se necesita el auto-reinicio, activar el bit PRSEN (ECCP1DEL<7>).
9. Configurar y comenzar TMR2:
• Borrar el flag de interrupción de TMR2 borrando el bit TMR2IF
(PIR1<1>).
• Determinar el valor del prescaler de TMR2 cargando los bits
T2CKPS (T2CON<1:0>).
• Permitir el Timer2 activando el bit TMR2ON (T2CON<2>).
10. Permitir las salidas del PWM después de que un nuevo ciclo de PWM haya comenzado:
• Esperar hasta que se desborda TMRn (bit TMRnIF permitido).
• Activar los pines de salidas CCP1/P1A, P1B, P1C y/o P1D borrando los bits respectivos de TRIS.
• Borrar el bit ECCPASE (ECCP1AS<7>).

DESCRIPCIÓN DEL PERIFÉRICO USB
La familia de dispositivos PIC18FX455/X550 contiene una interfaz serie compatible con el SIE (serial interface engine, máquina con comunicación serie) USB “full-speed” (2.0) y “de poca velocidad” (1.0) que permite la comunicación rápida entre cualquier dispositivo USB y el microcontrolador PIC®.

El SIE puede interconectarse directamente al USB, utilizando el transmisorreceptor interno, o puede conectarse a través un transmisor-receptor externo. El PIC tiene un regulador interno de 3,3V para accionar el transmisor-receptor interno en aplicaciones de 5V. Se han incluido algunas características especiales en el hardware para mejorar el funcionamiento. Se proporciona memoria de puerto dual en la memoria de datos del dispositivo (RAM del USB) para tener acceso directo a la memoria desde el núcleo del
microcontrolador y desde el SIE. 

  También se proporcionan unos buffer para que el programador elija 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 ininterrumpida de volúmenes de datos grandes, por ejemplo datos síncronos, a los buffer de memoria externos.

ESTADO Y CONTROL DEL USB
Las operaciones del módulo USB se configuran 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)
• Registro de configuración del USB (UCFG)
• Registro de estado de la transferencia del USB (USTAT)
• Registro de dirección de dispositivo USB (UADDR)
• Registros del número del frame (UFRMH: UFRML)
• Registros activadores de los Endpoints de 0 a 15 (UEPn)

REGISTRO DE CONTROL DEL USB (UCON)
El registro de control del USB UCON contiene los bits necesarios para dirigir el comportamiento del módulo durante las transferencias. El registro contiene los bits que gobiernan lo siguiente:
• Permiso del periférico principal del USB
• Reset de los punteros tipo ping-pong
• Control del modo al suspender
• Desactivar la transferencia de paquetes
  Además, el registro de control del USB contiene un bit de estado, SE0 (UCON<5>), que se utiliza para indicar el estado del bus, si sólo se manda un cero.

  Cuando se permite el módulo USB, este bit debe supervisarse para determinar si las líneas de datos han salido de una condición de single-ended cero (sólo se manda cero). Esto ayuda a distinguir el estado de ciclo inicial de la señal de reset del USB. La operación total del módulo USB se controla con el bit USBEN (UCON<3>).

Activar este bit setea el módulo y resetea todos los bits PPBI en el Buffer a ‘0’. Este bit también activa el regulador de tensión del chip y conecta las resistencias pull-up, si se permiten. Así, este bit puede utilizarse como una unión/separación al USB. Aunque se
ignoran todos los estados y bits de control si este bit está borrado, el módulo necesita preconfigurarse antes de activar este bit.

El bit PPBRST (UCON<6>) controla el estado del reset cuando se utiliza el modo del Doble-Buffering (buffer ping-pong). Cuando se activa el bit PPBRST, todos los buffers ping-pong se fijan a los buffers intermedios. El PPBRST tiene que borrarse por firmware. Este bit se ignora en los modos de buffer que no usen el buffer ping-pong. El bit PKTDIS (UCON<4>) es un flag que indica si el SIE ha inhabilitado la transmisión y la recepción de paquetes. Este lo bit activa el SIE cuando recibe un SETUP para permitir su procesamiento. Este bit no lo puede activar el microcontrolador, sólo borrar; al despejarlo el SIE continua la transmisión y/o recepción. Cualquier acontecimiento pendiente dentro de buffer intermedio todavía estará disponible, indicado dentro del registro USTAT en el buffer FIFO.

El bit RESUME (UCON<2>) permite al periférico realizar un reinicio ejecutando la señal resume. Para generar un reinicio válido, por firmware se debe activar el RESUME durante 10ms y entonces borrar el bit. El bit SUSPND (UCON<1>) coloca el módulo y soporte del circuito (es decir, regulador de tensión) en un modo de baja potencia. El reloj de entrada al SIE se desactiva. Este bit debe activarse por software dentro de la respuesta a una interrupción IDLEIF. Debe borrarse por firmware después de observar una interrupción ACTVIF.

  Cuando este bit está activo, sigue estando el dispositivo unido al bus pero las salidas del transmisor-receptor permanecen en reposo. La tensión en el pin VUSB puede variar dependiendo del valor de este bit. Activar este bit antes de un IDLEIF dará lugar a
comportamiento imprevisible del bus.

Nota: Cuando esté en el modo de suspensión, el bus del dispositivo USB se limita al 500μA de corriente. Ésta es la corriente completa cedida por el dispositivo PIC y su circuito de soporte. Hay que tener cuidado de ceder la corriente mínima cuando el dispositivo entre en el modo de suspensión.

REGISTRO DE CONFIGURACIÓN DEL USB (UCFG)
Antes de comunicarse con el USB, se tiene que configurar el módulo del
hardware interno y/o externo. La mayor parte de la configuración se realiza con el
registro UCFG. El regulador de tensión del USB se maneja con la configuración de los
registros.
El registro UFCG contiene la mayor parte de los bits que dirigen el
comportamiento del módulo USB. Éstos incluyen:
• Velocidad del bus (“velocidad completa” contra “poca velocidad”)
• Permiso de las resistencias pull-up del chip
• Permiso del transmisor del chip
• Uso del buffer ping-pong
El registro UCFG también contiene dos bits que ayudan a probar el módulo,
eliminando errores y certificaciones del USB. La salida de control de estos bits permite
el monitor de estado y generación de patrones “de ojo”.
Nota: La velocidad del USB, la transmisión y las pull-up deben configurase
solamente durante la fase de activación del módulo. No se recomienda cambiar estos

ajustes mientras que el módulo esté funcionando.


Transmisor interno
El periférico USB tiene, USB 2.0, full-speed y un transmisor de poca velocidad, internamente conectado al SIE. Esta característica es útil en aplicaciones baratas con un chip. El bit UTRDIS (UCFG<3>) controla el transmisor; está permitido por defecto (UTRDIS = 0). El bit FSEN (UCFG<2>) controla la velocidad del transmisor; activar el bit permite las operaciones “full-speed”.

Las resistencias pull-up del chip del USB se controlan con el bit UPUEN (UCFG<4>). Pueden seleccionarse solamente cuando se permite el transmisor del chip.
Las especificaciones del USB requieren 3,3V en las comunicaciones; sin embargo, el resto del chip puede funcionar con una tensión más alta. Así, la fuente de energía del transmisor es una fuente separada, VUSB.

Transmisor externo
Este módulo proporciona ayuda para el uso de un transmisor fuera del chip. El transmisor externo se utiliza en aplicaciones donde las condiciones físicas dictan la localización del transmisor lejos del SIE. Por ejemplo, aplicaciones que requieren el aislamiento del USB podía utilizar un transmisor externo con algunos aislamientos en el SIE del microcontrolador. Las operaciones con un transmisor externo se permiten activando el bit UTRDIS.

Hay 6 señales en el módulo para comunicar y controlar un transmisor externo:
• VM: Entrada de la línea single-ended D-
• VP: Entrada de la línea single-ended D+
• RCV: La entrada del receptor diferencial
• VMO: Salida a la línea diferencial del conductor
• VPO: Salida a la línea diferencial del conductor
• UOE: Salida permitida

  Las señales VPO y VMO son salidas del SIE al transmisor externo. La señal del RCV es la salida del transmisor externo al SIE; representa las señales diferenciales del bus serie traducido en un tren de pulsos. Las señales VM y VP se utilizan para divulgar
condiciones en el bus serie al SIE que no se puede capturar con la señal del RCV.

  La señal UOE* indica el estado del transmisor externo. A esta línea la pone en nivel bajo el dispositivo para activar las transmisiones de datos del SIE con un dispositivo externo.

Resistencias internas pull-up
Los dispositivos PIC18FX455/X550 tienen unas resistencias pull-up internas diseñadas para conocer los requerimientos del USB “baja velocidad” y “toda velocidad”. El bit UPUEN (UCFG<4>) activa las pull-up internas.

 Resistencias externas pull-up
Se pueden necesitar resistencias externas pull-up. El pin VUSB se puede utilizar para aumentar D+ o D-. La resistencia pull-up tiene que ser de 15kΩ.

Regulador interno
Los dispositivos PIC18FX455/X550 tienen un regulador incorporado 3,3V para proporcionar energía al transmisor interno y proporcionar una fuente para el pull-up interno y externo. Para que el regulador sea estable se necesita un condensador externo de 220nF (±20%).

Nota: La corriente de VUSB es suficiente para controlar un pull-up externo y el transmisor interno.

El regulador se activa por defecto y puede inhabilitarse a través del bit de configuración VREGEN. Cuando está activo, la tensión es visible en el pin VUSB. Cuando el regulador está desactivado, se tiene que conectar una fuente de 3,3V al pin VUSB para alimentar el transmisor interno. Si el transmisor interno no se utiliza, VUSB tampoco se activa.

Nota 1: No permitir el regulador interno si el regulador externo está conectado a VUSB.
2: VDD debe ser mayor que VUSB en cualquier momento, o igual con el regulador inhabilitado.

REGISTRO DE ESTADO DEL USB (USTAT)
El registro de estado del USB divulga el estado de las transacciones dentro del SIE. Cuando el SIE publica una interrupción de transferencia completa por el USB, hay que leer USTAT para determinar el estado de la transferencia. USTAT contiene el número del Endpoint de la transferencia, dirección y valor del puntero del buffer pingpong (si está utilizado).

Nota: Los datos en el registro de estado del USB son válidos solamente cuando el flag de interrupción TRNIF está activo.

El registro USTAT es realmente una ventana legible de los cuatro bytes de estado FIFO mantenida por el SIE. Permite al microcontrolador procesar una transferencia mientras que SIE procesa los Endpoints adicionales. Cuando el SIE termina con un buffer de lectura o escritura de datos, actualiza el registro USTAT. Si se realiza otra transferencia USB antes de realizar una interrupción de transacción completa, el SIE almacenará el estado de la transferencia siguiente en el estado FIFO.

Despejando el flag de la transferencia completa, TRNIF, provoca al SIE que avance el FIFO. Si los datos siguientes en el registro FIFO son válidos, el SIE inmediatamente reafirma la interrupción. Si no hay datos adicionales presentes, TRNIF seguirá borrado; los datos de USTAT puede que no sean correctos.

Nota: Si se recibe una petición de Endpoint mientras que el USTAT FIFO este lleno, el SIE publica automáticamente un NAK de nuevo al anfitrión.

REGISTRO DE DIRECCIÓN DEL USB (UADDR)
El registro de dirección del USB contiene la única dirección del USB que el periférico descifra cuando está activo. UADDR se pone a 00h cuando recibe un reset del USB, indicado por URSTIF, o con un reset al microcontrolador. La dirección del USB la tiene que escribir el microcontrolador durante la fase de setup del USB como parte del firmware del USB de la ayuda de microchip.


REGISTROS DEL NÚMERO DEL FRAME DEL USB (UFRMH:
UFRML)
Los registros del número del frame contienen los 11bits del número del frame. El byte de orden inferior está en UFRML, mientras que los tres bits de orden superior permanecen en UFRMH. El par de registros se actualizan con el número de frame actual cuando recibe un SOF. Para el microcontrolador, estos registros son sólo de lectura. El registro del número del frame se utiliza sobre todo para transferencias síncronas.

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. Ésta 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 1kbyte.

El banco 4 (400h con 4FFh) se utiliza específicamente en el control del buffer del Endpoint, mientras que los bancos de 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 para utilizarlos como buffer del USB.

Aunque la RAM del USB está disponible en el microcontrolador como memoria de datos, las secciones que está modificando el SIE no las puede usar el microcontrolador. Se utiliza un
mecanismo de semáforos para determinar el acceso a un buffer en un momento dado.

INTERRUPCIONES DEL USB
El módulo USB puede generar condiciones de interrupción múltiples. Para acomodar todas estas fuentes de interrupción, el módulo 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 registros de control y registradas con un sistema separado de flags. Todas las fuentes se concentran en una sola petición de interrupción del USB, USBIF (PIR2<5>).

Hay dos capas de registros de interrupción en el módulo USB. El nivel superior consiste en todas las interrupciones de estado del USB; éstos se permiten y se señalan por medio de un 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.


REGISTRO DE ESTADO DE LAS INTERRUPCIONES DEL USB (UIR)

El registro de estado de las interrupciones del USB contiene los flags para el estado de cada fuente de interrupción. Cada una de estas interrupciones tiene un bit de permiso en el registro UIE correspondiente. Todos los flags de estado del USB se suman para generar el flag de interrupción USBIF para el túnel de interrupción del micro.

Una vez que el SIE active un bit de interrupción, se tiene que borrar por software escribiendo un ‘0’. Los flags se pueden activar por software para ayudar en la búsqueda de errores del firmware.

STREAMING PARALLEL PORT (SPP)
El puerto paralelo (SPP) es una ruta alternativa de los datos además de la RAM del USB. Usando el SPP, un Endpoint se puede configurar para enviar o para recibir datos directamente del hardware externo.
Este método presenta posibilidades de diseño donde el microcontrolador actúa como encargado de los datos, permitiendo al SPP pasar bloques grandes de datos sin que el micro regule lo que procesa realmente. Un ejemplo de aplicación puede incluir
un sistema de adquisición de datos, donde los datos fluyen de una FIFO externa a través del USB al ordenador. En este caso, el control del Endpoint lo realiza el microcontrolador y los movimientos de datos en bruto se procesan externamente.

El SPP se permite como puerto de un Endpoint del USB a través del BD asociado al Endpoint. El Endpoint tiene que activarse de la siguiente manera:

1. Activar BDnADRL:BDnADRH direccionado a FFFFh.
2. Activar KEN (BDnSTAT<5>) par que el SIE controle el Buffer.
3. Activar INCDIS (BDnSTAT<4>) para inhabilitar el incremento de dirección automático.

OSCILADOR
El módulo USB necesita una señal específica de reloj. En operaciones fullspeed, el reloj tiene que ser de 48MHz. El microcontrolador y los periféricos no tienen porque tener la misma frecuencia de reloj o la misma fuente.


Leyenda: - = las localizaciones no están implementadas. Las celdas sombreadas no se utilizan con el módulo USB.

Nota 1: Esta tabla incluye solamente las localizaciones SFRs mapeadas en el banco 15 de la memoria de datos. Los registros de los BD, que están mapeados en el banco 4 y no son SFRs verdaderos, están en la tabla.

DESCRIPCIÓN DEL USB
Esta sección presenta algunos conceptos básicos del USB e información útil necesaria para diseñar un dispositivo USB. Así, se anima al lector que refiera a las especificaciones del USB para más información (www.usb.org). Si estás muy al corriente de los detalles de USB, entonces ésta sección sirve como recuerdo básico, de alto nivel del USB.

FRAMES
La información que se comunica en el bus se agrupa en ranuras de 1ms, designadas frames. Cada frame puede contener muchas transacciones a varios dispositivos y Endpoints.

TRANSFERENCIAS
Hay cuatro tipos de transferencias definidas en las especificaciones del USB.

• Síncrona: Este tipo proporciona un método de transferencia para
cantidades de datos grandes (hasta 923 bytes) con la entrega puntual asegurada; sin embargo, la integridad de los datos no se asegura. Es bueno en aplicaciones donde los datos son pequeños y la pérdida no es crítica, por ejemplo audio.

• Bulk: Este método de transferencia permite grande cantidades de datos que se transferirán asegurando la integridad de los datos; sin embargo, la puntualidad de la entrega no se asegura.

• Interrupción: Este tipo de transferencia prevé la entrega puntual
asegurada para bloques pequeños de datos, se asegura la integridad de los datos.

• Control: Este tipo prevé la disposición de dispositivo control.
Mientras que los dispositivos “full-speed” soportan todos los tipos de transferencia, los dispositivos “de poca velocidad” se limitan a las transferencias interrupción y control.

ENERGÍA
La energía se puede obtener del USB. Las especificaciones del USB definen los requisitos de energía del bus. Los dispositivos pueden ser self-powered o alimentados por bus. Los dispositivos Self-powered consiguen energía de una fuente externa, mientras que los dispositivos alimentados por bus utilizan la energía del bus.

La especificación del USB limita la energía tomada del bus. Cada dispositivo se asegura 90mA y 5V (una unidad de carga). La energía adicional puede solicitarse, hasta un máximo de 500mA. Observar que ceder más energía que la de una unidad de carga
es una petición y el anfitrión o el hub no tiene que proporcionarla obligatoriamente. Así, un dispositivo capaz de consumir más de una unidad de carga debe ser capaz de mantener una configuración de baja potencia de una unidad carga o menos, en caso de necesidad.

La especificación del USB también define un modo de reposo. En esta situación, la corriente se debe limitar a 500μA, sobre 1 segundo. Un dispositivo se debe incorporar al estado de reposo después de 3ms de inactividad (es decir, ningún símbolo SOF en
3ms). El entrar el dispositivo en el modo reposo debe caer la consumición actual en los 10ms siguientes. Asimismo, al señalar un reinicio, el dispositivo debe señalarlo en los 10ms cediendo corriente.

ENUMERACIÓN
Cuando el dispositivo se une al bus, el anfitrión crea un proceso de enumeración en un intento por identificar el dispositivo. Esencialmente, el anfitrión interroga al dispositivo, recopila información tal como el consumo de energía, tarifas y tamaños de
los datos, protocolo y otra información descriptiva, que contienen los descriptores. El proceso de enumeración sería:

1. Reset del USB: Resetear el dispositivo. Así, el dispositivo no se configura y no tiene una dirección (dirección 0).

2. Conseguir el descriptor del dispositivo: El anfitrión solicita una pequeña parte del descriptor del dispositivo.

3. Reset del USB: Resetear el dispositivo otra vez.

4. Fijar la dirección: El anfitrión asigna una dirección al dispositivo.

5. Conseguir el descriptor del dispositivo: El anfitrión recupera el descriptor del dispositivo, recolectando la información, por ejemplo fabricante, tipo de dispositivo, control máximo del tamaño de los paquetes.

6. Conseguir los descriptores de configuración.

7. Conseguir cualquier otro descriptor.

8. Fijar una configuración.

El proceso exacto de enumeración depende del anfitrión.

VELOCIDAD DEL BUS
Cada dispositivo USB debe indicar su presencia del bus y su velocidad al anfitrión. Esto se logra con una resistencia de 1,5kΩ que se conecta al bus en el momento del acoplamiento.

Dependiendo de la velocidad del dispositivo, la resistencia une la línea D+ o Da 3,3V. En dispositivos de poca velocidad, la resistencia se conecta a la línea D-. En los dispositivos full-speed, la resistencia se conecta a la línea D+.

ESPECIFICACIONES DE CLASE Y DRIVERS
Las especificaciones del USB incluyen las especificaciones de clase que los vendedores del sistema operativo apoyan opcionalmente. Los ejemplos de clases incluyen el audio, memoria de masa, comunicaciones e interfaz humano (HID). En la mayoría de los casos, se requiere un driver en el lado del anfitrión para comunicarse con el dispositivo USB. En aplicaciones de encargo, se puede necesitar un driver convertido.

Afortunadamente, los drivers están disponibles para la mayoría de los sistemas anfitriones comunes para las clases más comunes de los dispositivos. Así, estos drivers se pueden reutilizar.

PUERTO PARALELO STREAMING (SPP)
Nota: El puerto paralelo streaming está solamente disponible en los dispositivos de 40/44-pines.

Los dispositivos USB PIC18F4455/4550 proporcionan un Puerto Paralelo Streaming como interfaz de alta velocidad para mover datos a y desde un sistema externo. Este puerto paralelo funciona como puerto principal, completo con un chip select y salidas 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 microprocesador.

SISTEMA PARA EL CONTROL DEL USB
Cuando el SPP se configura para operar como USB, los datos se pueden controlar directamente a y desde el periférico USB sin la intervención del microcontrolador; así, no requiere tiempo de procesado. Los datos se manejan a o hacia fuera del SPP con la información del Endpoint (dirección) primero, seguido por uno o
más bytes de datos. Esto es ideal en aplicaciones que requieren transmisión síncrona, de gran capacidad. Los siguientes pasos se requieren para configurar el SPP para control el USB:

1. Configurar el SPP según lo deseado, incluyendo estados de espera y relojes.

2. Activar el bit SPPOWN para la propiedad del USB.

3. Activar el descriptor del buffer que comienza la dirección (BDnADRL:BDnADRH) a FFFFh.

4. Activar el bit KEN (BDnSTAT<5>) pero el buffer descriptor lo se guarda indefinidamente el SIE.

5. Activar el bit INCDIS (BDnSTAT<4>) para inhabilitar el incremento automático de la dirección del buffer.

6. Activar el bit SPPEN para permitir el módulo.
Nota: Si un Endpoint del USB se configura para utilizar el SPP, el tipo de la transferencia de datos de ese Endpoint debe ser síncrona.

SITEMA PARA EL CONTROL DEL MICROCONTROLADOR
El SPP puede actuar como puerto paralelo del microcontrolador. En este modo, el registro SPPEPS proporciona el estado y la dirección de control de escritura. Los datos se escriben y se leen en el registro SPPDATA. Cuando el SPP lo gobierna el microcontrolador, el reloj del SPP lo controla el reloj de instrucción (FOSC/4). Los pasos siguientes se requieren para configurar el SPP para operación del microcontrolador:

1. Configurar el SPP según lo deseado, incluyendo estados de espera y relojes.
2. Borrar el bit SPPOWN.

3. Activar SPPEN para permitir el módulo.

MÓDULO CONVERTIDOR DE 10-BIT ANALÓGICO
A DIGITAL (A/D)
El módulo conversor de analógico a digital (A/D) tiene 10 entradas con los dispositivos de 28 pines y 13 en los de 40/44 pines. Este módulo permite la conversión de una señal de entrada analógica a un número digital de 10bits.

El módulo tiene cinco registros:
• Registro alto del resultado A/D (ADRESH)
• Registro bajo del resultado A/D (ADRESL)
• Registro de control A/D 0 (ADCON0)
• Registro de control A/D 1 (ADCON1)
• Registro de control A/D 2 (ADCON2)

El registro ADCON0, gobierna las operaciones del módulo A/D. El registro ADCON1 configura las funciones de los puertos. El registro ADCON2 configura el reloj, programa el tiempo de adquisición y justificación.


2: Los pines de E/S tienen un diodo de protección a VDD y VSS.
El valor en los registros ADRESH:ADRESL no se modifica con un POR. Los registros ADRESH:ADRESL contendrán datos desconocidos después de un POR.

Después de que el módulo A/D se haya configurado según lo deseado, el canal seleccionado debe adquirir antes de que comience la conversión. Los canales de entrada analógica deben tener sus bits TRIS correspondientes seleccionados como entrada.
Después de esta adquisición el tiempo ha transcurrido, la conversión A/D puede comenzar. Se puede programar un periodo de adquisición para que ocurra entre activar el bit GO/DONE* y el comienzo real de la conversión.

Hay que seguir los siguientes pasos para realizar la conversión A/D:
1. Configurar el módulo A/D:
• Configura los pines analógicos, referencia de tensión y entradasalida digital (ADCON1)
• Seleccionar el canal A/D de entrada (ADCON0)
• Seleccionar el tiempo de adquisición A/D (ADCON2)
• Seleccionar el reloj e la conversión A/D (ADCON2)

• Cambiar el módulo A/D (ADCON0)

2. Configuran la interrupción A/D (si se desea):
• Borrar el bit ADIF
• Activar el bit ADIE
• Activar el bit GIE

3. Esperar el tiempo requerido de adquisición (si procede).

4. Comienzo de la conversión:
• Activar el bit GO/DONE* (registro ADCON0)

5. Esperar que termine la conversión A/D, por cualquiera:
• La interrogación del bit GO/DONE* para ver si está borrado
• Esperar la interrupción A/D

6. Leer los registros del resultado A/D (ADRESH:ADRESL); borrar el bit ADIF, si procede.

7. Para la conversión siguiente, ir al paso 1 o al paso 2, al que se necesite. El tiempo de la conversión A/D por bit es definido como TAD. Se necesita esperar como mínimo 3TAD antes de comenzar la siguiente adquisición.

REQUISITOS DE LA ADQUISICIÓN A/D
En el convertidor A/D, para satisfacer su exactitud especificada, la carga que sostiene el condensador (CHOLD) debe permitirse que se cargue completamente para que entre el nivel de tensión del canal. La impedancia de la fuente (RS) y la impedancia del cambio del muestreo interno (RSS) afectan directamente al tiempo requerido para cargar el condensador CHOLD. La impedancia del cambio del muestreo (RSS) varía sobre la tensión del dispositivo (VDD). La impedancia de la fuente afecta a la tensión compensando la entrada analógica (debido al pin de salida de corriente). 

La impedancia recomendada máxima para las fuentes analógicas es de 2,5kΩ. Después de que el canal de entrada analógico esté seleccionado (cambiado), el canal se debe muestrear por lo menos el tiempo mínimo de adquisición antes de comenzar una conversión.

Nota: Cuando comienza la conversión, el condensador se desconecta del pin de entrada.

Esta ecuación asume que existe el error de 1/2LSb (1024 pasos para el A/D). El error de 1/2LSb es el error máximo permitido del A/D para conseguir su resolución específica.

El ejemplo 21-3 muestra el cálculo del tiempo mínimo de adquisición requerido TACQ. Este cálculo se base con los siguientes datos de aplicación:

CHOLD=25pF
RS=2,5kΩ
Error de la conversión <= 1/2 LSb
VDD=5V
RSS=2kΩ

Temperatura=85°C (máximo del sistema)

SELECCIONAR Y CONFIGURACIÓN EL TIEMPO DE
ADQUISICIÓN TIEMPO
El registro ADCON2 permite que el usuario seleccione tiempo de adquisición que ocurre cada vez que se activa el bit GO/DONE*. También da a los usuarios la opción de utilizar un tiempo de adquisición automáticamente determinado. El tiempo de adquisición se puede determinar con los bits ACQT2:ACQT0 (ADCON2<5: 3>) que proporcionan una gama de 2 a 20 TAD. Cuando se activa el bit GO/DONE*, el módulo A/D continúa muestreando la entrada con el tiempo de adquisición seleccionado,
entonces comienza automáticamente una conversión. Desde que se programa el tiempo de adquisición, puede que no ser necesite esperar un periodo de adquisición entre la selección de un canal y activar el bit GO/DONE*.

Se selecciona la adquisición manual cuando ACQT2:ACQT0 = 000. Cuando se activa el bit GO/DONE*, se para el muestreo y comienza una conversión. El usuario es el responsable de asegurar que ha pasado el tiempo de adquisición requerido entre la selección de la entrada deseada y fijar el bit GO/DONE*. Esta opción es el estado por defecto en un reset de los bits ACQT2:ACQT0 y es compatible con los dispositivos que no ofrecen tiempos de adquisición programables.

En cualquier caso, cuando se termina la conversión, el bit GO/DONE* se borra, se activa el flag ADIF y A/D comienza a muestrear el canal actualmente seleccionado otra vez. Si se programa un periodo de adquisición, no hay nada que indique si el

tiempo de adquisición ha terminado o si la conversión ha comenzado.

SELECCIONAR EL RELOJ DE CONVERSIÓN A/D
El tiempo A/D de conversión por bit se define como TAD. La conversión A/D requiere 11 TAD para la conversión de 10 bits. La fuente de reloj A/D de la conversión es seleccionable por software. Hay siete opciones posibles para el TAD:
• 2 TOSC
• 4 TOSC
• 8 TOSC
• 16 TOSC
• 32 TOSC
• 64 TOSC
• Oscilador interno RC
Para las conversiones A/D correctas, el reloj de conversión A/D (TAD) debe ser tan corto como sea posible pero mayor que un mínimo TAD.


OPERACIÓN EN LOS MODOS DE AHORRO DE ENERGÍA
La selección del tiempo de adquisición automático y el reloj de conversión A/D se determinado en parte con la fuente de reloj y la frecuencia mientras se trabaje en un modo de ahorro de energía.

  Si se espera que el A/D funcione mientras que el dispositivo esté dentro de un modo de ahorro de energía, los bits ACQT2:ACQT0 y ADCS2:ADCS0 en ADCON2 se deben actualizar con la fuente de reloj que se utilizará en este modo. Después de entrar en el modo, una adquisición o la conversión A/D puede comenzar. Una vez que haya comenzado, el dispositivo debe continuar controlado con la misma fuente de reloj hasta que la conversión termine.

Si se desea, el dispositivo se puede poner en modo reposo durante la conversión. Si la frecuencia de reloj del dispositivo es menos de 1MHz, se tiene que seleccionar la fuente de reloj RC A/D.

Operar en el modo sleep requiere que se seleccione el reloj A/D FRC. Si los bits ACQT2:ACQT0 se fijan a ‘000’ y comienza una conversión, la conversión tendrá un retraso de un ciclo de instrucción para permitir la ejecución de la instrucción SLEEP y entrada del modo sleep. El bit IDLEN (OSCCON<7>) tiene que estar borrado antes de comenzar la conversión.

CONFIGURACIÓN DE LOS PINES DE LOS PUERTOS
ANALÓGICOS

  Los registros ADCON1, TRISA, TRISB y TRISE configuran los pines de los puertos A/D. Los pines tienen que estar como entradas analógicas, deben tener sus bits correspondientes del TRIS activos (entrada). Si es el bit TRIS está borrado (salida), el
nivel de salida digital (VOH o VOL) se convertirá.

La operación A/D es independiente del estado de los bits CHS3:CHS0 y los bits TRIS.

Nota 1: Al leer el registro PORT, todos los pines configurados como canales de entrada analógica se leerán como borrado (un nivel bajo). Los pines configurados como entrada digital convertirán como entradas analógicas. Los niveles analógicos de la entrada digital estarán bien convertidos.

2: Los niveles analógicos en cualquier pin definido como entrada digital puede causar al buffer de entrada digital que consuma una corriente fuera de los límites de la especificación de dispositivo.

3: El bit PBADEN en el registro de configuración 3H configura los pines de PORTB a resetar como pines analógicos o digitales dependiendo de como estén los bits PCFG0 de ADCON1 después el reset.

USO DEL DISPARADOS DEL CCP2
Una conversión A/D puede empezar con el disparo de un evento especial del módulo CCP2. Esto requiere que los bits CCP2M3:CCP2M0 (CCP2CON<3:0>) se programen como ‘1011’ y que el módulo A/D esté activo (ADON esté activo). Cuando
ocurre un disparo, el bit GO/DONE* se activará, empezando la adquisición y conversión A/D y el Timer1 (o Timer3) se resetea para repetir automáticamente el periodo de adquisición A/D con el uso de un mínimo de software (mover ADRESH:ADRESL a las localizaciones deseadas). Se tiene que seleccionar el canal de
entrada analógico apropiado y un tiempo de adquisición mínimo elegido por el usuario o un TACQ apropiado antes de que el disparo del evento especial active el bit GO/DONE* (comience la conversión).

Si el módulo A/D no está permitido (ADON está borrado), el disparo del evento especial lo ignora el módulo A/D pero reseteará el contador Timer1 (o Timer3).


El MÓDULO COMPARADOR
El módulo comparador analógico contiene dos comparadores que se pueden configurar de muchas maneras. Las entradas se pueden elegir de las entradas analógicas multiplexadas con los pines RA0 a RA5, como el módulo de tensión de referencia del chip. Las salidas digitales (normales o invertidas) están disponibles en los niveles de los pines o también se pueden leer a través del registro de control.
El registro CMCON selecciona la configuración de la entrada y de la salida del comparador.



CONFIGURACIÓN DEL COMPARADOR
Hay ocho modos de operación para los comparadores. Los bits CM2:CM0 del registro CMCON se utilizan para seleccionar estos modos. El registro TRISA controla la dirección de los datos de los pines del comparador en cada modo. si cambia el modo del comparador, el nivel de salida del comparador puede que no sea válido para el modo especificado de cambio de retraso.


Nota: Las interrupciones del comparador se tienen que desactivar durante el cambio de modo del comparador. En otro caso, puede que ocurra una falsa interrupción.

OPERACIONES DEL COMPARADOR
En la figura de abajo se muestra un comparador simple, junto con la relación entre los niveles de entrada de datos analógicos y la salida digital. Cuando la entrada analógica en VIN+ es menor que la entrada analógica VIN-, la salida del comparador es un nivel digital bajo. Cuando la entrada analógica en VIN+ es mayor que la entrada analogica VIN-, la salida del comparador es un nivel digital alto. Las áreas sombreadas de la salida del comparador en la figura 22-2 representan la incertidumbre, debido a las compensaciones de la entrada y al tiempo de reacción.

REFERENCIA DEL COMPARADOR
Dependiendo del modo de funcionamiento del comparador, se puede utilizar cualquier referencia externa o interna de tensión. La señal analógica presente en VIN- se compara con la señal en VIN+ y la salida digital del comparador se ajusta consecuentemente.

SEÑAL DE REFERENCIA EXERNA
Cuando son externas se utilizan las referencias de tensión, el módulo del comparador se puede configurar para tener los comparadores funcionar desde la misma u otra fuente de referencia. Sin embargo, las aplicaciones del detector del umbral
pueden necesitar la misma referencia. La señal de referencia debe estar entre VSS y VDD y se puede aplicar a cualquier pin del/los comparador/es.

SEÑAL DEREFERENCIA INTERNA
El módulo del comparador también permite la selección de referencia interna de tensión interna generada por el módulo comparador de tensión de referencia.
La referencia interna está disponible solamente en el modo donde cuatro entradas se multiplexan a dos comparadores (CM2:CM0=110). En este modo, la tensión interna de referencia se aplica al pin VIN+ de ambos comparadores.

TIEMPO DE RESPUESTA DEL COMPARADOR
El tiempo de reacción es el tiempo mínimo, después de seleccionar una nueva tensión de referencia o fuente entrada, antes de que la salida del comparador tenga un  nivel válido. Si la referencia interna cambia, se tiene que considerar el máximo retraso de la tensión interna de referencia al usar las salidas del comparador. Si no, se tiene que utilizar el máximo retraso de los comparadores.

SALIDAS DEL COMPARADOR
Las salidas del comparador se leen con el registro CMCON. Estos bits son inalterables. Las salidas del comparador se pueden poner directamente a los pines RA4 y RA5 de E/S. Cuando está permitido, los multiplexores en la trayectoria de salida de los pines RA4 y RA5 cambiará y la salida de cada pin no estará sincronizada con la del comparador. La incertidumbre de cada uno de los comparadores se relaciona con la tensión compensada de la entrada y el tiempo de reacción dado en las especificaciones.

Los bits TRISA activarán/desactivarán la salida de los pines RA4 y RA5 mientras esté en este modo.
La polaridad de las salidas del comparador se puede cambiar usando los bits C2INV y C1INV (CMCON<5: 4>).

Nota 1: Al leer el registro PORT, todos los pines configurados como entradas analógicas se leerán ‘0’. Los pines configurados como entradas digitales convertir una entrada analógica según las especificaciones de entrada del disparador Schmitt.

2: Los niveles analógicos de cualquier pin definidos como entrada digital pueden hacer que el buffer de entrada consuma más corriente que la que se especifica.

INTERRUPCIONES DEL COMPARADOR
Se activa el flag de interrupción del comparador siempre que haya un cambio en el valor de la salida de cualquier comparador. El software necesitará mantener la información sobre estado de los bits de la salida, dependiendo de la lectura de CMCON<7:6>, para determinar el cambio real que ha ocurrido. El bit CMIF (PIR2<6>) es el flag de interrupción del comparador. El bit CMIF se tiene que resetear borrándolo.
Puesto que está también posible escribir un ‘1’ en este registro, se puede iniciar una interrupción simulada.

El bit CMIE (PIE2<6>) y el bit PEIE (INTCON<6>) se tienen que activar para permitir la interrupción. Además, el bit GIE (INTCON<7>) tiene que estar activo. Si ninguno de estos bits están activos, no se permiten las interrupciones, aunque el bit CMIF todavía se active si ocurre una condición de interrupción.

Nota: Si un cambio en el registro de CMCON (C1OUT o C2OUT) ocurre cuando se está ejecutando la operación de lectura (comienzo del ciclo Q2), entonces el flag de interrupción CMIF (PIR2<6>) puede que no e active.

El usuario, en la rutina de interrupción, puede borrar la interrupción de la manera
siguiente:
a) Cualquier lectura o escritura de CMCON terminará con condición de error de unión.

b) Borrar el flag CMIF.
Una condición de error de unión continuará activando el flag CMIF. La lectura de CMCON terminará con la condición de error de unión y permitirá que el flag CMIF se borre.

OPERACIONES DEL COMPARADOR DURANTE EL MODO SLEEP

Cuando un comparador está activo y el dispositivo se pone en modo sleep, el comparador sigue estando activo y la interrupción es funcional si está permitida. Esta interrupción despertará al dispositivo del modo sleep, cuando está permitida. Cada comparador operacional consumirá corriente adicional, según las indicaciones de las especificaciones del comparador. Para reducir al mínimo el consumo de energía en el modo sleep, se apagan los comparadores (CM2: CM0 = 111) antes de entrar en el modo sleep. Si el dispositivo despierta del sleep, no le afecta al contenido del registro CMCON.

EFECTOS DE UN RESET
Un reset del dispositivo fuerza al registro CMCON a su estado de reset, haciendo que los módulos del comparador se apaguen (CM2:CM0=111). Sin embargo, los pines de entrada (RA0 a RA3) se configuran como entradas analógicas por defecto.

La configuración de E/S para éstos pines se determina con el ajuste de los bits PCFG3:PCFG0 (ADCON1<3:0>). Por lo tanto, la corriente del dispositivo se reduce al mínimo cuando las entradas analógicas están presentes en el tiempo de reset.

MÓDULO COMPARADOR DE TENSIÓN DE
REFERENCIA
La tensión del comparador de referencia es una red de 16 resistencias que proporciona una referencia seleccionable de tensión. Aunque su propósito primario es proporcionar una referencia para los comparadores analógicos, se puede utilizar también independientemente de ellos.

La red de resistencias se divide en segmentos para proporcionar dos gamas de valores de CVREF y tiene una función de caída de energía para conservar la energía cuando la referencia no se está utilizando. La fuente de referencia del módulo se puede obtener de dispositivo VDD/VSS o una referencia externa de tensión.

DETECTOR DE ALTA/BAJA TENSIÓN (HLVD)
Los dispositivos PIC18F2455/2550/4455/4550 tienen un módulo detector de alta/baja tensión (HLVD). Éste es un circuito programable que permite al usuario especificarla tensión del cambio del dispositivo y la dirección del cambio en ese punto.
Si el dispositivo experimenta un cambio mayor, se activa un flag de interrupción. Si se permite la interrupción, la ejecución del programa saltará a la dirección de vector de interrupción y el software responde a la interrupción.

El registro de control que detecta la alta/baja tensión controla totalmente la operación del Módulo HLVD. Esto permite que el circuito “lo apague” el usuario bajo control por software que reduce al mínimo la consumición actual del dispositivo.

CARACTERÍSTICAS ESPECIALES DE LA CPU
Los dispositivos PIC18F2455/2550/4455/4550 incluyen varias características para maximizar la confiabilidad y reducir el coste al mínimo con la eliminación de componentes externos. Éstos son:

• Selección del oscilador
• Resets:
􀀹 Reset por subida de tensión (POR)
􀀹 Temporizador de inicio (PWRT)
􀀹 Temporizador de inicio del oscilador (OST)
􀀹 Reset por cese de tensión (BOR)
• Interrupciones
• Temporizador perro guardián (WDT)
• Monitor de reloj a prueba de fallos
• Arranque a dos velocidades
• Código de protección
• Localizaciones de identificación
• Programación serie “en Circuito”

El oscilador se puede configurar para cada aplicación dependiendo de la frecuencia, la energía, la exactitud y el coste.
Además de sus contadores de tiempo del arranque y del oscilador temporizador de inicio para los resets, los dispositivos PIC18F2455/2550/4455/4550 tienen un temporizador perro guardián, que se permite permanentemente con los bits de configuración o el software de control (si está inhabilitado).

La inclusión de un oscilador interno RC también proporciona ventajas adicionales de un monitor de reloj a prueba de fallos (FSCM) y arranque de dos velocidades. FSCM proporciona una supervisión oculta del reloj del periférico y un cambio automático en caso de fallo. El arranque a dos velocidades permite al código
ejecutarse casi inmediatamente en el inicio, mientras que la fuente de reloj primario termina su retraso de inicio.

Todas estas características se permiten y se configuran activando los bits apropiados del registro de configuración.

FSCM Y EL TEMPORIZADOR PERRO GUARDIÁN
Los FSCM y los WDT se controlan con el Oscilador INTRC. Puesto que el WDT funciona con el divisor separado y el contador, inhabilitar el WDT no tiene ningún efecto sobre el oscilador INTRC cuando se activa el FSCM.

Según lo observado ya, la fuente de reloj se cambia al Reloj INTOSC cuando se detecta un fallo. Dependiendo de la frecuencia seleccionada por los bits IRCF2:IRCF0, puede significar un cambio substancial en la velocidad de ejecución del código. Si se permite el WDT con un valor pequeño de prescaler, disminuye la velocidad del reloj y permite que ocurra un desbordamiento del WDT y su correspondiente reset del dispositivo. Por esta razón, los acontecimientos del monitor de reloj a prueba de fallos también resetean el WDT y el postscaler, permitiendo comenzar la sincronización del cambio de la velocidad de ejecución y disminuyendo la probabilidad de un desbordamiento erróneo.




0 comentarios:

Publicar un comentario