Translate

domingo, 22 de mayo de 2016

PROCEDIMIENTOS MISCELÁNEOS

CAPÍTULO II (misceláneo)

El MICROCONTROLADOR PIC12F675 DE LA INDUSTRIA MICROCHIP

Comenzaré con este párrafo:

Quien cree saber mucho, ignora lo suficiente.  Aun así, nunca dudes de tu enorme capacidad de lograr tus propósitos.  De ti depende creer en los demás, incluso en Dios; pero no dudes en recurrir por sus ayudas y de agradecer y retribuir apropiadamente a quienes las ofrecen. Siempre habrá quien desee ayudarte. Solo, andarías lejos con empeño y esfuerzos, quizás, pero, entre varios, la carga se reparte a menos, las penas se empequeñecen y las alegrías se disfrutan mejor compartiéndolas.

Es de vital importancia destacar algunas sugerencias que podrían ayudar a que el microcontrolador no sea afectado por ‘extrañas e inexplicables anomalías’ que, por lo general, no faltan como un pelo entre el salcocho. Lo normal es que nuestro interés se enfoque tan sólo en el funcionamiento inmediato, y olvidamos que las circunstancias varían con el tiempo, y son las que determinarán la efectividad o no de los proyectos.

Por tanto, el microcontrolador podría ser afectado por situaciones no tan perceptibles:

a)   Por una mala regulación y filtrado deficiente de la energía de alimentación.
b)   Por las radiaciones provenientes de: cables eléctricos cercanos, transmisiones radioeléctricas (como las de los celulares), maquinarias eléctricas en funcionamiento, chasquidos de motores, contactores… y situaciones similares.
c)   Por variaciones extremas de temperatura y humedad. Y el polvo.
d)   Por movimientos bruscos del circuito, los cuales provocarían fallas en el conexionado.
Podrían presentarse una amplia variedad de situaciones no tan comunes. De las ya citadas, se podrían encontrar algunas soluciones para minimizarlas:

a)   No es suficiente utilizar un regulador de voltaje de 5 voltios de calidad garantizada para alimentar nuestro microcontrolador, también debemos tomar en cuenta que la rectificación y el filtrado sean el necesario para un buen rizado de la corriente. Los actuales reguladores monolíticos de voltaje (como el 7805) están dando problemas al soldarlos y cuando el nivel de voltaje de entrada supera ligeramente los 20V. Incluso, traen la aleta más delgada. Lo recomendable es soldar y esperar a que se enfríe cada pin, usar un resistor de amortiguamiento en la entrada (pin 1) y poner capacitores  de 10uF tanto en la entrada (pin 1) como en la salida (pin 3).

b)   Para evitar que los pines no utilizados actúen como antenas receptoras de ruidos, lo apropiado es poner un resistor de 4K7 desde el pin no usado al pin1 (los 5V). Algo adicional y más seguro es poner una lámina de papel aluminio o cobre debidamente aislada y aterrizada al negativo, sobre o debajo del microprocesador. Nunca he apreciado la diferencia. Las conexiones de alambre o impresas en cualquier tipo de circuito deben ser siempre cortas y que no pasen próximas a corrientes alternas. Dicho de otro modo, los alambres que llevan corriente alterna no se empaquetan con los que llevan corriente continua o directa.

c)   Una cajita plástica para contener la tarjeta es una práctica muy usada para proteger nuestros circuitos de la humedad, el polvo y las manipulaciones mecánicas inapropiadas. Se me ocurre que si se forra interiormente la cajita con papel aluminio aterrizado al negativo serviría mejor como protección contra las radiaciones.

d)   Las interferencias no radiadas, las que penetran modulando el voltaje de alimentación del microcontrolador,  provocan deficiencias en el convertidor análogo/digital, y se podrían eliminar colocando un pequeño capacitor de 0.1 uF en paralelo con los pines de alimentación del dispositivo. Uno de 0.01uF tanto en la entrada y la salida del regulador de 5V aumentaría la protección anti ruidos.





Los pines del microcontrolador  destinados a ser disparados por una entrada de voltaje mayor de 5V deben obligatoriamente contener en serie un resistor del valor apropiado y un diodo Zener de 5.1V desde el pin a tierra. Esto es factible para casos donde el voltaje no supere los 12V. Lo recomendado en todos los casos es utilizar entradas optoacopladas para evitar errores y daños.



El consumo de las cargas conectadas a cada salida del microcontrolador no debe superar jamás los 25mA. Los valores de los resistores deben ser calculados y escogidos para no superar dicho nivel de corriente. Para activar dispositivos que exijan mayor corriente es obligatorio utilizar transistores o circuitos integrados driver como mediadores; y tanto más si la carga funciona con un nivel de voltaje mayor a los 5V. Si la carga va a ser alimentada con un voltaje mayor a 12Vdc es necesario optoacoplar la salida del microcontrolador con la entrada del dispositivo driver.



domingo, 21 de junio de 2015

CAPÍTULO II (parte 2)

El MICROCONTROLADOR PIC12F675 DE LA INDUSTRIA MICROCHIP
                                                     
Registros de Funciones Especiales (Special Function Registers, SFR)


Los Registros de Funciones Especiales son utilizados por la CPU y las funciones periféricas para controlar la operación deseada del dispositivo. Estos registros son estáticos (inamovibles) en la memoria RAM, y están ubicados distribuidos en dos bancos de memoria; como se muestra a continuación:

BANCO 0
BANCO 1
00h
Indirect Addresing
Indirect Addresing
80h
01h
TMRO
OPTION_REG
81h
02h
PCL
PCL
82h
03h
STATUS
STATUS
83h
04h
FSR
FSR
84h
05h
GPIO
TRISIO
85h
06h


86h
07h


87h
08h


88h
09h


89h
0Ah
PCLATH
PCLATH
8Ah
0Bh
INTCON
INTCON
8Bh
0Ch
PIR1
PIE1
8Ch
0Dh


8Dh
0Eh
TMR1L
PCON
8Eh
0Fh
TMR1L

8Fh
10h
T1CON
OSCCAL
90h
11h


91h
12h


92h
13h


93h
14h


94h
15h

WPU
95h
16h

IOC
96h
17h


97h
18h


98h
19h
CMCON
VRCON
99h
1Ah

EEDATA
9Ah
1Bh

ERADR
9Bh
1Ch

EECON1
9Ch
1Dh

EECON2
9Dh
1Eh
ADRESH
ADRESL
9Eh
1Fh
ADCON0
ANSEL
9Fh
20h
-
5Fh
Registros de propósito general (64 bytes)
Accesos desde 20h-5Fh
A0h
-
DFh
60h
-
7Fh
Rango de memoria no implementado
Rango de memoria no implementado
E0h
-
FFh
BANCO 0
BANCO 1

En lo adelante nos ocuparemos en la descripción de los registros más importantes para trabajar con PicBasic, ya que este lenguaje de programación no requiere, como en el caso del lenguaje Assembler, del conocimiento estricto de los registros del microcontrolador. No quiere decir esto que el programador no vea necesario el conocer con amplitud el dispositivo que utilizará en su diseño. Cuanto más sabemos del funcionamiento de un dispositivo, tanto más podríamos aprovechar sus recursos con eficiencia. La mejor manera de conocer un chip es estudiando la hoja de datos (datasheet) de su fabricante, en donde se encontrarán detalladas todas las informaciones referentes.



CONFIG: CONFIGURATION WORD (ADDRESS: 2007h)
BG1
BG0
-
-
-
CPD
CP
BODEN
MCLRE
PWRTE
WDTE
FOSC2
FOSC1
FOSC0
Bit 13
Bit 12
Bit 11
Bit 10
Bit 9
Bit
8
Bit 7
Bit
6
Bit
5
Bit
4
Bit
3
Bit
2
Bit
1
Bit
0

Los tres bits FOSC0, FOSC1 y FOSC2 permiten seleccionar el tipo de oscilador que se va a usar, ya sea RC, a cristal o resonador, o una señal proveniente de un oscilador exterior. De acuerdo al código de tres dígitos que se configure se obtendrá lo siguiente:
111 = oscilador RC: Función CLKOUT en el pin GP4/OSC2/CLKOUT, ​​RC en GP5/OSC1/CLKIN 
110 = oscilador RC: funcionalidad E/S en el pin GP4/OSC2/CLKOUT, ​​RC en GP5/OSC1/CLKIN
101 = oscilador INTOSC: Función CLKOUT en GP4 pin/OSC2/CLKOUT, ​​la función de E/S en GP5/OSC1/CLKIN
100 = oscilador INTOSC: la función S en GP4 pin/OSC2 / CLKOUT, ​​la función de E/E/S en GP5/OSC1/CLKIN
011 = CE: funcionalidad E/S en el pin GP4/OSC2/CLKOUT, ​​CLKIN en GP5/OSC1/CLKIN
 
010 = oscilador HS: Alta velocidad de cristal/resonador en GP4/OSC2/ LKOUT y GP5/OSC1/CLKIN
 
001 = oscilador XT: Cristal/resonador en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN
 
000 = oscilador LP: cristal de baja potencia en GP4/OSC2/CLKOUT y GP5/OSC1/CLKIN 

WDTE (Watchdog Timer Enable) Con 1 lógico se habilita el temporizador del perro guardián, el cual provocará un reset cada cierto tiempo, según se haya programado,  para impedir que el programa se ‘cuelgue’; es decir, que no entre en un bucle infinito que no lleve a nada. Generalmente se deja sin función por lo delicado de su uso.

PWRTE (Power Up Timer Enable) Con 0 lógico se habilita el temporizador de encendido, el cual, luego de ser energizado, mantiene inactivo el microcontrolador por unos 72 milisegundos.

MCLRE (Master Clear Enable) Habilitador de limpiador maestro, que con 1 lógico se activa para que el pin GP3 funcione como master clear; y con 0 el pin GP3 funciona como entrada digital.

BODEN (Brown-out Detect Enable) Se activa con 1 lógico para permitir un reset (reposición) automático cuando el voltaje de alimentación del dispositivo cae por debajo de lo previsto por el fabricante. Es conveniente que su uso vaya acompañado con la activación del PWRTE, para que también se provoque un retardo del encendido.

CP (Code Protection, código de protección) y CPD (Code Protection Data,  código de protección de datos) son dos bits que se activan con 0 lógico para proteger de sabotaje el código. También se puede activar o desactivar a través del software del dispositivo programador.

BG1 y BG0 son los bits de calibración de banda prohibida de tensión para BOD y POR. Con 00 se elige menor tensión de banda prohibida (Lowest bandgap voltage), y con 11 se elige mayor tensión de banda prohibida (Highest bandgap voltaje).

Para trabajar con PicBasic es suficiente hacer lo que se muestra en este ejemplo:


Observemos que el programa arranca realizando primero los arreglos necesarios en el registro CONFIG; y se digita ASM (assembler) para indicar que a continuación se escribirá en lenguaje Assembler y no en Basic como se supone requiere el software editor. Ahí se declara, separando por coma, que el dispositivo al cual se instalará el programa es el PIC12F675, que el oscilador RC (resistor-capacitor) es interno y sin salida exterior, que el perro guardián (Watchdog) estará apagado, y que estarán encendidos el master clear, el power timer y la protección del código. Para volver al lenguaje Basic se escribe ENDASM (fin del assembler).

CMCON: REGISTRO CONTROL DEL COMPARADOR (DIRECCIÓN: 19h)
-
COUT
-
CINV
CIS
CM2
CM1
CM0
Bit 7
Bit
6
Bit
5
Bit
4
Bit
3
Bit
2
Bit
1
Bit
0

Al registro CMCON (control del comparador), ubicado en la dirección 19h del banco 0, se le carga el número 7 decimal (00000111 en numeración binaria) para desactivar el uso del comparador operacional. Esto se hace para impedir que interfiera en el funcionamiento compartido de los pines 5, 6 y 7 del chip. En la gráfica de abajo encontramos los ocho modos de configuración disponibles. El modo seleccionado es el número siete (111), el último color naranja, porque desconecta totalmente el comparador y que, para eliminar interferencias, aterriza sus entradas.

Cuando el comparador está en uso, el bit 3 del registro CMCON, (CIS, comparator input switch) es el interruptor que se utiliza para seleccionar  con ‘0’ la entrada inversora de señal (GP1/CIN-) o con ‘1’ la entrada no inversora de señal (GP0/CIN+) en los modos 5 (101 en binario) y 6 (110 en binario) solamente.

Colocando un cero en el bit 4 (CINV, comparator output inversión) la salida del comparador no es invertida; en cambio, si en su lugar se coloca un uno, la salida sufre una inversión de fase.

El bit 6, COUT (comparator output) permite leer (no escribir) el resultado de la salida del comparador. Por tanto,

                 Cuando CINV = 0:                            Cuando CINV = 1:

                 1 = VIN+ > VIN-                               1 = VIN+ < VIN-

                 0 = VIN+ < VIN                                 0 = VIN+ > VIN


En el registro TRISIO se configuran los pines del microcontrolador como entradas (cargando un uno) o como salidas (cargando un cero). En el ejemplo se ha cargado 11111011 (en decimal: 251) para activar  como salida sólo el pin 5, GP2. Las demás quedan como entradas.

TRISIO: REGISTRO TRIESTADOS CONTROL DE LOS PINES GPIO
(DIRECCIÓN: 85h)
-
-
TRISIO5
TRISIO4
TRISIO3
TRISIO2
TRISIO1
TRISIO0
Bit 7
Bit
6
Bit
5
Bit
4
Bit
3
Bit
2
Bit
1
Bit
0

Configurar este registro en Basic no es necesario si se usan las instrucciones Low y High, como se muestra en el ejemplo, ya que estas convierten el pin automáticamente como salida. La diferencia está en que, si se configuran previamente los pines que funcionarán como entradas y como salidas, se puede usar, indiferentemente, el modo directo GPIO.2 = 0 en lugar de Low GPIO.2 y GPIO.2 = 1 en lugar de High GPIO.2 que demandan menos recursos de memoria.

Otro modo para poner en nivel bajo o en nivel alto una salida, o todas las salidas simultáneamente del microcontrolador que estamos estudiando (PIC12F675), es cargando directamente el código correspondiente en el registro GPIO que controla el estado lógico de los pines; como muestra el ejemplo, en este caso para eliminar la posibilidad de que un pin inicie en alto por error.

GPIO: REGISTRO CONTROL GPIO
(DIRECCIÓN: 05h)
-
-
GPIO5
GPIO4
GPIO3
GPIO2
GPIO1
GPIO0
Bit 7
Bit
6
Bit
5
Bit
4
Bit
3
Bit
2
Bit
1
Bit
0

Observe bien que todos los comentarios y aclaraciones del programa están precedidos por una coma (,) o por punto y coma (;) para indicarle al compilador que esos renglones no son parte de la edición del programa.


Configurar el registro ANSEL es de vital importancia para hacer que los pines funcionen como digitales o como analógicos.

ANSEL: REGISTRO SELECTOR PINES ANALÓGICOS/DIGITALES
(DIRECCIÓN: 9Fh)
-
ADCS2
ADCS1
ADCS0
ANS3
ANS2
ANS1
ANS0
Bit 7
Bit
6
Bit
5
Bit
4
Bit
3
Bit
2
Bit
1
Bit
0

Aplicando 1 lógico desde el bit 0 (ANS0) hasta el bit 3 (ANS3) de dicho registro se configuran como entradas analógicas los pines 3, 5, 6 y 7 del microcontrolador, siempre que se hayan configurado en TRISIO como entradas. Y si se coloca 0 lógico se configuran como entradas o salidas digitales.

Del bit 4 al bit 6 se selecciona la frecuencia del reloj de conversión A/D (analógico/digital) aplicando un número binario de 3 bits conforme a las siguientes opciones:

ADCS<2:0>  (Bits selectores del reloj de conversión A/D)
000 = Fosc/2
001 = Fosc/8
010 = Fosc/32
x11 = FRC (Reloj derivado de un oscilador RC interno = 500 kHz máximo)
100 = Fosc/4
101 = Fosc/16
110 = Fosc/64


Nótese que a excepción de la opción x11 cuya frecuencia de reloj para el convertidor A/D proviene del oscilador RC interno (si no se usa cristal, sólo este oscilador RC), las demás opciones son producto de dividir por un múltiplo de 2 la frecuencia del oscilador a cristal (cuando se usa dicho oscilador).

Ya configurados los registros que necesitamos, se crea una etiqueta INICIO: como un punto de partida y de retorno de la rutina de ejecución del programa. Observe que puede elegir cualquier nombre corto, en cualquier idioma siempre que no sea una instrucción Basic, y a la cual se le agregan dos puntos (:) al final. En Assembler no son necesarios los dos puntos.

Las explicaciones de la rutina que procura encender y apagar un diodo LED por el pin 5 del microcontrolador están bastantes claras. Tanto en lenguaje PicBasic como en Assembler se coloca END al final del programa para que el compilador entienda que ahí termina todo, que no hay nada más.


El siguiente esquema presenta las conexiones necesarias para hacer funcionar el microcontrolador parpadeando un diodo emisor de luz (LED) por el pin 5 (GPIO 2).