Pic12f629 675
Pic12f629 675
Pic12f629 675
Es importante decir 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.
Son muchas las ocasiones en las que una lectura pausada de la hoja de datos del PIC (datasheet de ahora
en adelante) nos da la solución a ese problema que no conseguimos resolver en nuestro circuito, pero esa
lectura no siempre es tan clara como nos gustaría que fuese. El idioma (un gran escollo para muchos de
nosotros), la terminología empleada(1) y la poca profundidad a la hora de tocar ciertos temas consiguen
que sobre todo aquellos que están empezando no le presten la atención que requiere.
La intención de este tema es tratar de ayudar en lo posible a resolver esos escollos: el idiomático,
partiendo de la intención de ser lo más fiel posible al contenido del datasheet, y el estudio 'paso a paso' de
las características del PIC, de sus registros, periféricos...etc
En el caso de algunos temas que el datasheet no trata con demasiada profundidad trataré de
proporcionaros enlaces para que podáis ampliar conocimientos, de ser posible en español, y desde el
punto de partida de que no es la intención de este tema hacer todo el trabajo por vosotros porque es
vuestra inquietud, vuestras ganas de aprender, la mejor ayuda que puedo ofreceros. Google y nuestros
amados Foros son un excelente espacio para 'ese empujoncito' que a veces necesitamos. De igual manera,
son bastantes las Tablas de Datos presentes y como no tengo la intención de sobrecargar el Foro con cosas
que podéis ver sin esfuerzo en el datasheet, se hará referencia ya sea a su número de imagen, página o
capítulo donde se puede ver.
El datasheet del PIC con el que trabajemos debería estar siempre a mano. Para obtenerlo lo haremos
directamente de la web de Microchip y fijándonos siempre que sea la última versión la que tenemos, y
verificar igualmente si existen documentos de 'erratas' posteriores. Esto lo sabremos por la versión y las
fechas... (2)
Se ha elegido uno de los 'enanos' de Microchip para empezar: PIC12F629/675. A pesar de su tamaño tiene
muchas cosas que se encuentran en sus hermanos mayores y lo aprendido nos servirá posteriormente. Más
adelante se tratarán ciertas particularidades no presentes en este PIC, como pueden ser USART, SPI...etc.
No he seguido el orden establecido en los capítulos del datasheet si no el orden que sigo a la hora de
programar, de ahí que comience por la 'Palabra de configuración' (Configuration Word) que va al
principio de todos mis programas. Decir que programo en Basic y desconozco otros lenguajes de
programación, por ello cuando añada algún ejemplo será siempre bajo este lenguaje o añadiendo algún
ejemplo de ASM incluido en el datasheet
Agradezco que me informéis de cualquier error que se me haya pasado por alto.
Notas:
1 - Se mantendrá la terminología original en inglés para evitar confusiones. En otro tema aparte se creará
un glosario para que podáis consultar esa terminología.
2 - La referencia DS41190E se corresponde con la última versión del datasheet en este momento. Es
importante porque 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. 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?DocName=en010114
Índice:
Propiedades Especiales:
CONFIGURATION WORD
OSCILADOR
Los Modos de RESET
GPIO PORT
Módulo Timer0
Módulo Timer1
Interrupciones
Organización de la Memoria
Módulo Comparador
Memoria EEPROM
Convertidor A/D
PIC12F629/675
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.
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:
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.
(*) 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
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
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.
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
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.
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.
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.
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.
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.
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
/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.
Con esto doy por terminada (en principio al menos) la parte dedicada a Configuration Word o palabra de
configuración del PIC.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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
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 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.
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.
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.
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'
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
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.
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>).
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.
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
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.
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:
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:.
Notas:
1-cuando se lee el registro GPIO, todos los pines configurados como entradas analógicas se leerán como
un ‘ 0 ’. Los pines configurados como entradas digitales convertirán una entrada analógica de acuerdo con
la especificación de entrada TTL.
2- Niveles analógicos en cualquier pin definido como una entrada digital, pueden causar que el buffer de
entrada consuma más corriente de la especificada.
Referencia Comparador
El módulo Comparador también permite la selección de una referencia de voltaje internamente generada
para una de las entradas del Comparador. La señal de referencia interna es usada para cuatro de los ocho
modos del Comparator. El registro VRCON, Registro 6-2, controla el módulo de referencia de voltaje
mostrado en la Figura 6-5.
Configuración de la Referencia de Voltaje
La referencia de voltaje puede dar salida a 32 niveles de voltaje diferentes, 16 en la parte alta y 16 en la
baja.
Efectos de un RESET
Un RESET del dispositivo fuerza a los registros CMCON y VRCON a sus estados de RESET. Esto fuerza
al módulo Comparador al estado 'Comparator Reset mode', CM2:CM0 = 000 y al voltaje de referencia a
su estado deshabilitado. Así, todas las entradas potenciales son entradas analógicas con el Comparador y
el voltaje de referencia deshabilitados para un consumo de corriente lo más pequeña posible.
Registro VRCON:
Interrupciones en el Comparador
La bandera de interrupción del Comparador se establece siempre que hay un cambio en el valor de salida
del Comparador. Será necesario mantener vía software la información sobre el estado de los bits de salida,
así como la lectura de CMCON <6>, para determinar el cambio actual ocurrido. El bit CMIF, PIR1 <3>,
es el indicador (la bandera) de interrupción del Comparador. Este bit se debe restablecer por software
llevándolo a ‘ 0 ’. Ya que también es posible escribir un '1' en este registro, se puede iniciar una
interrupción simulada.
Los bits CMIE (PIE1 <3>) y PEIE (INTCON <6>) deben activarse para permitir la interrupción. Además,
también debe activarse el bit GIE. Si cualquiera de estos bits se borran, la interrupción no estará
habilitada, aunque todavía se establecerá el bit CMIF si se produce una condición de interrupción.
El usuario, en la Rutina del Servicio de Interrupción, puede borrar la interrupción de la siguiente manera:
a) cualquier lectura o escritura de CMCON. Esto terminará la condición de no coincidencia
b) limpiando el bit de bandera CMIF.
Una condición de no coincidencia mantendrá activo el bit de bandera CMIF. La lectura de CMCON
pondrá fin a la condición de no coincidencia y permitirá borrar el bit de bandera CMIF.
Nota: si se produce un cambio en el registro CMCON (COUT) cuando una operación de lectura está
siendo ejecutada (inicio de Q2 cycle), el CMIF (PIR1 <3>) no puede establecer la bandera de
interrupción.
EEDATA contiene los 8 bits de datos de lectura y escritura, y EEADR contiene la dirección de acceso a la
ubicación de la EEPROM. Los PIC12F629/675 tienen 128 bytes de datos EEPROM con un rango de
direccionamiento de 0h a 7Fh.
La memoria de datos EEPROM permite la lectura y escritura de bytes. La escritura de un byte
automáticamente borra la ubicación y escribe el nuevo dato (borra antes de escribir). La clasificación de la
memoria de datos EEPROM está preparada para elevados ciclos de borrado y escritura. El tiempo de
escritura está controlado por un temporizador interno. El tiempo de escritura varía con la tensión y la
temperatura, así como de un chip a otro. Consulta las especificaciones de AC para límites exactos.
Cuando la memoria de datos tiene protección de código, la CPU puede continuar leyendo y escribiendo
los datos de la memoria EEPROM. El programador del dispositivo no puede acceder a esta memoria.
Información adicional sobre la EEPROM de datos está disponible en el manual de referencia PIC®Mid-
Range, (DS33023).
bit 7-0 EEDATn: valor del Byte a leer o escribir desde la EEPROM de datos
Verificar Escritura
Dependiendo de la aplicación, buenas prácticas de programación pueden dictar que el valor que se escribe
en la EEPROM de datos deba ser verificado (ver ejemplo 8-3) para confirmar la escritura del valor
deseado.
Usando la EEPROM de Datos
La memoria de datos EEPROM es una matriz de bytes direccionables de alta-resistencia, que se ha
optimizado para el almacenamiento de información con cambios frecuentes (por ejemplo, las variables de
programa u otros datos que se actualizan con frecuencia).
Frecuentes cambios de los valores normalmente se actualizarán más a menudo que las especificaciones
D120 o D120A. Si esto no es el caso, debe realizarse una actualización de la matriz. Por esta razón, las
variables que cambian con poca frecuencia (como constantes, ID, calibración, etc.) deberían ser
almacenadas en la memoria de programa FLASH.
Selección de Canal
Hay cuatro canales analógicos en el PIC12F675, de AN0 a AN3. Los bits CHS1:CHS0 (ADCON0<3:2>)
controlan que canal está conectado al circuito de captura y mantenimiento (sample and hold).
Voltaje de Referencia
Hay dos opciones para la tensión de referencia del convertidor A/D: se utiliza VDD, o se utiliza un voltaje
analógico aplicado a VREF. El bit VCFG (ADCON0<6>) controla la selección de referencia de voltaje.
Si se activa el VCFG, la tensión en el pin VREF es la referencia, de lo contrario, la referencia es VDD.
Conversión CLOCK
El ciclo de conversión A/D requiere 11 TAD. La fuente de la conversión de reloj es seleccionable vía
software mediante los bits ADCS (ANSEL<6:4>). Hay siete opciones de reloj posible:
• FOSC/2
• FOSC/4
• FOSC/8
• FOSC/16
• FOSC/32
• FOSC/64
• FRC (oscilador RC interno)
Para la correcta conversión, se debe seleccionar el reloj de conversión A/D (1/TAD) para garantizar un
mínimo TAD de 1.6 us. La Tabla 7-1 muestra unos pocos cálculos de TAD para frecuencias
seleccionadas.
Nota: TAD = Tiempo de Adquisición
Notas:
Las celdas sombreadas están fuera del rango recomendado.
1: La fuente RC tiene un tiempo de TAD típico de 4 μs para VDD > 3.0V.
2: Estos valores violan el tiempo de TAD mínimo requerido.
3: Para tiempos más rápidos de conversión, se recomienda la selección de otra fuente de reloj.
4: Cuando la frecuencia del dispositivo es mayor que 1Mhz, la fuente de reloj RC sólo se recomienda si la
conversión se realizará durante el Modo SLEEP.
En el caso de que una conversión deba ser abortada, puede borrarse el bit GO/DONE por software. Los
registros ADRESH:ADRESL no se actualizarán si la conversión A/D no se completa del todo. En su
lugar, los registros ADRESH:ADRESL mantendrán el valor de la conversión anterior. Después de una
conversión abortada, se requiere un retraso de 2 TAD antes de que se pueda iniciar una nueva
adquisición. Tras la demora, una adquisición se inicia automáticamente en el canal seleccionado.
Nota: el bit GO/DONE no debería activarse en la misma instrucción que enciende el Módulo A/D.
Salida de la Conversión
La Conversión A/D puede realizarse en dos formatos: desplazamiento a la izquierda o a la derecha. El bit
ADFM (ADCON0<7>) controla el formato de salida. La figura 7-2 muestra los formatos de salida.
Registro ADCON0:
Registro ANSEL:
Nota 1: Activar un pin como entrada analógica deshabilita automáticamente el circuito de entrada digital,
resistencias pull-up, e interrupción por cambio de estado. El correspondiente bit TRISIO debe ser
establecido como entrada para permitir el control externo de tensión en el pin.
Notas:
1: La tensión de referencia (VREF) no tiene efecto en la ecuación, ya que se cancela la salida.
2: La carga del condensador de mantenimiento(CHOLD) no es descargada después de cada conversión.
3: La impedancia máxima recomendada para fuentes analógicas es de 10KΩ. Esto es necesario para
cumplir con la especificación de fugas del pin.
Funcionamiento del Módulo A/D durante el modo SLEEP
El módulo convertidor A/D puede funcionar durante el modo SLEEP. Esto requiere que el origen de reloj
se establezca al oscilador RC interno. Cuando se selecciona el origen de reloj RC, el A/D espera una
instrucción antes de comenzar la conversión. Este permite que la instrucción de SLEEP sea ejecutada,
eliminando así la mayor parte del ruido de conmutación de la conversión. Cuando la conversión se
completa, el bit GO/DONE se limpia, y el resultado se carga en los registros ADRESH:ADRESL. Si la
interrupción A/D está habilitada, el dispositivo despierta del modo SLEEP. Si las interrupciones A/D
están deshabilitadas, el módulo A/D es apagado, aunque el bit ADON permanezca activado.
Cuando el reloj A/D es otro que RC, una instrucción SLEEP hace que la conversión en marcha sea
abortada, y el módulo A/D es apagado. El bit ADON permanece activado.
Efectos de un RESET
Un RESET del dispositivo fuerza a todos los registros a su estado de RESET. Así que el módulo A/D es
apagado y cualquier conversión pendiente es abortada. Los registros ADRESH:ADRESL permanecen sin
cambios.
Aquí termina el tema dedicado al datasheet del PIC12F629/675. Posteriormente se verán Módulos propios
de sus hermanos mayores (serie 16Fxxx) e igualmente se crearán temas destinados a poner en práctica lo
aprendido.
Las hojas de datos o datasheet son un elemento importante en el aprendizaje y en el trabajo con el PIC,
pero no son el único elemento a tener en cuenta. Son bastantes las cuestiones que se tratan de una manera
bastante 'escasa' y por ello, y porque no era la intención de este tema profundizar en esas cuestiones, es
importante consultar también otra documentación para ampliar conocimientos.
De igual manera, son bastantes las Tablas de Datos presentes en la hoja de datos o datasheet y como no es
mi intención sobrecargar el Foro con cosas que podéis ver sin esfuerzo en el datasheet, se han evitado.
Se ha creado un tema para Dudas y Consultas. Muchas gracias por todo vuestro apoyo