miércoles, 30 de agosto de 2017

XiuaElectronics: Detección de voltaje Alto/Bajo (HLVD) PIC18XXXX

Detección de voltaje Alto/Bajo (HLVD) PIC18XXXX.


Que tal amigos?

En el día de hoy les traigo un muy interesante y poco conocido tema. En este caso voy a hablar sobre el modulo de detección de caída o subida de tensiones para la familia de PIC18FXXXX. Como tal voy a mostrar como funciona internamente, como se debe configurar y sus posibles aplicaciones.



HIGH/LOW-VOLTAGE DETECT (HLVD) || DETECCIÓN DE VOLTAJE ALTO/BAJO(HLVD).


Los dispositivos PIC18F2455/2550/4455/4550 disponen de un módulo de Detección de Alta/Baja Tensión (HLVD). Este es un circuito programable que permite al usuario especificar un punto de disparo del voltaje del dispositivo y la dirección de cambio desde ese punto. Si el dispositivo experimenta una excursión más allá del punto de disparo en esa dirección, se establece un indicador de interrupción. Si la interrupción está habilitada, la ejecución del programa se ramificará a la dirección del vector de interrupción y el software podrá entonces responder a la interrupción.

El registro de Control de Detección de Alta / Baja Tensión (Registro 24-1) controla completamente el funcionamiento del módulo HLVD. Esto permite que el circuito sea "apagado" por el usuario bajo control de software que minimiza el consumo de corriente para el dispositivo. El diagrama de bloques para el módulo HLVD se muestra en la Figura 24-1.

Registro HLVDCON:



Bit 7: VDIRMAG: Bit de selección de magnitud de dirección de voltaje.
         1 = El evento ocurre cuando el voltaje es igual o excede el punto de disparo (HLVDL3: HLDVL0).
         0 = El evento ocurre cuando el voltaje es igual o inferior al punto de disparo (HLVDL3: HLVDL0).

Bit 6: No implementado: Leer como '0'.

Bit 5: IRVST: Voltaje de referencia interno.
         1 = Indica que la lógica de detección de voltaje generará el indicador de interrupción en el rango de voltaje especificado.
         0 = Indica que la lógica de detección de voltaje no generará el indicador de interrupción en el rango de voltaje especificado y no se habilitará la interrupción HLVD.

Bit 4: HLVDEN: Bit de habilitación de potencia de detección de alta / baja tensión.
         1 = HLVDEN activado
         0 = HLVDEN desactivado

Bit 3-0: HLVDL3:HLVDL0: Bits límite de detección de tensión (1).
         1111 = Se utiliza una entrada analógica externa (la entrada proviene del pin HLVDIN).
         1110 = Ajuste máximo.
         ... Mirar tabla 28-6
         ... Mirar tabla 28-6
         ... Mirar tabla 28-6
         0000 = Ajuste mínimo.

En la siguiente tabla (Table 28-6) podremos observar como configurar los Bits 3-0 para el limite de detección del voltaje.


El módulo se habilita estableciendo el bit HLVDEN, es decir enviando un "1 lógico" al registro de configuración HLVDCON. Cada vez que el módulo HLVD está habilitado, los circuitos requieren algún tiempo para estabilizarse. El bit IRVST es un bit de sólo lectura y se utiliza para indicar cuándo el circuito es estable. El módulo sólo puede generar una interrupción después de que el circuito sea estable e IRVST esté ajustado.

El bit VDIRMAG determina el funcionamiento general del módulo. Cuando se borra VDIRMAG, el módulo supervisa las caídas en VDD por debajo de un punto de consigna predeterminado. Cuando el bit está ajustado, el módulo supervisa para subir en VDD por encima del punto de ajuste.

Cuando el módulo HLVD está habilitado, un comparador utiliza una tensión de referencia generada internamente como punto de consigna. El punto de ajuste se compara con el punto de disparo, donde cada nodo en el divisor de resistencia representa un voltaje de punto de disparo. El voltaje de "punto de disparo" es el nivel de tensión al que el dispositivo detecta un evento de alta o baja tensión, dependiendo de la configuración del módulo. Cuando la tensión de alimentación es igual al punto de disparo, la tensión extraída de la matriz de resistencia es igual a la tensión de referencia interna generada por el módulo de referencia de tensión. El comparador genera entonces una señal de interrupción ajustando el bit HLVDIF.

El voltaje de punto de disparo es programable por software para cualquiera de los 16 valores. El punto de disparo se selecciona mediante la programación de los bits HLVDL3: HLVDL0 (HLVDCON <3: 0="">).

El módulo HLVD tiene una característica adicional que permite al usuario suministrar el voltaje de disparo al módulo desde una fuente externa. Este modo se habilita cuando los bits, HLVDL3: HLVDL0, se establecen en '1111'. En este estado, la entrada del comparador se multiplexa desde el pin de entrada externo HLVDIN. Esto da a los usuarios flexibilidad porque les permite configurar la interrupción de Detección de Alta / Baja Tensión para que se produzca a cualquier voltaje en el rango de operación válido.

En la siguiente figura (Figure 24-1) veremos un bosquejo de como funciona internamente el modulo de detección de voltaje "HLVD" de la familia de PIC18FXXXX:



Bueno para resumir un poco lo anterior y tener un mejor entendimiento y también para aquellos que le es un poco difícil entender todo esto lo resumiré de la forma más simple posible. Este módulo lo que hace es detectarnos un voltaje, dependiendo de su configuración detectaremos cuando un voltaje disminuya o aumente, luego de detectar esta caída o aumento se activará una interrupción y  través de código lo que haremos es ejecutar una cierta orden. 
Este módulo tiene de interesante que puede ser utilizado en muchas aplicaciones. Afortunadamente podemos configurar el voltaje de disparo externamente, es decir, alimentando una entrada con "X" voltaje o internamente con la ayuda del voltaje de referencia interno. Anteriormente vimos los diferentes voltajes a los que podemos configurarlo (Table 28-6).

Pasos para su configuración:

Los siguientes pasos son necesarios para configurar el HLVD
módulo:

1) Desactive el módulo borrando el bit HLVDEN (HLVDCON <4>).
2) Escriba el valor en los bits HLVDL3: HLVDL0 que selecciona el punto de disparo HLVD deseado.
3) Ajuste el bit VDIRMAG para detectar alta tensión (VDIRMAG = 1) o baja tensión (VDIRMAG = 0).
4) Active el módulo HLVD estableciendo el bit HLVDEN.
5) Borre la bandera de interrupción HLVD, HLVDIF (PIR2 <2>), que puede haber sido establecida desde una interrupción anterior.
6) Habilite la interrupción HLVD, si se desean interrupciones, estableciendo los bits HLVDIE y GIE / GIEH (PIE2 <2> e INTCON <7>). No se generará una interrupción hasta que se establezca el bit IRVST.




Aplicaciones:



En muchas aplicaciones, es deseable la capacidad de detectar una caída por debajo o por encima de un umbral particular. Por ejemplo, el módulo HLVD podría habilitarse periódicamente para detectar la conexión o desacoplamiento de USB (Universal Serial Bus). Esto supone que el dispositivo está alimentado por una fuente de voltaje más baja que el USB cuando está desarmado. Una conexión indicaría una detección de alto voltaje de, por ejemplo, 3.3V a 5V (el voltaje en USB) y viceversa para una separación. Esta característica podría ahorrar un diseño algunos componentes adicionales y una señal de la conexión (perno de la entrada).


Para las aplicaciones generales de las baterías, la Figura 24-4 muestra una posible curva de voltaje. Con el tiempo, el voltaje del dispositivo disminuye. Cuando la tensión del dispositivo alcanza la tensión, VA, la lógica HLVD genera una interrupción en el tiempo, TA. La interrupción podría provocar la ejecución de un ISR, lo que permitiría a la aplicación llevar a cabo tareas de mantenimiento y realizar un apagado controlado antes de que el voltaje del dispositivo salga del rango de funcionamiento válido en TB. El HLVD, por lo tanto, daría a la aplicación una ventana de tiempo, representada por la diferencia entre TA y TB, para salir con seguridad.






Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.

Facebook: https://www.facebook.com/electronicalibrexc/
Youtube:  http://www.youtube.com/c/breismanrueda
Google +: https://plus.google.com/u/0/+breismanrueda
Twitter: https://twitter.com/BreismamR

Esto es todo por hoy, Sigue mi blog y visita mi próxima entrada!

Cualquier duda, trabajo, tutoria personalizada por correo electrónico o pagina en facebook:
Correo: ElectronicaLibreXC@outlook.com
Facebook: https://www.facebook.com/electronicalibrexc/



Salu2...

Bien muchachos, esto es todo por hoy; estén pendiente en mi canal, o de mi blog o de mi pagina de 

sábado, 26 de agosto de 2017

XiuaElectronics: Memoria STACK en Microcontroladores PIC16F628A.

Memoria STACK en Microcontroladores PIC16F628A.


Que tal amigos?

En el día de hoy vamos a hablar de algo muy importante a la hora de programar microcontroladores PIC, en este caso me refiero a su memoria STACK. ¿Pero que es su memoria STACK? ¿Porqué es importante la memoria STACK?


Memoria STACK:

En los microcontroladores pic la memoria STACK, es una memoria interna dedicada, de un tamaño limitado dependiendo el microcontrolador, de diferentes niveles y distinta de las memorias dedicadas para el almacenamiento de datos y como tal del programa del microcontrolador. Esta memoria es inaccesible para el programador y esta organizada en forma de pila, y usualmente se utiliza de forma automática por el microcontrolador para guardar las direcciones de retorno de subrutinas e interrupciones. Cada posición es de 13 bits para el caso del pic16f628a, microcontrolador PIC utilizado en el curso Curso Proteus 8.5 + MPASM y PIC16F628A y permite guardar una copia completa del PC. Como en toda memoria tipo pila, los datos son accedidos de manera tal que el primero que entra es el ultimo que sale.


STACK PIC16F628A:


La familia PIC16F627A / 628A / 648A tiene una pila de hardware de 8 niveles de profundidad x 13 bits (Figura 4-1). El espacio de pila no forma parte del espacio de programa o de datos y el puntero de pila no es legible ni puede escribirse. El PC es PUSHed en la pila cuando se ejecuta una instrucción CALL o una interrupción causa una rama. La pila es POPed en el caso de una ejecución de la instrucción RETURN, RETLW o RETFIE. PCLATH no se ve afectado por una operación PUSH o POP.


Como ya se menciono anteriormente, el stack y el puntero interno que lo direcciona, son invisibles para el programador, solo se los accede automáticamente para guardar o rescatar las direcciones de programa cuando se ejecutan las instrucciones de llamada o retorno de subrutinas, o cuando se produce una interrupción o se ejecuta una instrucción de retorno de ella

La pila funciona como un amortiguador circular. Esto significa que después de que la pila ha sido PUSHed ocho veces, la novena PUSH sobrescribe el valor que fue almacenado desde el primer PUSH. El décimo PUSH sobrescribe el segundo PUSH (y así sucesivamente). 




Nota 1: No hay bits de estado para indicar el desbordamiento de la pila o las condiciones de desbordamiento de la pila.

Nota 2: No hay instrucciones / mnemónicos llamados PUSH o POP. Estas son acciones que ocurren desde la ejecución de las instrucciones CALL, RETURN, RETLW y RETFIE, o la vectorización a una dirección de interrupción.










Para tener en cuenta lo que hacen los niveles de profundidad del STACK es el permitir el anidamiento de subrutinas; por ejemplo para el PIC16f628A le es posible realizar 8 niveles de anidamiento de subrutinas que serían llamadas desde el programa principal.



Acá vemos como el programa principal llama a la primera subrutina "Subrutina1" y esta llama a "Subrutina2", así sucesivamente hasta las "Subrutina8". Pero si en la subrutina "Subrutina8" se intentara llamar a otra subrutina se desbordaría la capacidad del STACK, que solo puede almacenar ocho direcciones de retorno.

Esto de hecho representa una traba para el programador y además parece impedir o dificultar la programación estructurada, sin embargo es una buena solución de compromiso ya que estos microcontroladores están diseñados para aplicaciones de alta velocidad en tiempo real, en las que el overhead (demoras adicionales) que ocasiona un excesivo anidamiento de subrutinas es inaceptable. Por otra parte existen técnicas de organización del programa que permiten mantener la claridad de la programación estructurada, sin necesidad de utilizar tantas subrutinas anidadas.







Bien muchachos, esto es todo por hoy; estén pendiente en mi canal, o de mi blog o de mi pagina de Facebook.

Esto es todo por hoy, Sigue mi blog y visita mi próxima entrada!

Cualquier duda, trabajo, tutoria personalizada por correo electronico o pagina en facebook:



Salu2...

.