martes, 29 de enero de 2013

Palabra de Configuración.




Existen ciertos aspectos del PIC que han de ser activados o desactivados cuando se programa y no se pueden volver a cambiar hasta que el PIC no se reprograme de nuevo, a esto, se le conoce como palabra de configuración
La palabra de configuración  permite, como su nombre lo dice, configurar ciertos aspectos generales del funcionamiento de nuestro microcontrolador, estos bits de configuración se guardan en una localidad específica de la memoria de programa del PIC y se graban a la par que el código escrito.
El estado por defecto de los bits de configuración cuando no han sido programados es de 1 lógico; por lo cual decimos que programar los bits de configuración del PIC equivale a asignarles un 0 lógico.
Debemos recordar que NO todos los PIC’s tienen los mismos bits de configuración, pero no por eso todos van a ser diferentes.
Los bits más comunes en los diferentes PIC’s son:
Bits de Protección de Código. (CP0-CP1).

Protección de Memoria EEPROM de Datos. (DP)
Habilitación de Temporizador de Encendido. (PWRTE)
Función del Pin /MCLR (MCLRE)
Habilitación del Watchdog. (WDTE)
Selección de Oscilador. (FOSC1..FOSC0)
Etc.

A continuación veremos un ejemplo de cómo habilitar o des-habilitar ciertas características en nuestra palabra de configuración.


martes, 22 de enero de 2013

Interfaces y/o Periféricos de salida de un Microcontrolador

·         *  Optoacoplador: El optoaclopador lo que hace es una interfaz del voltaje de salida del microcontrolador y como se ve el 4N25 del otro lado, opuesto al led, tiene un transistor, en el cual se pueden usar con una tensión pequeña de salida, una grande ya que tenemos un transistor PNP.


·        *    Esta es con un Rele, esta es la formas mas sencilla de gobernar dispositivos a partir de una línea de salida del puerto, cuando la salida del microcontrolador esta en un nivel alto hace pasar una corriente al transistor haciendo que se active y que el rele cierre sus contactos, con esto controlar un elemento mas grande de potencia, se puede remplazar el transistor por un Darlington para tener una mayor eficiencia y rapidez.


*  Para sustituir un rele y tener una mayor velocidad, ya que el rele es mecánico, se usa un MOC3041, es decir un FotoTriac, con esto se aísla el microcontrolador y la carga de 230 V, este es un circuito integrado conformado de un LED que controla al fototriac. Este dispositivo es diseñado para usarce como interfaz de sistema lógicos entre equipos que deben alimentarse con 230v o menos de la red eléctrica.







Evitar alteraciones de registros por interrupción

Durante una interrupción el único registro que se salvaguarda en la pila, es el contador de programa. La subrutina de atención a la interrupción puede alterar el contenido de nuestros registros del microcontrolador. Por esta razón al iniciar la rutina de atención a la interrupción es conveniente guardar el valor de nuestros registros y restaurarlos antes de la instrucción retfie.
A simple vista, guardar los datos y restaurarlos sin modificar los contenidos parece fácil, el contenido de los registros W y STATUS deben guardarse primero y después los demás datos que puedan variar su valores durante la interrupción.
Para dejar mas claro esto, a continuación se expondrá la manera en que no esta correcto el guardado de datos y la correcta.


            ORG    0          ;Inicio del programa
            goto     Inicio
            ORG    4          ; Vector de interrupción
            goto     Serviciodeinterrupcion

Inicio
---------
Subrutina “Serviciodeinterrupcion”
; Esta subrutina puede alterar los registros, asi que debemos preservar su valor previo

            CBLOCK
            Guarda_W
            Guarda_STATUS
            Guarda_RegistroA
            Guarda_ RegistroB
            ….
            ENDC
;Ya se preservaron los valores de W y STATUS
Serviciodeinterrupcion
            movwf              Guarda_W      ;Guarda W y STATUS
            movf                STATUS,W       ;Esta instrucción altera el registro STATUS
            movwf              Guarda_STATUS        
            movf                RegistroA,W
            movwf              Guarda_RegistroA       ;Guarda RegistroA alterado
            movf                RegistroB,W                 ;Guarda RegistroB
            movwf              Guarda_RegistroB      
            …
; Aquí va el resto de la rutina de atención
            …
;Ahora se deben restaurar los valores de los registros
            movf                Guarda_RegistroB,W   ;Restaura el contenido de B
            movwf              RegistroB        
            movf                Guarda_RegistroA,W
            movwf              RegistroA                     ; Restaura el contenido de A
            movf                Guarda_STATUS,W     ;Esta instrucción ha alterado el contenido de
            movwf              STATUS                                   ;STATUS
            movf                Guarda_W,W             ;Esta instrucción vuelve a alterar STATUS
            bcf                   INTCON,INTF               ;Limpia la Flag para la interrupción
            retfie                                                   ;Retorna a antes de la interrupción



La parte del programa anterior esta errónea ya que al mover un registro cualquiera al registro de trabajo W corrompe el flag Z y modifica el registro STATUS, lo que se recomiendo para evitar este tipo de problemas es lo siguiente:


;No se puede usar la instrucción “movf STATUS,W” porque corrompe el contenido de STATUS
Serviciodeinterrupcion
            movwf              Guarda_W      ;Guarda W y STATUS
            swapf               STATUS,W       ;Asi no se altera el registro STATUS
            movwf              Guarda_STATUS        
            movf                RegistroA,W
            movwf              Guarda_RegistroA       ;Guarda RegistroA
            movf                RegistroB,W                 ;Guarda RegistroB
            movwf              Guarda_RegistroB      
            …
            bcf                   STATUS,RP0                 ;Asegurar que trabajamos en el banco 0
; Aquí va el resto de la rutina de atención
            …
;Ahora se deben restaurar los valores de los registros
            movf                Guarda_RegistroB,W   ;Restaura el contenido de B
            movwf              RegistroB        
            movf                Guarda_RegistroA,W
            movwf              RegistroA                     ; Restaura el contenido de A
            swapf               Guarda_STATUS,W     ;Restaura STATUS con su valor original
            movwf              STATUS                                  
            swapf               Guarda_W,F               ;Restaura W como estaba antes
            swapf               Guarda_W,W
            bcf                   INTCON,INTF               ;Limpia la Flag para la interrupción
            retfie                                                   ;Retorna a antes de la interrupción



La función de la instrucción “swapf STATUS, W” mueve los datos sin afectar el registro STATUS, aunque antes del proceso los nibles se intercambian, posteriormente son restaurados y esto sin afectar ninguna de las banderas como la Z, evitando hacer “movf STATUS,W” y no se altera la bandera Z.


Temario Microelectronica Programable


                                     Unidad de Aprendizaje: Microelectrónica Programable

Competencia General:
Modela aplicaciones con microcontroladores utilizando herramientas de desarrollo que auxilian en la construcción de un sistema.

Unidad 1
Competencia: Emplea las interrupciones en el desarrollo de soluciones a problemas complejos.
RAP 1: Usa interrupciones basadas en temporizadores para resolver problemas.
RAP 2: Aplica interrupciones por hardware para el llamado a subrutinas aplicables a casos prácticos.

Unidad 2
Competencia: Emplea un microcontrolador para procesamiento de señales analógicas y digitales.
RAP 1: Aplica los comparadores analógicos del microcontrolador a soluciones de problemas.
RAP 2: Usa el convertidor analógico digital que contiene el microcontrolador para interpretar y emplear señales analógicas.
RAP 3: Aplica la modulación por ancho de pulso en el control de velocidad de motores de corriente directa y control de posición de servomotores.

Unidad 3
Competencia: Emplea el microcontrolador en la comunicación de datos y control de periféricos de forma multiplexada.
RAP 1: Usa diferentes elementos periféricos utilizando los puertos del microcontrolador de forma multiplexada.
RAP 2: Utiliza los puertos del microcontrolador de forma bidireccional  en la solución de un problema.

Unidad 4
Competencia: Aplica el microcontrolador para crear interfaces entre varios de ellos y con computadoras personales.
RAP 1: Utiliza el microcontrolador para realizar comunicación de datos en forma paralela.
RAP 2: Utiliza el microcontrolador para realizar comunicaciones de datos en forma serial a periféricos y/o PCs.
RAP 3: Utiliza la arquitectura interna del microcontrolador para construir una red de microcontroladores.

lunes, 21 de enero de 2013

Interrupciones

Una de las características más importante de los micro controladores es que tienen la posibilidad de maneja interrupciones. Se trata de un proceso en el cual, el micro controlador al recibir dicha interrupción, deja de hacer lo que realizaba, atiende el suceso y una vez terminado vuelve a su actividad primaria.
Cada fuente de interrupción está controlada por dos bits, un bit local de interrupciones (terminado en E) de permiso o prohibición de ejecución. Si esta en 0 bloqueara la solicitud de interrupción, de lo contrario, si esta en 1 permitirá la ejecución. Un bit que actúa como señalizador (terminado en F) el cual es activado (puesto a 1) se ha producido la interrupción. Además existe un bit de control global, el cual se llama GIE (INTCON <7>), el cual si esta desactivado bloquea todas las solicitudes de interrupción.
Lo anterior puede interpretarse mejor de acuerdo al siguiente diagrama a bloques:
Interrupción externa por RB0:
Para el control de la interrupción externa, es necesario dos bits más RPBU (OPTION_REG<7>), que activa o desactiva las resistencias Pull-Up internas del PORTB, en caso de que el dispositivo conectado sea de colector abierto y el más importante INTEDG (OPTION_REG<6>), si está en 1, la interrupción se generara por flanco ascendente y en será, se generara por un flanco de bajada. 
Este es un claro ejemplo del uso que se le puede dar a una interrupción externa,  en este ejemplo al dar un pulso en RB0 cambiara de estado un led que se encuentre en RB1 y para esto se configura con un flaco de subida.
Interrupción por cambio de estado RB4-RB7:
Para activar la interrupción por cambio de nivel en los pines <RB4-RB7> los bits RBIE y GIE del registro INTCON deben estar a “1”, en estas condiciones cuando se produce un cambio de nivel en cualquiera de las líneas RB7 a RB4 se activa el flag RBIF del registro INTCON.
Por cambio de estado o de puerto. En este tipo de interrupciones, lo que se hace es configurar de RB0 a RB3 como salidas y obviamente en un estado bajo, mientras que de RB4 a RB7, serán entradas y estarán en un nivel alto. Supongamos que en un teclado matricial, el cual solo es un arreglo de botones conectado en filas y columnas aplicamos esta interrupción, al momento en el que presionamos un botón –en este caso una tecla- se conecta una fila con una columna, se llega a producir un cambio de estado ya sea nivel bajo o alto, pero a fin de cuentas se obtiene una interrupción como tal.
Interrupción por desbordamiento del timer:
Para autorizar una interrupción por desbordamiento del TMR0 los bits TOIE y GIE del registro INTCON deben posicionarse a “1”. En estas condiciones cuando el temporizador TMR0 se desborda, al pasar de b’11111111’ (FFh) a b’00000000’ (00h), activa el flag TOIF del registro INTCON produciendo de esta manera una interrupción.
Otros tipos de interrupciones de los cuales constan los PIC’s, pueden ser:
ü  Por medio de un comparador.
ü  En base a datos de una EEPROM.
ü  Por TIMER1 y TIMER2.
ü  Con ayuda de un USART.