Con tan solo 8 pines, posee varias caracteristicas de las cuales uno no pensaria que tendria.
Caracteristicas
-6 I/O pines.
-Memoria de programa de 2048 palabras (14 bits).
-35 instrucciones en Assembler.
-256 bytes de EEPROM de datos.
-128 bytes de SRAM de datos.
-4 entradas analógicas de 10 bits de resolución.
-Reloj interno seleccionable de 125KHz a 8MHz. Si se activa la opcion de reloj externo puede trabajar hasta con 20MHz.
-Modulo CCP. Capture, Compare, PWM módulo (de 10 bits).
-1 comparador analógico. Dos entradas para sensar y una salida.
Con respecto al PIC16F84A podemos ver las siguientes mejoras:
El doble de memoria(2048) para guardar nuestro programa.
4 veces más de memoria EEPROM.
Admite entradas analógicas.
Posee reloj interno seleccionable
Entre otras mejoras.
Otro punto a favor de este PIC es que no es necesario rescatar el valor OSSCAL, calibrarlo o estar pendiente de este valor como sucede con el PIC 12F675 o el PIC12F629. En el PIC 12F683 este valor ya se encuentra calibrado para usar su reloj interno sin ningun problema, no sufre modificacion alguna al programarlo.
Como único punto en contra solo veo la cantidad de pines pero esto puede jugarnos a favor si queremos ahorrar espacio y tener un circuito más compacto y de alta calidad. Por otro lado tambien tenemos los CI de registros de desplazamiento como el CD4017 ó el 74HC164 que nos pueden ayudar a expandir los pines de salida.
Mapa de memoria de datos
Como podemos observar, el espacio para almacenar nuestras variables comienza en la posicion 20h
Fuente de oscilador
Aqui podemos ver el modulo del reloj del PIC con el que trabaja, sea interno o externo. Si es interno puede ser seleccionado de 125KHz a 8MHz y en este rango puede ser calibrado con el registro OSCTUNE que veremos despues. El oscilador interno de baja frecuencia de 31KHz no esta calibrado de fabrica y no es afectado por OSCTUNE, es poco recomendable este reloj.
Registros
Mencionare los registros principales del PIC. No mencionare el registro STATUS ya que es igual al de otros PICs.
Registro OSCCON
El bit 0 SCS selecciona si es reloj interno o externo.
El bit 7 no esta implementado.
Los bits 1 y 2 LTS y HTS informan si los relojes son estables.
Este registro se complementa con los codigos en la palabra de configuración.
En modo INTOSC, GP5/OSC1/CLKIN puede funcionar como entrada/salida pero el pin GP4/ OSC2/CLKOUT funciona como salida de reloj interno dividido por 4.
En modo INTOSCIO , GP4 y GP5 pueden funcionar como salidas/entradas.
En la libreria del PIC tenemos:
_INTRC_OSC_NOCLKOUT EQU H'3FFC' _INTOSCIO EQU H'3FFC' _INTRC_OSC_CLKOUT EQU H'3FFD' _INTOSC EQU H'3FFD' _EXTRC_OSC_NOCLKOUT EQU H'3FFE' _EXTRCIO EQU H'3FFE' _EXTRC_OSC_CLKOUT EQU H'3FFF' _EXTRC EQU H'3FFF'
Registro OSCTUNE
Este registro nos ayuda a calibrar el reloj interno del PIC para obtener una mejor presición en tiempos. Si se requiere mayor presición se debe emplear un cristal externo. El modo de configuracion para uso del cristal externo como reloj es _HS_OSC, _XT_OSC, etc.
Registro CMCON0
Se debe configurar al inicio del codigo de programa. Por defecto esta activado.
Para desactivar el modulo comparados debemos escribir en los bits CM 0,1 y 2 un "1" lógico.
Registro TRISIO
como vemos solo 5 pines pueden trabajar como I/O, mientras que el sexto pin solo puede trabajar como entrada,es el pin GP3 que tambien puede trabajar como MCLR del PIC si se configura para ello.
Registro ANSEL
Aqui se configura los pines que seran empleados como entradas analogicas y el prescaler del reloj que usara el ADC.
Tengan en cuenta antes de escoger el reloj y el prescaler que el Tad mínimo del PIC es 1.6us.
Fuente: Microchip 12f683
Hasta ahi los registros, solo mencione los principales, ahora vamos con el primer programa para el PIC12F683.
Programa
Continuando con el mismo formato del programa para el PIC16F84A, presento el primer programa para el PIC12F683. Es el programa para un led intermitente conectado en GP5 (PIN2).
Empleo el reloj interno del PIC para ahorrar pines. Considero esto necesario en nuestro primer programa ya que el pic solo posee 8 pines, 6 si no contamos los pines de alimentación. Si usted amigo lector recien comienza a programar PICs, le recomiendo el primer programa para el PIC16F84A de esta misma sección.
Lo más resaltante de este programa esta en la configuración del puerto para que trabaje como puerto digital y tambien la selección del reloj interno.
Circuito
El pin 4 MCLR se conecta a Vcc ya que su función esta activada, es decir, si este pin toma 0 voltios el programa se reinicia.
En el circuito tambien se tiene que conectar la fuente de alimentación, pin 8 - tierra y pin 1 - Vcc (5V)
Información del programa
Mencionaré las palabras de configuración nuevas respecto al PIC16F84A:
FCMEN (Fail-Safe Clock Monitor enabled) modulo del oscilador a prueba de fallos. Si falla el reloj externo, cambia a reloj interno IESO (Internal External Switch Over Oscillator mode) Activa el uso del reloj externo e interno. CPD (Data EEPROM Code Protection) proteje la memoria EEPROM contra las lecturas. BOD (brownout reset) Reinicio del pic luego de una caida de voltaje. MCLRE_ON activa la funcion MCLRE en el pin 4, debe ser conectado a Vcc. INTRC_OSC_NOCLKOUT selección del reloj interno del pic. Los pines OSC1/CLKIN y OSC2/CLKOUT pueden trabajar como I/O.
Nuestra palabra de configuración:
__config _FCMEN_OFF & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
Luego definimos las variables que utilizamos COUNT1 y COUNT2.
El banco de memorias comienza en la posición 0x20.
Definimos el modo de operación de los puertos y el reloj interno.
Primero desactivamos la funcion de comparador. Esta activa por defecto.
movlw 0x07 movwf CMCON0 ;Comparadores OFFSeleccionamos el reloj interno del pic.
bsf STATUS,RP0 ;seleccionamos banco 1 movlw b'01100001' ;bit 1 y 2(LTS HTS) indican si los osc. son estables. Bit 7 no implementado movwf OSCCON ;Oscilador interno a 4MHz (default)Puerto como digital
clrf ANSEL ;puerto digitalTodo el puerto como salida.
movlw b'00001000' ;Bit 7 y 8 no implementados, Bit 3 solo como entrada movwf TRISIO ;Utilizaremos solo el GP5(PIN2) como salida. bcf STATUS,RP0
Regresamos al banco 0 y lo siguiente es la misma programación que del PIC16F84A.