PIC12F683

Este PIC es el pequeño gigante de Microchip.
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.

  1. ;http://www.archimon-tx8.blogspot.com
  2. list p=12F683
  3. #include "p12f683.inc"
  4.  
  5. errorlevel -302 ; suppress message 302  
  6. __config   _FCMEN_OFF & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
  7.  
  8. ;Ubicacion de variables en banco de memoria
  9.  
  10. COUNT1 equ 0x20   ;el banco de memoria comienza en la posicion 0x20
  11. COUNT2 equ 0x21
  12.  
  13. ;Inicio de programa
  14.  
  15. org     0x00
  16.  
  17. movlw   0x07  
  18. movwf   CMCON0       ;Comparadores OFF  
  19.  
  20. ;configuracion de puerto
  21. bsf    STATUS,RP0    ;seleccionamos banco 1
  22. movlw   b'01100001'  ;bit 1 y 2(LTS HTS) indican si los osc. son estables. Bit 7 no implementado
  23. movwf   OSCCON       ;Oscilador interno a 4MHz (default)
  24. clrf    ANSEL        ;puerto digital
  25. movlw   b'00001000'  ;Bit 7 y 8 no implementados, Bit 3 solo como entrada
  26. movwf   TRISIO       ;Utilizaremos solo el GP5(PIN2) como salida.
  27. bcf    STATUS,RP0
  28.          
  29. ;Codigo de programa
  30.  
  31. INICIO   bsf  GPIO,5    ;Poner a 1 GP5
  32.          call DELAY
  33.          bcf  GPIO,5    ;Poner a 0 GP5
  34.          call DELAY
  35.          goto INICIO
  36.  
  37. DELAY movlw 0xFF  ; Subrutina de retardo
  38.       movwf COUNT1  ; 256x256=65536 cuentas
  39.       movwf COUNT2
  40. LOOP  decfsz COUNT1,1 ; Decrementa COUNT1
  41.       goto LOOP  ; Salta si COUNT1=0
  42.       movlw 0xFF  
  43.       movwf COUNT1  ; COUNT1=FF
  44.       decfsz COUNT2,1 ; Decrementa COUNT2
  45.       goto LOOP  ; Salta si COUNT2=0
  46.       return   ; Retorno de subrutina
  47.  
  48. end   ; Fin de programa


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

 photo Sintiacutetulo-1_zps2f5887b8.jpg


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 OFF  
Seleccionamos 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 digital
Todo 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.

2 comentarios :

  1. MUY BUENA EXPLICACIÓN DE 5 ESTRELLAS.
    Nunca usé este microcontrolador pero lo usaré ya que no tengo problemas con la calibración del oscilador interno como en el 12f675, 12f629, muy bien
    gracias amigo

    ResponderEliminar
  2. te recomiendo que hagas una rápida leída al datasheet de estos micros y luego vallas viendo la serie 12f1XXX con mayores prestaciones

    ResponderEliminar