uControl
Octubre 31, 2014, 06:23:55 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: Datasheet en español: PIC12F629/675  (Leído 32983 veces)
0 Usuarios y 1 Visitante están viendo este tema.
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« : Marzo 09, 2009, 02:34:32 »

Es importante destacar que el único documento válido es el datasheet original de Microchip y que los derechos les corresponden a ellos. A pesar del esfuerzo por ser lo más fiel posible al documento original no descarto que haya algún tipo de error, ya sea tipográfico o de interpretación.

He solicitado autorización de Microchip para publicarlo a nivel personal en los Foros en los que participo con mayor o menor frecuencia y solamente para los usuarios y/o visitantes de estos Foros llevé a cabo la tarea. No he obtenido el permiso para un formato final en pdf como me hubiera gustado y desautorizo su publicación -porque así lo expresa claramente Microchip (1)- en cualquier otra parte.

En todo caso, libro al Foro de todo tipo de responsabilidad y si algo se me ha pasado por alto y estoy vulnerando las normas de propiedad de Microchip, agradecería se me informara para actuar en consecuencia.

(1) Personal Use of Copyrighted Material: If you use Microchip copyrighted material solely for your personal use you do not need Microchip’s written permission to use such material. However, distribution or reproduction of such materials and images to others (including posting on a website) does require Microchip’s written permission.




*********************
PIC12F629/675
*********************


CPU RISC de alto rendimiento:
Sólo 35 instrucciones para aprender
Todas las instrucciones se ejecutan en un solo ciclo de reloj, excepto los saltos que requieren dos
Frecuencia de Operación de 0 a 20 MHz (DC a 200 nseg de ciclo de instrucción)
Posibilidad de Interrupciones
Pila (Stack) por hardware de 8 niveles
Modos de Direccionamiento Directos, Indirectos, y Relativos

Características especiales:
Opciones de oscilador Interno y externo
Oscilador interno de 4Mhz calibrado de fábrica a +/- 1%
Soporte para Oscilador externo a cristal y resonador
Tiempo de reacción tras el modo SLEEP: 5us (típico a 3.0V)
Ahorro de energía en el modo SLEEP
Amplio rango de voltaje  - 2.0V a 5.5V
Rango de temperaturas Industrial y extendida
Power-on-Reset (POR) de bajo consumo
Power-up Timer (PWRT) y Oscilador Start-up Timer (OST)
Brown-out Detect (BOD)
Watchdog Timer(WDT) con oscilador independiente para una operación confiable
MCLR/pin de entrada, multiplexado
Interrupción por cambio de estado
Resistencias pull-up internas programables Individualmente
Protección de código Programable
Alta duración de FLASH/EEPROM
- 100,000 escrituras  en memoria Flash
- 1,000,000 escrituras en EEPROM
- Flash/Data EEPROM Retención:> 40 años

Características de bajo consumo:
Corriente de Reserva (standby):
- 1 nA  a 2.0V, típico
Corriente de operación:
- 8.5 uA a 32Khz, 2.0V, típico
- 100 uA a 1Mhz, 2.0V, típico
Corriente Watchdog Timer:
- 300 nA 2.0V, típico
CorrienteTimer1 :
4 uA a 32Khz, 2.0V, típico

Características de  Periféricos:
6 entradas/salidas con control de dirección individual(*)
Alta corriente suministrada: 25mA
Módulo Comparador Analógico
Comparador de Voltaje Programable. Módulo (CVREF)
Entradas multiplexadas programables.
La salida del Comparador es accesible externamente
Módulo Convertidor Analógico/Digital (PIC12F675):
- Resolución de 10 bits
- Entrada de 4 canales programable
- Entrada de Referencia de Voltaje
Timer0: temporizador/contador de 8 bits con prescaler de 8 bits programable.
Timer1 Extendido:
- Temporizador/contador de 16 bytes con prescaler
- Modo de Entrada externo (External Gate Mode)
- Opción para usar OSC1 y OSC2 en modo de LP como oscilador de Timer1, si el modo INTOSC está seleccionado
Programación en circuito (In-Circuit Serial Programming (ICSP)) vía dos pines

(*) GP3 puede funcionar como MCLR, como un pin de entrada con interrupción por cambio de estado o como Vpp para la programación del PIC, pero no como pin de salida.


« Última modificación: Agosto 24, 2011, 02:01:10 por Suky » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #1 : Marzo 09, 2009, 02:37:12 »

esta imagen nos permite ver las pocas diferencias existentes entre ambos PICs, básicamente que el 12F675 está dotado de 4 canales A/D. estas diferencias serán puntualmente comentadas a lo largo del tema:



y en la distribución de sus pines, una vista más detallada:




un detalle importante apuntado por el amigo palitroquez en otro hilo y que conviene tener presente: esta hoja de datos tiene la referencia DS41190E, que es la última versión del datasheet en este momento. podría pasarnos que hubiera alguna actualización importante en la que se corrijan errores con respecto a la versión que hemos descargado hace unos meses, y de igual forma revisar cualquier posible documento de erratas sobre el datasheet con el cual vayáis a trabajar. en el caso del PIC12F629/675 no dejar de ver: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010114

un saludo


« Última modificación: Marzo 09, 2009, 04:31:01 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #2 : Marzo 09, 2009, 02:37:31 »

Diagrama de Bloques del PIC, con la descripción de sus pines y configuración interna. Podemos encontrar información adicional en el Manual de Referencia (PIC Mid-Range Reference Manual (DS33023)) en la web de Microchip,



Descripción detallada de los pines del PIC:



Esto es a mi entender el punto de partida necesario. Las primeras hojas del datasheet nos dirán si es la elección correcta a nuestras necesidades. ¿dispone de un número suficiente de entradas/salidas? (en adelante I/O), ¿necesitamos o sería muy conveniente disponer de un puerto serie por hardware?, ¿de un puerto USB?, ¿de más memoria?... todo esto lo podemos ver en unas pocas páginas del datasheet.

A modo de un pequeño repaso:
AN0..AN3 = Entradas de los canales de los convertidores A/D
CIN+ y CN- = Entradas Comparador
COUT = Salida Comparador
CLKIN = Entrada de reloj /conexión oscilador RC
CLKOUT = Salida FOSC/4
GP0..GP5 = I/O bi-direccionales  con pull-up programable e interrupción por cambio de estado.(*)
ICSPDAT = Pin de Datos para programación ICSP
ICSPCLK = Pin de Reloj para programación ICSP
INT = Interrupción Externa
T0CKI = Entrada reloj de TMR0
T1CKI = Reloj TMR1
T1G = TMR1 gate
VREF = Voltaje de Referencia Externo

(*) No es así en el caso de GP3, que puede funcionar solo como entrada.
GP3 = entrada  con interrupción por cambio de estado.
MCLR = Master Clear
VPP = Voltaje de programación

« Última modificación: Marzo 10, 2009, 08:03:46 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #3 : Marzo 09, 2009, 03:14:11 »

Bien, como introducción a los Registros del PIC creo que 'Configuration Bits' (capítulo 9.1 del datasheet) es un buen punto de partida. Si bien es algo que podemos hacer a la hora de grabar el PIC seleccionando las opciones adecuadas en el software de grabación en mi opinión es altamente recomendable añadirlo al principio de nuestro programa. Según el lenguaje de programación hay diferentes sintaxis para hacerlo:

en ASM -> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
en CCS -> #FUSES XT,NOWDT,NOPROTECT,PUT
Como se puede ver, son bastante intuitivas ambas formas de hacerlo

en PSI -> Define CONF_WORD = 0x31a1
En el menú Options .. Configuration bits indicamos las opciones deseadas y nos da como resultado el valor de CONF_WORD



en PBP -> @ DEVICE pic12F675, 0x31A1
Sin embargo, y aquí quería llegar, ¿cómo obtenemos ese valor para PBP?
Podemos recurrir a ejecutar el software  de programación (Winpic800 por ejemplo), establecer las opciones y tomar nota del valor que devuelve en la posición 0x2007 para posteriormente añadirlo a la instrucción @ DEVICE pic12F675, valor. (ver que hay una diferencia en el valor devuelto: PSI = 0x31a1 y Winpic = 0x3FA1)



Para entender esta diferencia de valor y adentrarnos ya en el aprendizaje de los Registros, veamos la siguiente imagen y su descripción:



bit 13-12    BG1:BG0: bits de calibración 'Bandgap' para voltaje de BOD  y POR (1)
                00 = Lowest bandgap
                11 = Highest bandgap
bit 11-9     No implementados: se leen como ‘0’
bit 8          /CPD: Data Code Protection bit(2)
                1 = Data memory code protection deshabilitada
                0 = Data memory code protection habilitada
bit 7          /CP: Code Protection bit(3)
                1 = Program Memory code protection deshabilitada
                0 = Program Memory code protection habilitada
bit 6          BODEN: Brown-out Detect Enable bit(4)
                1 = BOD habilitado
                0 = BOD deshabilitado
bit 5         MCLRE: GP3/MCLR pin function select(5)
                1 = GP3/MCLR pin function como MCLR
                0 = GP3/MCLR pin function como digital I/O, MCLR internamente llevada a VDD
bit 4         /PWRTE: Power-up Timer Enable bit
                1 = PWRT deshabilitado
                0 = PWRT habilitado
bit 3         WDTE: Watchdog Timer Enable bit
                1 = WDT habilitado
                0 = WDT deshabilitado
bit 2-0      FOSC2:FOSC0: Oscillator Selection bits
               111 = oscilador RC: CLKOUT en GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
               110 = oscilador RC: I/O en GP4/OSC2/CLKOUT, RC en GP5/OSC1/CLKIN
               101 = oscilador INTOSC: CLKOUT en GP4/OSC2/CLKOUT, I/O en GP5/OSC1/CLKIN
               100 = oscilador INTOSC: I/O en GP4/OSC2/CLKOUT, I/O en GP5/OSC1/CLKIN
               011 = EC: I/O en GP4/OSC2/CLKOUT, CLKIN en GP5/OSC1/CLKIN
               010 = oscilador HS: cristal/resonador de alta frecuencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
               001 = oscilador XT: cristal/resonador en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
               000 = oscilador LP: cristal de baja frecuencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN

*******
Notas:
1: los bits de calibración de bandgap están programados de  fábrica y se deben leer y guardar antes de borrar el dispositivo. Tal como está especificado en 'PIC12F629/675 Programming Specification'. Estos bits se reflejan en la exportación de la palabra de configuración. Las Herramientas de Desarrollo de Microchip mantienen todos los bits de calibración a la configuración de fábrica.
2: Todos los datos contenidos en la EEPROM se borrarán cuando está desactivada la protección de código.
3: Toda la Memoria de Programa, incluido el valor  OSCCAL, se borrará cuando está desactivada la protección de código.
4: Habilitar Brown-out Detect no habilita automáticamente Power-up Timer.
5: Cuando MCLR se declaró en los modos INTOSC o RC,  se deshabilita el reloj del oscilador interno.
/: Indica 'negado' en el modo texto. 0 = habilitado, 1 = deshabilitado
*****

Ahora veamos bit a bit como llegar al punto de partida... el valor 0x31A1. Este valor hexadecimal se corresponde en binario con 11-000-110100-001 (los guiones son para mayor claridad), y consultando la tabla vemos que:
bandgap = 11 (Highest)
bits 11..9 = 000
/CPD = 1 (deshabilitado)
/CP = 1 (deshabilitado)
BODEN = 0 (deshabilitado)
MCLRE = 1 (funciona como MCLR)
/PWRTE = 0 (habilitado)
WDTE = 0 (deshabilitado)
FOSC2: FOSC0 = 001 (oscilador XT: cristal/resonador en OSC2 y OSC1)

¿y que pasaba con el valor 0x3FA1? Veamos este valor en binario: 11-111-110100-001 para apreciar que solo cambian los bits 11..9 cuyo valor siempre se lee como '0' y por tanto a efectos de configuración ambos valores proporcionan igual resultado.

Esta palabra de configuración de 14 bits se escribe durante el proceso de grabación del PIC y no se puede modificar durante la ejecución del programa. Ocupa la posición reservada de memoria 0x2007.

un saludo
« Última modificación: Marzo 12, 2009, 06:24:53 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #4 : Marzo 11, 2009, 03:58:34 »


Configuraciones de oscilador

TIPOS DE OSCILADOR
El PIC12F629/675 puede funcionar en ocho modos diferentes de oscilador. El usuario puede programar tres bits de configuración (FOSC2:FOSC0) para seleccionar uno de estos ocho modos:
• LP - Cristal de Bajo Consumo
• XT - Cristal/Resonador
• HS - Cristal/Resonador de Alta Velocidad
• RC - Resistencia/Condensador Externa (2 modos)
• INTOSC - Oscilador Interno (2 modos)
• EC - Reloj Externo

OSCILADOR DE CRISTAL/RESONADOR CERÁMICO
En los modos XT, LP o HS un cristal/resonador cerámico se conecta a los pines OSC1 y OSC2 para establecer la oscilación (ver la Figura 9-1). El diseño de oscilador del PIC12F629/675 requiere el uso de un 'parallel cut crystal'. El uso de 'series cut crystal' (1) puede producir una frecuencia fuera de las especificaciones del fabricante del cristal. (1) la traducción más cercana que consigo: 'modo de resonancia paralelo o serie'
Cuando funciona en modo XT, LP o HS, el dispositivo puede tener una fuente de reloj externa en el pin OSC1 (ver la Figura 9-2).




 
Nota: una mayor capacidad aumenta la estabilidad del oscilador pero también aumenta el tiempo de puesta en marcha. Estos valores son una guía solamente. RS pueden requerirse en modo HS, así como modo XT para evitar sobrecargar el cristal. Dado que cada cristal tiene sus propias características, el usuario debe consultar con el fabricante del cristal para conocer los valores apropiados de los componentes externos.

RELOJ EXTERNO
Para aplicaciones donde un reloj está disponible ya en el circuito, podemos usarlo directamente con el pic12f629/675 a condición de que esta fuente de reloj externa cumpla las especificaciones de AC/DC listadas en la Sección 12.0
La figura 9-2 muestra como se debería configurar el circuito del reloj externo

OSCILADOR RC
Para aplicaciones donde no se necesite una temporización precisa, podemos usar la opción de oscilador RC. La operación y la funcionalidad del oscilador RC depende de varias variables. La frecuencia está en función de :
-Tensión de alimentación.
-Los valores de Resistencia (REXT) y Condensador (CEXT).
-La temperatura.
Se ha de tener presente también la tolerancia de R y C.
Dos opciones están disponibles para este modo de Oscilador, que permiten que GP4 sea usado como una entrada/salida (I/O) de propósito general o como una salida FOSC/4.



OSCILADOR 4 MHZ INTERNO
Cuando está calibrado, el oscilador interno proporciona un Reloj de sistema (nominal) de 4 MHz. Ver Especificaciones Eléctricas, en la Sección 12.0, para información sobre variación de voltaje y temperatura.
Dos opciones están disponibles para este modo de Oscilador que permiten que GP4 sea usado como I/O de propósito general o una salida FOSC/4.

Calibración del Oscilador Interno - Se tratará más adelante, junto con bandgap.

CLKOUT
Los dispositivos PIC12F629/675 se pueden configurar para proveer de una señal de reloj en los modos INTOSC y RC.
Cuando está configurado, se obtiene la frecuencia del oscilador dividida por cuatro (FOSC/4) en la salida del pin GP4/OSC2/CLKOUT. El FOSC/4 puede ser usado para test  o para sincronizar otra lógica.

para ampliar información:
http://www.huarpe.com/electronica/osc/oscilador-xtal.html
http://en.wikipedia.org/wiki/Crystal_oscillator#Resonance_modes
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf

En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #5 : Marzo 11, 2009, 04:25:51 »

Como conclusión al tema del oscilador me ha parecido importante incluir otro punto de vista...

Siempre he visto los condensadores del cristal del oscilador derivados a GND pero hace poco tiempo un compañero del Foro Todopic inauguró un tema en el que comenta su conexión a VDD.

Otro compañero (y amigo) dedicó algún tiempo a estudiar las diferencias y expuso sus conclusiones, que podemos verlas aquí:

Condensadores Oscilador -- GND vs. VDD

un saludo
« Última modificación: Marzo 12, 2009, 06:26:38 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #6 : Marzo 13, 2009, 11:05:45 »

Los Modos de RESET


Un RESET supone reiniciar o restablecer las condiciones de funcionamiento del PIC
El PIC12F629/675 diferencia entre varios modos de RESET:
Power-on Reset (POR)
Watchdog (WDT) durante un funcionamiento normal
Watchdog (WDT)  durante el modo SLEEP
/MLCR durante un funcionamiento normal
/MLCR durante el modo SLEEP
Brown-out Detect (BOD)



El comportamiento del circuito y el estado de los registros afectados por un RESET son diferentes dependiendo de la situación que se produzca. Algunos registros no se verán afectados en cualquier condición de RESET; su estado es desconocido en Power-on Reset (POR) y no cambian en cualquier otro modo de RESET. La mayoría de los demás registros se restablecen a un “estado de RESET ” en:
Power-on Reset
/MCLR Reset
WDT Reset
WDT Reset en modo SLEEP
Brown-out Detect (BOD) Reset

No están afectados por un 'despertar ' (wake-up) de WDT, ya que se considera como la reanudación de una operación normal. Es posible distinguir por software el origen del RESET. Para ello, basta con leer los bits /TO y /PD del registro de estado (Status) ya que son activados o borrados según las situaciones de RESET como se indica en la Tabla 9-4 al final de este post. Estos bits se utilizan en el software para determinar la naturaleza del RESET. Para obtener una descripción completa de los Estados de RESET de todos los registros, consultar la Tabla 9-7 en la página 59 del datasheet.  Véase la Tabla 12-4 en la sección 'Electrical Specifications Section' para la especificación del ancho de pulso.

/MCLR
Se dispone de un pin destinado específicamente a ejecutar un RESET en el caso de una falla o cuando sea necesario restablecer el sistema. Esta señal se aplica al pin /MCLR, cuya entrada está negada, por lo cual tendremos que conectarlo a la alimentación positiva VDD si queremos que nuestro PIC funcione.
Esta entrada no sólo se activa de manera externa, si no que el propio PIC la ejecuta en las siguientes ocasiones:
- La tensión de alimentación del PIC ha caído por debajo de los 2.2 V
- Si se acaba de encender el circuito y PWRT está activado, el PIC permanece en estado de RESET hasta que la tensión se estabiliza.

Una opción de /MCLR interno se puede establecer activando el bit MCLRE en el registro 'Configuration Word', /MCLR es llevado internamente a VDD. No se dispone de la opción pull-up en el pin /MCLR
El PIC12F629/675 dispone de un filtro de ruido en /MCLR Reset para detectar e ignorar pulsos pequeños (provocados por ruido en la alimentación, electricidad estática, interferencias... por ejemplo).
Se debe tener en cuenta que un WDT Reset no lleva a /MCLR a un estado bajo.

Circuito recomendado por Microchip:



Si usamos la programación en circuito (ICSP) sucederá que al momento de grabar el PIC la tensión de programación (Vpp = +/- 13V) llegará al resto del circuito, con lo que ello conlleva. Para evitarlo añadiremos un diodo en serie con la resistencia en el circuito. En la imagen podemos ver también un pulsador que lleva el pin a GND a través de una resistencia de 100 Ohms para forzar un RESET manual.



POWER-ON RESET (POR)
Mantiene al PIC en estado de RESET hasta que VDD haya alcanzado un nivel suficientemente alto para  su funcionamiento correcto. Para usar POR simplemente lleva el pin /MCLR a través de una resistencia a VDD. Esto eliminará componentes RC externos generalmente necesarios para crear un Power-on Reset.
Un tiempo máximo de subida es necesario para VDD. Consulta las Especificaciones Eléctricas para obtener detalles (véase la Sección 12.0).
Si está habilitado BOD, no se aplica la especificación de tiempo máximo de subida. La circuitería de BOD mantendrá el dispositivo en RESET hasta que VDD alcance VBOD (se verá con Brown-out Detect (BOD)). Cuando el dispositivo comienza su funcionamiento normal (sale de la condición de RESET), los parámetros de operación del dispositivo (es decir, tensión, frecuencia, temperatura, etc.) deben cumplirse para garantizar la operación. Si no se cumplen estas condiciones, el dispositivo se mantendrá en estado de RESET hasta que se cumplan.
Nota: Power-on Reset no provoca un RESET interno cuando VDD decae.

POWER-UP TIMER (PWRT)
Power-up Timer proporciona un tiempo de espera fijo de 72ms (nominal) usado para que la alimentación se estabilice, para POR o  Brown-out Detect. El temporizador de Power-up opera con un oscilador RC interno. El chip se mantiene en RESET mientras PWRT está activo. La demora de PWRT permite a VDD alcanzar un nivel aceptable. Un bit de configuración, /PWRTE, puede deshabilitar (si está a 1) o habilitar (si está a 0) Power-up Timer. Siempre debe estar habilitado Power-up Timer cuando está habilitado Brown-out Detect. La demora de Power-up Timer variará de chip a chip y debido a:
Variaciones en la alimentación (VDD).
Cambios en la temperatura
Cambios del proceso.
Consulta los parámetros de DC para obtener detalles (sección 12.0).

« Última modificación: Marzo 13, 2009, 11:19:10 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #7 : Marzo 13, 2009, 11:11:48 »

OSCILADOR START-UP TIMER (OST)
Proporciona un retardo de 1024 ciclos de oscilador (desde la entrada de OSC1) después de la demora PWRT. Esto asegura que el oscilador de cristal o resonador ha sido iniciado y estabilizado. OST se invoca sólo para modos XT, LP y HS y sólo en Power-on Reset o un 'despertar' del modo SLEEP.

BROWN-OUT DETECT (BOD)
Los PIC12F629/675 tienen incorporado un circuito BROWN-OUT DETECT (BOD).Un bit de configuración en el registro Configuration Word, BODEN, puede deshabilitar (si está a 0) o habilitar (si está a 1) el circuito Brown-out Detect.
Monitoriza la alimentación, y si VDD cae por debajo de VBOD pero es mayor que el parámetro (TBOD) (véase sección 12.0 Tabla 2.4 – página 96), Brown-out Detect forzará un RESET del dispositivo. Esto ocurrirá independientemente del 'VDD slew-rate(*)'. No se garantiza un RESET si VDD cae por debajo de VBOD pero es menor que el parámetro (TBOD).
(*) Se le define como la velocidad de cambio del voltaje de salida con respecto a las variaciones en el voltaje de entrada (Wikipedia)

En cualquier RESET (Power-on, Brown-out, Watchdog, etc.), el chip permanecerá en RESET hasta que VDD supere BVDD (consulte la figura 9-6). Power-up Timer se invocará, si está habilitado, y mantendrá el chip en RESET durante 72ms adicionales. Si VDD cae por debajo de BVDD mientras se está ejecutando Power-up Timer, el chip regresará a Brown-out Detect y se reiniciará Power-up Timer. Una vez VDD se eleva por encima de BVDD, el Power-up Timer ejecutará un RESET de 72ms.
Nota: Brown-out Detect no habilita Power-up Timer si el bit /PWRTE en Configuration Word está habilitado.



TIME-OUT SEQUENCE
Al recibir la alimentación, la secuencia de tiempo de espera es como sigue: en primer lugar, se invoca PWRT  una vez que POR ha terminado. A continuación, se activará OST. El tiempo de espera total variará en función de la configuración del oscilador y el estado del bit /PWRTE. Por ejemplo, en modo de CE con /PWRTE a 0 (PWRT deshabilitado), no habrá tiempo de espera en absoluto. La figura 9-7, la figura 9-8 y la figura 9-9 del datasheet ilustran secuencias de tiempo de espera.
Dado que los intervalos de espera suceden en el pulso POR, si /MCLR se mantiene bajo durante demasiado tiempo, los intervalos de espera expirarán. Si / MCLR pasa a un estado alto comenzará la ejecución inmediatamente (ver la Figura 9-8). Esto es útil para propósitos de test  o para sincronizar más de un dispositivo PIC12F629/675 en funcionamiento en paralelo.

POWER CONTROL (PCON) STATUS REGISTER
El registro PCON (dirección 8Eh)  tiene dos bits. El Bit0 es BOD (Brown-out Detect). BOD es desconocido  para Power-on Reset. Se debe establecer por el usuario y comprobado en posteriores RESET para confirmar si BOD = 0, que indica que un descenso (brown-out) ha ocurrido. El bit BOD STATUS no tiene mayor importancia y no es necesariamente previsible si está deshabilitado el circuito de Brown-out (estableciendo BODEN bit = 0 en Configuration Word).
El Bit1 es POR (Power-on Reset). Es un 0 en Power-on Reset y no se ve afectado. El usuario debe escribir un  1 en este bit después de un Power-on Reset. En un RESET posterior, si POR es  0, indicará que se ha producido un Power-on Reset (por ejemplo, VDD puede haber caído demasiado).




Mas información:
Ver los gráficos y tablas al final del capítulo 9 el datasheet, así como las Especificaciones Eléctricas en el capítulo 12.

APPNote:
http://ww1.microchip.com/downloads/en/AppNotes/00607b.pdf
Mid-Range MCU Family Reference Manual. Debería estar en nuestro ordenador tal como lo está el datasheet del PIC, ya que contiene información adicional a éste:
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf
« Última modificación: Marzo 13, 2009, 11:20:12 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #8 : Marzo 13, 2009, 02:20:57 »

/CP y /CPD
Tanto la Memoria de Programa como la Memoria de Datos del PIC12629/675 pueden ser protegidas para que no puedan ser leídas por otra persona. Esto no impide que el PIC funcione como siempre, lo único que nos impide es leerlo.
Estas protecciones se seleccionan en el registro Configuration Word y por tanto no serán modificables en tiempo de ejecución.
Hemos de tener cuidado con estas opciones y no activar la protección hasta tener la absoluta seguridad de que el programa es la versión definitiva, porque una vez grabado el PIC con la protección activada no podremos volver atrás.

Bandgap Calibration bits
00 = Lowest
01 = Mid low
10 = Mid high
11 = Highest
Sirven como configuración para Brown-out Detect y Power-on Reset. El datasheet menciona que son bits preprogramados de fábrica y no se deben alterar.
La pregunta que me surge es ¿Cómo hago para mantener su valor de fábrica si no lo conozco?. Para resolver esta pregunta basta con realizar una lectura del PIC desde el software del programador, y en función del valor obtenido sabremos ese valor de bandgap.
He leído un PIC12F675 usando un programador GTP-USB+ y Winpic800 y la respuesta ha sido esta:
bandgap 00 = Lowest
Si recordamos que al principio del tema configuramos para oscilador XT, MCLRE on y PWRTE on y con un bandgap = 11 (Highest) y obteníamos el valor 0x3FA1 ahora el valor obtenido es 0x0FA1. Así, según el valor de bandgap leído tendríamos 0x0FA1, 0x1FA1, 0x2FA1 o 0x3FA1.
Trabajar con este software y este programador es realmente muy cómodo, ya que él mismo se encarga de guardar el valor de bandgap y posteriormente restaurarlo al PIC. En aquellos casos que esto no sucede, si hemos cambiado el valor de bandgap y no coincide con el del PIC en cuestión, nos lo advertirá mediante un cuadro de diálogo bastante confuso buena parte de las veces.

Calibrar el Oscilador Interno (OSCCAL)
Una instrucción de calibración está programada en la última ubicación de la Memoria de Programa. Esta instrucción es un RETLW XX, donde el literal es el valor de calibración. El literal se coloca en el registro OSCCAL para establecer la calibración del oscilador interno. Para un mejor funcionamiento, usar un condensador de desacoplo (por ejemplo 100nF) entre VDD y VSS del PIC, y lo más próximo posible a sus conexiones.
Nota: al borrar el dispositivo se borrará también el valor preprogramado de calibración interna para el oscilador interno. El valor de calibración debe guardarse antes de borrar el PIC, tal y como se especifica en 'PIC12F629/675 Programming specification'. Las herramientas de desarrollo de Microchip mantienen todos los bits de calibración a su configuración de fábrica.
Al igual que en el caso del bandgap, el programador GTP-USB+ lee el valor de calibración y posteriormente lo restaura al momento de grabar el PIC. Pero esto no es así con todos los programadores y dada la importancia de este valor, responsable de esa precisión del +/- 1% del oscilador interno, no restaurarlo implica que la frecuencia se desviará en mayor o menor medida de los 4Mhz.
Con la lectura del PIC12F675 (mencionado en bandgap) he comprobado que el valor de la última posición de memoria es 0x3448. Con mis primeros PICs de esta serie, programados con un TSE-20, procedía a su lectura y escribía este valor en una pequeña etiqueta adhesiva que pegaba en la parte inferior del PIC... Este valor es diferente de un PIC a otro, incluso entre PICs de la misma serie, de manera que no se puede tomar como referencia para todos.
Mejor que andarse con etiquetas es guardar ese valor y restaurarlo mediante el o los comandos del lenguaje de programación utilizado.

Un ejemplo en ASM es:
bsf           STATUS, RPO    ;Bank 1
call           3FFh               ;Get the cal value
movwf       OSCCAL           ;Calibrate
bcf           STATUS, RPO    ;Bank 0


y la forma de hacerlo en PBP es mediante la instrucción 'DEFINE OSCCAL_1K'

Con esto doy por terminada (en principio al menos) la parte dedicada a Configuration Word o palabra de configuración del PIC.

para ampliar información:
Dogflu66 creó un tema sobre el PIC12F675 en el Foro Todopic que merece nuestra atención:
http://www.todopic.com.ar/foros/index.php?topic=24123.msg195211#msg195211


« Última modificación: Marzo 13, 2009, 02:32:51 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #9 : Marzo 14, 2009, 12:48:30 »

GPIO PORT
Hay seis pines I/O de propósito general disponibles. Dependiendo de qué periféricos estén habilitados, puede que algunos o todos los pines no estén disponibles como I/O de propósito general. En general, cuando se habilita un periférico, el pin asociado no puede usarse como un pin I/O de propósito general.

GPIO and the TRISIO Registers
GPIO es un puerto bidireccional de 6 bits. El correspondiente registro de dirección de datos es TRISIO. Configurar un bit TRISIO (= 1) hará que el correspondiente GPIO sea una entrada (es decir, pondrá el controlador de salida correspondiente en un modo de alta impedancia). Configurar un bit TRISIO (= 0) hará que el correspondiente GPIO sea una salida (es decir, pondrá el contenido del latch de salida en el pin seleccionado). La excepción es GP3, que sólo es de entrada y su bit TRISIO siempre se leerá como ‘ 1 ’.

Leyendo el registro GPIO se lee el estado de los pines, del mismo modo que una acción de escritura escribirá en el latch de puerto. Todas las operaciones son 'read-modify-write' (lectura-modificación-escritura). Por lo tanto, una escritura en un puerto implica que se leen los pines de puerto, este valor es modificado y, a continuación, escrito en el latch del puerto de datos.GP3 se lee como un  0 cuando MCLREN = 1. El Registro TRISIO controla la dirección de los pines GP, incluso cuando se usan como entradas analógicas. El usuario debe asegurar que los bits en el registro TRISIO se mantengan activados al utilizarlos como entradas analógicas. Los pines I/O configurados como entradas analógicas siempre se leen como 0.

Nota: Los Registros ANSEL(9Fh) y CMCON(19h) se deben inicializar para configurar los canales analógicos como entradas digitales. Los pines configurados como entradas analógicas se leerán como 0.


bit 7-6: Sin implementar. Leídos como 0
bit 5-0: GPIO<5:0>: pines I/O de prpósito general
  1 = El pin del Puerto es >VIH
  0 = El pin del Puerto es <VIL


bit 7-6: Sin implementar. Leídos como 0
bit 5-0: TRISIO<5:0>: bits de Control I/O Tri-estado de propósito general
  1 = pin GPIO configurado como una entrada (tri-estado)
  0 = pin GPIO configurado como una salida
Note: TRISIO<3> siempre se lee como 1.

Funciones adicionales de los pines del PIC
Cada pin GPIO en el PIC12F629/675 tiene una opción de interrupción-por-cambio de estado y cada pin GPIO, excepto GP3, tiene una opción 'weak pull-up' (resistencia pull-up interna).

WEAK PULL-UP
Cada uno de los pines GPIO, excepto GP3, tiene una opción 'weak pull-up' configurable individualmente. Los bits de control WPUx habilitan o deshabilitan cada una de las pull-up. Consulta el registro 3-3. Cada pull-upl se desactiva automáticamente cuando el pin de puerto está configurado como una salida. Los pull-ups están deshabilitados en un Power-on Reset por el bit /GPPU (Registro OPTION_REG).


bit 7-6: Sin implementar. Leídos como 0
bit 5-4: WPU<5:4>: bits del Registro Weak Pull-up
  1 = Pull-up habilitado
  0 = Pull-up deshabilitado
bit 3: Sin implementar. Leído como 0
bit 2-0: WPU<2:0>: bits del Registro Weak Pull-up
  1 = Pull-up habilitado
  0 = Pull-up deshabilitado

Notas:
1 - /GPPU debe estar habilitado para que las pull-up internas lo estén también. Para ello, en el registro 'OPTION REGISTER (ADDRESS: 81h), el bit 7 ha de ser un 1
2 – Weak pull-up se deshabilita automáticamente si el pin está como salida (TRISIO = 0).

INTERRUPT-ON-CHANGE
Cada uno de los pines GPIO es configurable individualmente para una interrupción-por-cambio de estado. Los bits de control IOC habilitan o deshabilitan la función de interrupción para cada pin. La interrupción-por-cambio de estado está deshabilitada en un Power-on Reset.
Para habilitar la interrupción, los valores se comparan con el valor almacenado en la última lectura de GPIO. La ‘ no coincidencia ’  con la última lectura establece un OR, para activar el GP Port Change Interrupt flag bit (GPIF) en  el Registro INTCON.

Esta interrupción puede 'despertar' al dispositivo del modo SLEEP. El usuario, en la 'Interrupt Service Routine', puede borrar la interrupción de la siguiente manera:
- cualquier lectura o escritura de GPIO. Esto terminará la condición de no coincidencia.
- borrar el bit de bandera (flag bit) GPIF (Registro INTCON). Una condición de no coincidencia seguirá activando el bit de bandera GPIF. Leyendo GPIO se pone fin a la condición de no coincidencia y permite borrar el bit de bandera GPIF.
Nota: si debe realizarse un cambio en el pin I/O cuando una operación de lectura está siendo ejecutada (comienzo de Q2 cycle), la bandera de interrupción GPIF no se puede establecer.


bit 7-6: Sin implementar. Leídos como 0
bit 5-0: IOC<5:0>: bit de Control GPIO para Interrupción-por-cambio de estado
  1 = Interrupción habilitada
  0 = Interrupción deshabilitada
Nota: Global interrupt enable (GIE) (Registro INTCON) debe estar habilitada para que se reconozcan las interrupciones individuales.



Breve Descripción de los pines del PIC
Cada pin GPIO está multiplexado con otras funciones. Los pines y sus funciones combinadas se describen de una manera resumida a continuación. Información específica sobre funciones tales como Comparadores o Convertidor A/D se tratarán posteriormente en otras secciones.

GP0/AN0/CIN+
GP0 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada del módulo Comparador

GP1/AN1/CIN-/VREF
GP1  se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada del módulo Comparador
- Entrada de referencia de voltaje para el módulo A/D (PIC12F675 solamente)

GP2/AN2/T0CKI/INT/COUT
GP2 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada de reloj para TMR0
- Una Interrupción externa 'edge triggered' (disparo por flanco)
- Salida digital del módulo Comparador

GP3/MCLR/VPP
GP3 se puede configurar para una de las siguientes funciones:
- Entrada de propósito general
- Como Master Clear Reset
- Alimentación para programación del PIC - Vpp

GP4/AN3/T1G/OSC2/CLKOUT
GP4 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada analógica del módulo A/D (PIC12F675 solamente)
- Entrada TMR1 (gate input)
- Conexión de cristal/resonador
- Salida de reloj

GP5/T1CKI/OSC1/CLKIN
GP5 se puede configurar para una de las siguientes funciones:
- I/O de propósito general
- Entrada de reloj TMR1
- Conexión de cristal/resonador
- Entrada de reloj

Consultar desde la figura 3-1 hasta la 3-5 (páginas 22..24) del datasheet para ver los diagramas de conexionado de los pines.


En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #10 : Marzo 17, 2009, 12:32:37 »

MÓDULO TIMER0

El módulo temporizador/contador Timer0 tiene las siguientes características:
• temporizador/contador de 8 bits
• lectura y escritura
• prescaler de 8 bits programable
• selección de reloj interno o externo
• interrupción por desbordamiento (de FFh a 00h)
• selección de flanco (edge) para reloj externo.

Diagrama de bloques del módulo de Timer0 y el prescaler compartido con el WDT:


Funcionamiento del Timer0
El Timer0 puede funcionar de dos formas: como contador de pulsos externos o como temporizador para calcular intervalos de tiempo. En el caso de que dicha señal provenga del reloj interno, el Timer0 se utiliza para generar interrupciones periódicas a través de una cuenta programada. En este modo podemos temporizar eventos.
En el caso de que dicha señal sea de una fuente externa, es especialmente útil para contar el número de pulsos que dicha señal genera en el tiempo ya que cada pulso de dicha señal incrementa el TMR0.

El modo Temporizador de Timer0 se selecciona desactivando el bit de T0CS (OPTION_REG <5>). En este modo, el módulo de Timer0 se incrementa con cada ciclo de instrucción (o cada x ciclos dependiendo del  prescaler). Si TMR0 está activado, el incremento se inhibe para los dos ciclos de instrucción siguientes. El usuario puede solucionar esto escribiendo un valor ajustado en el registro de TMR0.
El modo Contador se establece activando el bit de T0CS (OPTION_REG <5>). En este modo, incrementará el módulo de Timer0 ya sea en un flanco ascendente (rising edge) o un flanco descendente (falling edge) del pin GP2/T0CKI. La transición está determinada por el bit de control del flanco de origen (T0SE) - (OPTION_REG <4>). Limpiando el bit T0SE se selecciona el flanco ascendente, mientras que al ponerlo en alto se selecciona un flanco descendente.
En ambos casos al desbordarse (pasar de 0xFF a 0×0) el registro TMR0, la bandera de interrupción del Timer0 (bit T0IF del registro INTCON) se pone a 1.
Nota: el modo Contador tiene requisitos especiales para el reloj externo. Información adicional en el 'PIC Mid-Range Reference Manual (DS33023)' - http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf

Interrupción en Timer0
Una interrupción del Timer0 se genera cuando el registro del contador/temporizador de TMR0 se desborda (de FFh a 00h). Este desbordamiento activa el bit T0IF. La interrupción puede ser enmascarada borrando el bit de T0IE (INTCON <5>). El bit de T0IF (INTCON <2>) debe desactivarse por software por la rutina de interrupción del módulo Timer0 antes de que se vuelva a activar esta interrupción. La interrupción de Timer0 no puede despertar al PIC del modo SLEEP ya el temporizador está apagado durante este modo.

Usando Timer0 con un reloj externo
Cuando no se utiliza prescaler, la entrada de reloj externo es la misma que la salida del prescaler. La señal conectada a TOCKI es muestreada durante los ciclos Q2 y Q4 del reloj interno, por ello es necesario que permanezca en alto al menos por 2 Tosc más un pequeño retardo de 20nseg y lo mismo en bajo. (es decir, señales demasiado rápidas no se detectarán).

Nota: Los registros ANSEL(9Fh) y CMCON(19h) deben ser inicializados para configurar un canal analógico como una entrada digital. Los pines configurados como entradas analógicas son leídos como '0'. El registro ANSEL está definido para el PIC12F675.

Bits implicados en Option Register:

bit 6 INTEDG: Bit de selección de interrupción por flanco
  1 = Interrupción por flanco ascendente (rising edge) en pin GP2/INT
  0 = Interrupción por flanco descendente (falling edge) en pin GP2/INT
bit 5 T0CS: TMR0 Bit de selección de origen de reloj
  1 = Transición en pin GP2/T0CKI
  0 = Ciclo de instrucción interna (CLKOUT)
bit 4 T0SE: TMR0 Bit de selección de origen del flanco
  1 = Se incrementa en una transición alto-a-bajo en pin GP2/T0CKI
  0 = Se incrementa en una transición bajo-a-alto en pin GP2/T0CKI
bit 3 PSA: Bit de asignación del prescaler
  1 = Prescaler está asignado al WDT
  0 = Prescaler está asignado al módulo TIMER0
bit 2-0 PS2:PS0: Bits de selección Ratio-Prescaler
         

Prescaler
Un contador de  8 bits está disponible como prescaler para el módulo Timer0, o como un postscaler para el Watchdog Timer. Para simplificar, se hará referencia a este contador como “prescaler” . La asignación de prescaler está controlada en el software por el bit de control PSA (OPTION_REG <3>). Un 0 en el bit PSA asignará el prescaler a Timer0. Los valores de prescaler son seleccionables a través de los bits de PS2:PS0 (OPTION_REG <2:0>).
El prescaler no se puede leer o escribir. Cuando se asigna al módulo Timer0, todas las instrucciones que  escriban en el registro TMR0 (por ejemplo, CLRF 1 MOVWF 1, BSF 1, x.... etc.) borrarán el prescaler. Cuando está asignado a WDT, una instrucción de CLRWDT borrará el prescaler junto con el Watchdog Timer.

Cambiando la asignación del prescaler
La asignación del prescaler está totalmente bajo el control del software (es decir, se puede cambiar “sobre la marcha” durante la ejecución del programa).
Nota: Para evitar un RESET imprevisto, la siguiente secuencia de instrucciones (ejemplo 4 - 1) se debe ejecutar al cambiar la asignación prescaler de Timer0 a WDT. Para cambiar el prescaler de WDT al módulo TMR0, usa la secuencia del ejemplo 4.2. esta precaución se debe tomar siempre que WDT esté deshabilitado.





para más información:
http://micropic.wordpress.com/2007/06/24/temporizador-timer-0/
un ejemplo en Mikrobasic (a pesar de ser para otro PIC está muy bien documentado):
http://www.jvmbots.com/viewtopic.php?t=188

« Última modificación: Marzo 22, 2009, 03:27:29 por xocas » En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #11 : Marzo 22, 2009, 03:40:17 »


MÓDULO TIMER1 CON 'GATE CONTROL' (Entrada de Control)

El PIC12F629/675 dispone de un temporizador de 16 bits. El Timer1 tiene las siguientes características:
• temporizador/contador de 16 bits (TMR1H:TMR1L)
• lectura y escritura
• selección de reloj interno o externo
• opera en modo sincrónico o asíncrono
• interrupción por desbordamiento (de FFFFh a 0000h)
• Wake-up (despertar) por desbordamiento (modo asíncrono)
• entrada de habilitación opcional externa (/T1G)
• oscilador LP opcional
El Registro de Control de Timer1 (T1CON), mostrado en el registro 5-1, se utiliza para habilitar/deshabilitar y seleccionar las diversas características del módulo Timer1.

Diagrama de bloques básico del módulo Timer1:


Modos de operación del Timer1
Timer1 puede operar en uno de los tres modos:
• temporizador de 16 bits con prescaler
• contador sincrónico de 16 bits
• contador asíncrono de 16 bit
En el modo Temporizador, Timer1 se incrementa con cada ciclo de instrucción. En el modo Contador, Timer1 se incrementa en el flanco de subida de la entrada externa de reloj T1CKI. En suma, el reloj del modo Contador se puede sincronizar con el reloj del sistema microcontrolador o ejecutar asincrónicamente.
En los módulos de Contador y Temporizador, el reloj del temporizador/contador puede ser habilitado por la entrada /T1G. Si es necesario un oscilador reloj externo (y el microcontrolador está utilizando el INTOSC sin CLKOUT), Timer1 puede utilizar el oscilador LP como una fuente de reloj.
Nota: en el modo Contador, un flanco de bajada ha de ser registrado por el contador antes del primer incremento del flanco de subida

Interrupción Timer1
Los registros (TMR1H:TMR1L) de Timer1 se incrementan hasta FFFFh y vuelven a 0000h. Cuando el  Timer1 vuelve a 0, se habilita el bit de la bandera de interrupción (PIR1 <0>). Para habilitar la interrupción, se deben configurar estos bits:
• Timer1 bit de interrupción habilitada (PIE1 <0>)
• PEIE bit (INTCON <6>)
• GIE bit (INTCON <7>). La interrupción se borra desactivando la TMR1IF en la rutina de servicio de interrupción.
Nota: Los registros (TMR1H:TMR1L) y el bit TMR1IF deberían limpiarse antes de habilitar las interrupciones.

Prescaler Timer1
El Timer1 tiene cuatro opciones de prescaler permitiendo 1, 2, 4 u 8 divisiones del reloj de entrada. Los bits de T1CKPS (T1CON <5:4>) controlan el contador de prescale. El contador de prescale no se puede leer ni escribir directamente; sin embargo, el contador de prescaler está desactivado en una escritura en TMR1H o TMR1L.





bit 7:   Sin implementar, leído como 0
bit 6:   TMR1GE: bit de habilitación de Timer1 Gate
  si TMR1ON = 0 el bit se ignora
  si TMR1ON = 1
    1 = Timer1 está en ON si el pin /T1G está en estado bajo
    0 = Timer1 está en ON
bit 5-4: T1CKPS1:T1CKPS0: bits selección de la entrada de reloj Prescale para Timer1
  11 = 1:8 valor Prescale
  10 = 1:4 valor Prescale
  01 = 1:2 valor Prescale
  00 = 1:1 valor Prescale
bit 3:   T1OSCEN: bit de control para habilitar el Oscilador LP
  si  INTOSC sin CLKOUT está activo:
    1 = Oscilador LP habilitado como reloj de Timer1
    0 = Oscilador LP deshabilitado
  de lo contrario, el bit se ignora
bit 2: /T1SYNC: bit de control de sincronización de la entrada de reloj externa de Timer1
  TMR1CS = 1
    1 = No sincronizado
    0 = Sincronizado
  TMR1CS = 0 el bit se ignora. Timer1 usa el reloj interno
bit 1: TMR1CS: Selección de la fuente de reloj para Timer1
  1 = Reloj externo en pin T1OSO/T1CKI (en el flanco de subida)
  0 = Reloj interno (FOSC/4)
bit 0: TMR1ON: bit habilitación Timer1
  1 = Habilita Timer1
  0 = Detiene Timer1

Timer1: Operación en Modo Contador Asíncrono
Si el bit de control /T1SYNC (T1CON <2>) está habilitado, la entrada de reloj externa no está sincronizada. El temporizador sigue un incremento asíncronos a la fase del reloj interno. El temporizador seguirá ejecutándose durante el modo SLEEP y puede generar una interrupción por desbordamiento, que despertará al procesador.
Nota: Los Registros ANSEL(9Fh) y CMCON(19h) se deben inicializar para configurar los canales analógicos como entradas digitales. Los pines configurados como entradas analógicas se leerán como 0.

Leyendo y Escribiendo Timer1 en Modo Contador Asíncrono
La lectura de TMR1H o TMR1L, mientras se ejecuta el temporizador desde un reloj asíncrono externo, asegura una lectura válida (tener cuidado con el hardware). Sin embargo, el usuario debe tener en cuenta que leer el temporizador de 16 bits en dos registros de 8 bits plantea algunos problemas, ya que se puede desbordar el temporizador entre las lecturas.
Para las escrituras, se recomienda que el usuario simplemente detenga el temporizador y escriba los valores deseados. Una contención de la escritura puede suceder en los registros del temporizador, mientras el registro está  incrementándose. Esto puede producir un valor impredecible en el registro del temporizador.
Nota:
Leer los valores de 16 bits requiere atención. Los ejemplos 12-2 y 12-3 en el 'PIC® Mid-Range MCU Family Reference Manual (DS33023)' muestran cómo leer y escribir el Timer1 cuando se ejecuta en modo asíncrono.

Oscilador Timer1
Un circuito oscilador de cristal está integrado entre los pines OSC1 (entrada) y OSC2 (salida). Se habilita activando el bit de control T1OSCEN (T1CON <3>). El oscilador es un oscilador de baja potencia nominal de hasta 37 kHz., que sigue ejecutándose durante el modo SLEEP. Un cristal 32 kHz. es lo deseado. La Tabla 9-2 del datasheet muestra la selección de condensadores para el oscilador Timer1.

El oscilador Timer1 se comparte con el oscilador LP. Por tanto, Timer1 puede utilizar este modo sólo cuando el reloj del sistema se deriva del oscilador interno. De la misma forma que en el caso del oscilador LP, el usuario debe proporcionar un retraso por software para garantizar la puesta en marcha adecuada del oscilador.

Mientras está habilitado, TRISIO4 y TRISIO5 están activados. GP4 y GP5 ‘se leen 0’ y TRISIO4 y TRISIO5 ‘1’.

Nota: el oscilador requiere un tiempo de puesta en marcha y estabilización antes de usarse. Así, T1OSCEN debe activarse y establecerse un retardo adecuado antes de habilitar Timer1.

Timer1 en Modo SLEEP
Timer1 solo puede funcionar en el modo SLEEP cuando trabaja en el modo de Contador Asíncrono. En este modo, una fuente externa de cristal o reloj puede utilizarse para incrementar el contador. Para configurar el temporizador para activar el dispositivo:
• Timer1 debe estar en ON (T1CON <0>)
• bit TMR1IE (PIE1 <0>) debe estar habilitado
• bit PEIE (INTCON <6>) debe estar habilitado
El dispositivo se despertará en un desbordamiento. Si el bit GIE (INTCON <7>) se activa, el dispositivo se despertará y saltará a la rutina de servicio de interrupción en un desbordamiento.



para más información:
http://micropic.wordpress.com/2007/06/24/temporizador-timer-1/

En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #12 : Abril 29, 2009, 12:40:30 »


Las Interrupciones

Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para atender dicho acontecimiento y luego regrese y continúe la tarea que estaba realizando antes de que se presentara la interrupción. El PIC12F629/675 tiene 7 fuentes de interrupción:
• Interrupción externa GP2/INT
• Interrupción por desbordamiento de TMR0
• Interrupción por cambio lógico de GPIO
• Interrupción comparador
• Interrupción A/D (sólo PIC12F675)
• Interrupción por desbordamiento de TMR1
• Interrupción EEPROM Data Write

El registro de Control de Interrupción (INTCON) y el registro de Interrupción de Periférico (PIR) registran solicitudes de interrupción individuales en bits de bandera (flag bits). En el registro INTCON también se pueden habilitar bits de interrupción individual y global.

Un bit de de interrupción global, GIE (INTCON <7>) permite habilitar (si está activado)  o deshabilitar (si está desactivado) todas las interrupciones. Las interrupciones pueden ser deshabilitadas a nivel individual a través de sus correspondientes bits en el registro INTCON y registro PIE. GIE está desactivado en RESET.

El retorno desde la instrucción de interrupción, RETFIE, abandona la rutina de interrupción, así como activa el bit GIE, que rehabilita las interrupciones.

Las siguientes banderas de interrupción figuran en el registro INTCON:
• INT - pin interrupción
• GP port – interrupción por cambio
• TMR0 – interrupción por desbordamiento

Las banderas de interrupción de periférico figuran en el registro especial PIR1. Los bits de habilitación de  interrupciones correspondientes figuran en el registro especial PIE1.

Las siguientes banderas de interrupción figuran en el registro PIR:
• EEPROM Data Write interrupción
• Interrupción A/D
• Interrupción comparador
• Interrupción por desbordamiento de Timer1

Cuando una interrupción es atendida:
• GIE se desactiva para deshabilitar cualquier otra interrupción
• La dirección de retorno se coloca en la pila
• PC se carga con 0004h

Una vez en la Rutina del Servicio de Interrupción, se pueden determinar los orígenes de la interrupción sondeando los bits de la bandera de interrupción. Deben desactivarse en el software antes de rehabilitar las interrupciones para evitar interrupciones recursivas de  GP2/INT.
Para eventos de interrupción externos, como el pin INT, o interrupción por cambio en el puerto GP, la latencia de interrupción será de tres o cuatro ciclos de instrucción. La latencia exacta depende de cuando el evento de interrupción se produce (véase la figura 9-11 – pág 63). La latencia es la misma para instrucciones de uno o dos ciclos. Una vez en la Rutina del Servicio de Interrupción, se pueden determinar los orígenes de la interrupción sondeando los bits de la bandera de interrupción. Deben desactivarse en el software antes de rehabilitar las interrupciones para evitar varias solicitudes de interrupción.

Notas:
1 - los bits de la bandera de interrupción están establecidos, independientemente del estado de su correspondiente máscara de bit o el bit GIE.
2 - Cuando se ejecuta una instrucción que borra el bit GIE, las interrupciones que estén pendientes de ejecución en el próximo ciclo se ignoran. Las interrupciones que se omitieron siguen pendientes para ser atendidas cuando el bit GIE se establezca de nuevo.

GP2/INT INTERRUPT
La Interrupción externa en el pin GP2/INT se activa por flanco (edge-triggered); ya sea por flanco ascendente (rising) si el bit INTEDG  (OPTION <6>) está a 1, o flanco descendente (falling), si el bit INTEDG está a 0. Cuando un flanco válido aparece en el pin GP2/INT, se establece el bit INTF (INTCON <1>). Se puede deshabilitar esta interrupción si ponemos a 0 el bit de control INTE (INTCON <4>). El bit INTF debe desactivarse por software en la Rutina del Servicio de Interrupción antes de rehabilitar esta interrupción. La interrupción de GP2/INT puede despertar al procesador del modo SLEEP si el bit INTE fue previamente establecido para entrar en este modo. El estado del bit GIE decide si el procesador salta al vector de interrupción siguiente al despertar o no. Se verán más adelante los detalles sobre el modo SLEEP. Consultar la figura 9-13 para conocer el tiempo de 'wake-up' (despertar) del modo SLEEP tras una interrupción de GP2/INT.
Nota: Los Registros ANSEL(9Fh) y CMCON(19h) se deben inicializar para configurar los canales analógicos como entradas digitales. Los pines configurados como entradas analógicas se leerán como 0.

TMR0 INTERRUPT
Un desbordamiento del registro TMR0 (FFh → 00 h) activará el bit T0IF (INTCON <2>). La interrupción puede habilitarse o deshabilitarse activando o limpiando el bit T0IE (INTCON <5>).

GPIO INTERRUPT
Un cambio de entrada en GPIO activa el bit GPIF (INTCON <0>). La interrupción puede habilitarse o deshabilitarse activando o limpiando el bit GPIE (INTCON <3>). Además los pines individuales pueden ser configurados mediante el registro IOC.
Nota: si un cambio en el pin I/O debería ocurrir cuando la operación de lectura está siendo ejecutada (inicio del Q2 cycle), entonces la bandera de interrupción GPIF podría no activarse.

COMPARATOR INTERRUPT
Se verá cuando se trate el Módulo Comparador.

A/D CONVERTER INTERRUPT
Después de una conversión es completa, se activa el indicador ADIF (PIR <6>). La interrupción puede habilitarse o deshabilitarse activando o limpiando el bit ADIE (PIE <6>). Se tratará con más detalle en el Módulo A/D..

Registros implicados en las Interrupciones. Se verán con más detalle posteriormente:


Ver las figuras 9-10 y 9-11 del datasheet.

Guardar contexto durante las Interrupciones
Durante una interrupción, sólo el valor que devuelve PC se guarda en la pila. Normalmente, los usuarios quieren guardar registros clave durante una interrupción, por ejemplo, el registro W y el registro STATUS. Esto debe aplicarse en el software. En el ejemplo 9-2 se almacena y restaura el registro STATUS y el registro W. El registro de usuario, STATUS_TEMP, debe definirse en ambos Bancos y se deben definir así mismo los desplazamientos desde la dirección base del Banco (por ejemplo, W_TEMP se define en 0x20 en el Banco 0 y también debe definirse en 0xA0 en el Banco 1). El registro de usuario, STATUS_TEMP, debe definirse en el Banco 0. El ejemplo 9-2:
• Almacena el registro W
• Almacena el registro STATUS en el Banco 0
• Ejecuta el código ISR
• Restaura el registro STATUS (y el bit de selección de Banco)
• Restaura el registro W




Watchdog Timer (WDT)
Es un oscilador RC interno, que no requiere componentes externos. Este oscilador RC es independiente del oscilador RC externo del pin CLKIN y de INTOSC, lo que significa que se ejecutará el WDT incluso si se ha detenido el reloj en los pines OSC1 y OSC2 del dispositivo (por ejemplo, mediante la ejecución de una instrucción SLEEP). Su función es evitar bloqueos del PIC (que haya entrado en un bucle sin fin o que por malfuncionamiento se haya quedado bloqueado, por ejemplo) y ejecutar un RESET para la vuelta a un funcionamiento normal del mismo.
En un funcionamiento normal, si el tiempo WDT expira se genera un RESET en el dispositivo. Si está en modo SLEEP, al expirar WDT el dispositivo se despierta y continúa con el funcionamiento normal. El WDT puede desactivarse permanentemente poniendo a '0' el bit de configuración WDTE (Registro Configuration Word)).

Período WDT
WDT tiene un período de tiempo de espera nominal de 18ms, (sin prescaler). Los períodos de tiempo de espera varían con la temperatura, VDD y las variaciones de proceso de parte a parte (ver especificaciones DC). Si se desean períodos de tiempo de espera más largos, un prescaler con un ratio de división de hasta 1:128 se puede asignar a WDT bajo control del software escribiendo en 'OPTION Register' . Por lo tanto, el período de tiempo de espera máximo que puede alcanzarse es de 2,3 segundos.
Para poder eliminar un eventual bloqueo del PIC durante la ejecución del programa principal, se inserta en él una instrucción especial, la cual pone a cero en intervalos regulares el WDT, no permitiéndole llegar al final de su temporización.
Las instrucciones CLRWDT y SLEEP desactivan el WDT y el prescaler, si están asignadas a WDT y evitan que se alcance el final de la temporización y se genere un RESET.
El bit /TO en el registro STATUS se deshabilitará si WDT expira.
 
Consideraciones sobre la programación de WDT
Debería tenerse en cuenta que en la peor de las condiciones (es decir, VDD = mínima, temperatura = Max., máximo. WDT prescaler) pueden pasar varios segundos antes de que el tiempo de WDT expire.






Power-Down Mode (SLEEP)
El Power-Down Mode o SLEEP Mode, es un estado particular de funcionamiento del PIC, utilizado para reducir el consumo de corriente en los momentos que no realiza ninguna tarea o está a la espera de un suceso externo. Al ejecutar una instrucción SLEEP se entra en Power-Down Mode.
Si está habilitado el Watchdog Timer:
• el WDT se limpiará pero se mantiene corriendo
• el bit /PD en el registro STATUS se desactiva
• el bit /TO se activa
• el controlador del oscilador se desconecta
• los puertos I/O mantienen el estado que tenían antes de que se ejecutara SLEEP (conducción alto, bajo, o alta-impedancia).
Para un menor consumo en este modo, todos los pines I/O deberían estar ya sea a VDD, o VSS, sin circuitería externa que consuma corriente de los pines I/O, y los Comparadores y CVREF deberían estar deshabilitados. Los pines I/O que estén en estado de alta-impedancia deben ser llevados a un nivel alto o bajo externamente para evitar cambios en la corriente causados por entradas flotantes. La entrada de T0CKI debería igualmente estar en VDD o VSS para un menor consumo de corriente. Debería considerarse el uso de resistencias pull-ups internas en GPIO.
El pin /MCLR debe estar a un nivel lógico alto (VIHMC).
Nota: Se debe tener en cuenta que un RESET generado por WDT no lleva a /MCLR a un estado bajo

Wake-up from SLEEP (Despertar del Modo SLEEP)
El dispositivo puede despertar del modo SLEEP por alguno de los siguientes eventos:
- entrada de RESET externo en pin /MCLR
- Watchdog Timer Wake-up (si se habilitó WDT)
- Interrupción en pin GP2/INT, interrupción por cambio de estado GPIO, o interrupción de un periférico.

El primer evento provocará un RESET del dispositivo. Los dos siguientes se consideran una continuación de la ejecución del programa. Los bits /TO y /PD del registro STATUS pueden utilizarse para determinar la causa del RESET. El bit /PD, que está habilitado en un funcionamiento normal, se borra cuando se invoca el modo SLEEP. El bit /TO  está desactivado si ocurrió un WDT Wake-up.

Cuando se está ejecutando la instrucción SLEEP, la siguiente instrucción (PC + 1) es pre-fetched. Para que el dispositivo se despierte a través de un evento de interrupción, el bit de habilitar interrupción correspondiente debe activarse. Wake-up es independiente del estado del bit GIE. Si el bit GIE está deshabilitado, el dispositivo continúa la ejecución en la instrucción siguiente a la instrucción SLEEP. Si el bit GIE está habilitado, el dispositivo ejecuta la instrucción después de la instrucción SLEEP, después salta a la dirección de interrupción (0004h). En los casos donde la ejecución de la siguiente instrucción de SLEEP no es deseable, el usuario debería poner un NOP después de la instrucción SLEEP.
El WDT se borra cuando el dispositivo se despierta del modo SLEEP, independientemente de la fuente del 'despertar'.

Nota: si las interrupciones globales están deshabilitadas (GIE está deshabilitado), pero cualquier fuente de interrupción tiene su bit de interrupción habilitado y los correspondientes bits de la bandera de interrupción activados, el dispositivo se despertará inmediatamente del modo SLEEP. La instrucción SLEEP se ejecuta completamente.




En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #13 : Abril 29, 2009, 12:49:27 »


ORGANIZACIÓN DE LA MEMORIA

Memoria de Programa
El PIC12F629/675 tiene un contador de programa de 13 bits capaz de direccionar un espacio de memoria de programa de 8 Kx14. Sólo el primer 1 Kx14 (0000h - 03FFh) para los dispositivos de PIC12F629/675 está físicamente implementado. Acceder a una ubicación por encima de estos límites causará una vuelta (wrap around) al primer 1 Kx14. El vector de RESET está en 0000h y el vector de Interrupción en 0004h.



Memoria de Datos
La memoria de datos (véase la figura 2-2 del datasheet) se divide en dos bancos, que contienen los registros de Propósito General y los registros de Función Especial. Los registros de Función Especial se encuentran en las 32 primeras posiciones de cada banco. Las posiciones 20h-5Fh son para los registros de Propósito General, implementados como RAM estática, y se asignan a través de ambos bancos. El resto de la RAM no está implementada y devuelve ‘ 0 ’ cuando se lee. RP0 (STATUS <5>) es el bit de selección del Banco.
• RP0 = 0, se selecciona Banco 0
• RP0 = 1, se selecciona Banco 1

Nota: los bits de STATUS <7:6>, IRP y RP1, están reservados y se deberían mantener siempre a '0'

Archivo del Registro de Propósito General
Está organizado como 64x8 en el PIC12F629/675. Cada registro es accedido, ya sea directa o indirectamente, a través del Archivo de Selección de Registro (File Select Register – FSR). Véase la sección 2.4 del datasheet.

Registros de Función Especial
Son registros utilizados por la CPU y funciones periféricas para controlar la operación deseada del dispositivo (véase tabla 2-1 en el datasheet). Estos registros son RAM estático. Los registros especiales pueden clasificarse en dos grupos: núcleo y periférico. Los registros de la función especial asociados con el 'núcleo' se describen en esta sección. Aquellos relativos al funcionamiento de las características de los periféricos se describen en su sección correspondiente.


Registro STATUS
El registro STATUS contiene:
• el estado aritmético de la ALU (Unidad Aritmético Lógica)
• el estado de RESET
• los bits de selección de Banco para la memoria de datos (SRAM)

El registro STATUS puede ser el destino para cualquier instrucción, como cualquier otro registro. Si el registro STATUS es el destino de una instrucción que afecta a los bits Z, DC o  C, entonces la escritura a estos tres bits es deshabilitada. Estos bits son activados o borrados de acuerdo a la lógica del dispositivo. Además, los bits /TO y /PD no son de escritura. Por lo tanto, el resultado de una instrucción con el registro STATUS como destino puede ser diferente a lo que se pretende.
Por ejemplo, con CLRF STATUS se borrarán los tres bits superiores y se activa el bit Z. Esto deja al registro de STATUS como 000u u1uu (donde u = sin cambios (unchanged)).
Se recomienda, por lo tanto, que sólo instrucciones BCF, BSF, SWAPF y MOVWF se utilicen para modificar el registro STATUS, porque estas instrucciones no afectan a los bits de STATUS. Para conocer otras instrucciones que no afectan a bits del registro STATUS, consulta  'Instruction Set Summary'.

Notas:
1: los bits IRP y RP1 (STATUS <7:6>) no son utilizados por el PIC12F629/675 y deben mantenerse a 0. No se recomienda el uso de estos bits, ya que esto puede afectar la compatibilidad con productos futuros.
2: Los bits C y DC funcionan como 'Borrow y Digit Borrow out bit', respectivamente, en las restas. Consulta las instrucciones SUBLW y SUBWF para ejemplos.


bit 7: IRP: este bit está reservado y debería mantenerse a 0
bit 6: RP1: este bit está reservado y debería mantenerse a 0
bit 5: RP0: bit de Selección de Banco (usado para direccionamiento directo)
  0 = Banco 0 (00h - 7Fh)
  1 = Banco 1 (80h - FFh)
bit 4: /TO: bit Time-out
  1 = Después del encendido (power-up), o una instrucción CLRWDT o SLEEP
  0 = Sucedió un WDT time-out
bit 3: /PD: bit Power-down
  1 = Después de power-up o una instrucción CLRWDT
  0 = Por ejecutarse una instrucción SLEEP
bit 2: Z: bit Zero
  1 = El resultado de una operación aritmética o lógica es 0
  0 = El resultado de una operación aritmética o lógica es diferente de 0
bit 1: DC: bit Digit carry/borrow (Dígito de acarreo). En instrucciones ADDWF, ADDLW, SUBLW, SUBWF
  1 = Un acarreo del 4º bit menos significativo (bit 3) ha sucedido
  0 = No ha habido acarreo
  Para '/borrow', la polaridad está invertida
bit 0: C: bit Carry/borrow (Acarreo). En instrucciones ADDWF, ADDLW, SUBLW, SUBWF
  1 = Un acarreo del bit más significativo ha sucedido
  0 = No ha habido acarreo
Nota: para '/borrow', la polaridad está invertida. Una resta se ejecuta sumando el complemento a 2 del segundo operando. En instrucciones de rotación (RRF, RLF) este bit se carga ya sea con el bit de mayor o menor peso del registro de origen.
Nota: 'borrow' = 'tomar prestado', en un sentido de resta


Registro OPTION
Es un registro de lectura/escritura con varios bits de control para configurar:
• TMR0/WDT prescaler
• Interrupción externa en GP2/INT
• TMR0
• Resistencias pull-up en GPIO


bit 7 /GPPU: Bit de habilitación de GPIO Pull-up
  1 = Pull-ups deshabilitadas
  0 = Pull-ups habilitadas
bit 6 INTEDG: Bit de selección de interrupción por flanco
  1 = Interrupción por flanco ascendente (rising edge) en pin GP2/INT
  0 = Interrupción por flanco descendente (falling edge) en pin GP2/INT
bit 5 T0CS: TMR0 Bit de selección de origen de reloj
  1 = Transición en pin GP2/T0CKI
  0 = Ciclo de instrucción interna (CLKOUT)
bit 4 T0SE: TMR0 Bit de selección de origen del flanco
  1 = Se incrementa en una transición alto-a-bajo en pin GP2/T0CKI
  0 = Se incrementa en una transición bajo-a-alto en pin GP2/T0CKI
bit 3 PSA: Bit de asignación del prescaler
  1 = Prescaler está asignado al WDT
  0 = Prescaler está asignado al módulo TIMER0
bit 2-0 PS2:PS0: Bits de selección Ratio-Prescaler


Nota: para lograr una asignación de prescaler 1:1 para TMR0, asignar el prescaler al WDT estableciendo el bit PSA a ‘1’ (OPTION <3>). Véase la sección prescaler en el Módulo Timer0.


Registro INTCON
Es un registro de lectura/escritura, que contiene los diversos bits de bandera para el desbordamiento del registro TMR0, cambio de estado del puerto GPIO y las interrupciones externas del pin GP2/INT.
Nota: los bits de la bandera de interrupción se establecen cuando se produce una condición de interrupción, independientemente del estado de su correspondiente bit de habilitación o del bit de habilitación global, GIE (INTCON <7>). El usuario debe asegurarse de que los bits de las correspondientes banderas de interrupción estén a 0 antes de habilitar una interrupción.


bit 7 GIE: bit de habilitación de las Interrupciones Globales
  1 = habilita interrupciones
  0 = deshabilita todas las interrupciones
bit 6 PEIE: bit de habilitación de las Interrupciones de Periféricos
  1 = habilita las interrupciones
  0 = deshabilita las interrupciones
bit 5 TOIE: bit de Interrupción por Desbordamiento de TMR0
  1 = habilita la interrupción de TMR0
  0 = deshabilita la interrupción de TMR0
bit 4 INTE: bit de habilitación de la Interrupción Externa de GP2/INT
  1 = habilita la interrupción de GP2/INT
  0 = deshabilita la interrupción de GP2/INT
bit 3 GPIE: bit de Interrupción por Cambio de Estado en GPIO (1)
  1 = habilita la interrupción por cambio de estado
  0 = deshabilita la interrupción
bit 2 T0IF: bit de bandera de Interrupción por Desbordamiento de TMR0 (2)
  1 = hubo desbordamiento de TMR0 (debe limpiarse vía software)
  0 = no hubo desbordamiento
bit 1 INTF: bit de bandera de Interrupción Externa en GP2/INT
  1 = ocurrió una interrupción externa en GP2/INT (debe limpiarse vía software)
  0 = no hubo interrupción externa en GP2/INT
bit 0 GPIF: bit de bandera de Interrupción por cambio de estado del Puerto
  1 = cuando alguno de los pines GP5:GP0 ha cambiado de estado (debe limpiarse vía software)
  0 = no hubo cambio de estado en GP5:GP0

Notas:
(1) el Registro IOC debe estar igualmente habilitado para habilitar la interrupción por cambio de estado.
(2) el bit T0IF se activa cuando TIMER0 se desborda. TIMER0 no cambia en un RESET y se debería inicializar antes limpiando el bit T0IF.


Registro PIE1
Este registro contiene los bits que habilitan las interrupciones.
Nota: para habilitar cualquier interrupción periférica debe establecerse el bit PEIE (INTCON <6>).


bit 7 EEIE: bit de habilitación de Escritura EE Completada
  1 = habilita la interrupción
  0 = deshabilita la interrupción
bit 6 ADIE: bit de habilitación de Interrupción del Convertidor A/D (12F675 solamente)
  1 = habilita la interrupción A/D
  0 = deshabilita la interrupción A/D
bit 5-4 Sin implementar, se leen como 0
bit 3 CMIE: bit de habilitación de Interrupción del Comparador
  1 = habilita la interrupción del Comparador
  0 = deshabilita la interrupción del Comparador
bit 2-1 Sin implementar, se leen como 0
bit 0 TMR1IE: bit de habilitación Desbordamiento TMR1
  1 = habilita Desbordamiento TMR1
  0 = deshabilita Desbordamiento TMR1


Registro PIR1
Este registro contiene los bits de bandera de interrupción.
Nota: los bits de la bandera de interrupción se establecen cuando se produce una condición de interrupción, independientemente del estado de su correspondiente bit de habilitación o del bit de habilitación global, GIE (INTCON <7>). El usuario debe asegurarse de que los bits de las correspondientes banderas de interrupción estén a 0 antes de habilitar una interrupción.


bit 7 EEIF: bit de bandera de Interrupción de la Operación de Escritura EEPROM
  1 = operación de escritura completada (debe limpiarse vía software)
  0 = la operación de escritura no ha terminado o no ha dado comienzo
bit 6 ADIF: bit de bandera de Interrupción del Convertidor A/D (12F675 solamente)
  1 = la conversión se ha completado (debe limpiarse vía software)
  0 = la conversión no ha terminado
bit 5-4 Sin implementar, se leen como 0
bit 3 TMR1IF: bit de bandera de Interrupción Desbordamiento TMR1
  1 = registro TMR1 ha desbordado (debe limpiarse vía software)
  0 = no hubo desbordamiento de TMR1


Registro PCON
El registro Power Control (PCON) contiene los bits de bandera que nos permiten diferenciar entre:
• Power-on Reset (POR)
• Brown-out Detect (BOD)
• Watchdog Timer Reset (WDT)
• MCLR Reset Externo


bit 7-2 Sin implementar, se leen como 0
bit 1 /POR: bit de Estado Power-on Reset
  1 = no ocurrió un Power-on Reset
  0 = hubo un Power-on Reset (debe ser activado vía software después de que ocurra)
bit 0 /BOD: bit de Estado Brown-out Detect
  1 = no ocurrió un Brown-out Detect
  0 = hubo un Brown-out Detect (debe ser activado vía software después de que ocurra)


Registro OSCCAL
Es usado para calibrar el Oscilador Interno de 4Mhz. Tiene 6 bits para ajustar la frecuencia hacia arriba o hacia abajo para lograr eses 4Mhz.


bit 7-2 CAL5:CAL0: 6 bits de Calibración del Oscilador
  111111 = máxima frecuencia
  100000 = media frecuencia
  000000 = mínima frecuencia
bit 1-0 Sin implementar, se leen como 0

En línea
xocas
Administrator
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 609



« Respuesta #14 : Mayo 21, 2009, 12:31:13 »


MÓDULO COMPARADOR

Los PIC12F629/675 tienen un módulo comparador analógico. Las entradas del comparador son multiplexadas en los pines GP0 y GP1. Hay una referencia de tensión del comparador (Comparator Voltage Reference) que puede aplicarse también a una entrada del comparador. En suma, se puede configurar GP2 como la salida del comparador.

El Registro de Control del Comparador (CMCON) contiene los bits para controlar el comparador:


bit 7 Sin implementar, se lee como 0
bit 6 COUT: bit de salida del Comparador
  cuando CINV = 0:
    1 = VIN+ > VIN-
    0 = VIN+ < VIN-
  cuando CINV = 1:
    1 = VIN+ < VIN-
    0 = VIN+ > VIN-
bit 5 Sin implementar, se lee como 0
bit 4 CINV: bit de salida invertida del Comparador
  1 = salida invertida
  0 = salida no invertida
bit 3 CIS: bit de cambio de entrada del Comparador
  cuando CM2:CM0 = 110 o 101:
    1 = VIN+ conectado a CIN+
    0 = VIN- conectado a CIN-
bit 2-0 CM2:CM0: bits del Modo Comparador
se verá posteriormente su configuración (Figure 6-2)

Operación de Comparación
Una sencilla comparación se muestra en la figura 6-1, junto con la relación entre los niveles de entrada 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 analógica en VIN-, la salida del comparador es un nivel digital alto. Las áreas sombreadas de la salida del comparador representan incertidumbres debidas a desplazamientos y tiempo de respuesta.
Nota: para usar los pines CIN+ y CIN- como entradas analógicas, los bits apropiados deben ser programados en el registro CMCON (19 h).



La polaridad de la salida del comparador puede ser invertida activando el bit CINV (CMCON <4>). Borrar este bit CINV resulta en una salida no-invertida.

Tabla completa que muestra el estado de salida frente a las condiciones de entrada y el bit de polaridad:



Configuración del Comparador
Hay ocho modos de operación para la comparación.
El Registro CMCON se utiliza para seleccionar el modo. La figura 6-2 muestra los ocho modos posibles. El Registro TRISIO controla la dirección de datos de los pines para cada modo de comparación. Si el modo Comparador cambia, el nivel de salida de la comparación puede no ser válido por un período específico de tiempo. Consulta las especificaciones en la sección 12.0.
Nota: las interrupciones del Comparador deberían estar deshabilitadas durante un cambio de modo del  Comparador. De lo contrario, puede producirse una falsa interrupción.



En línea
Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.121 segundos con 29 consultas. (Pretty URLs adds 0.011s, 3q)
loggkey