domingo, 17 de febrero de 2013

Práctica No. 1.2 - Interrupción TMR0

En esta practica al igual que en la pasada el pic esta corriendo el nombre del programador y mostrandolo en un display, pero ahora la interrupción en vez de ser externa es por desbordamiento del TMR0, el objetivo es que mande un pulso alto y uno bajo durante (50Hz * EL numero de lista del programador).

El código del programa es el siguiente:

Y una imagen de la simulación:

Y también se anexa un link para descargar tanto el código como la simulación:

https://www.box.com/s/rqslq31mw7pc807vabkx

Práctica No. 1.1 - Interrupción Externa RB0

La práctica número 1.1 consistía en utilizar la interrupción externa, el pic estaría corriendo un programa que mostrara el nombre de el programador en un display, al activarse la interrupción se empezaría a escuchar una "melodía" previamente diseñada por el programador.

Primero se muestra el código del programa terminado:


Ahora se muestra una imagen de la simulación de el programa anterior:


Además se anexa el programa junto con la simulación para su descarga:

https://www.box.com/s/gtzo3kcrh7i8pdcpu9uq

TIMER

TIMER0

El Timer0 es un temporizador/contador ascendente de 8 bits, cuando trabaja con el reloj del PIC se le suele llamar temporizador y cuando los pulsos los recibe de una fuente externa a través de la patilla T0CKI se le llama contador. Este temporizador viene incorporado en todos los PIC.

T0CKI: Cuando el temporizador trabaje como contador, los pulsos externos los recibirá a través de esta patilla.

OSC1/CLKin y OSC2/CLKout: Son para conectar el oscilador que nos determinará a la frecuencia que va a trabajar nuestro PIC, los dos tipos de osciladores más usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador).


Solo están marcados de un color diferente los registros que están implicados en el funcionamiento del TMR0.

TMR0: Es un registro del que podemos leer el valor del contador en tiempo real, pero también podemos escribir en él y alterar el valor del conteo.

OPTION: Los bits que están en color verde son los que están implicados en la configuración del TIMER0

  • PS0, PS1 y PS2: Configuración del prescaler. El prescaler es un divisor de pulsos que está a la entrada del timer-contador. El prescaler divide el número de pulsos que le entran al timer-contador o al wachtdog. El factor de división es el siguiente (según los valores de PS2, PS1 y PS0 respectivamente).


  • PSA: Bit de asignación de prescaler. Si está a "1" el prescaler se asigna a WDT (Wachtdog), si esta a "0" se asigna al TMR0.
  • TOSE: Bit de selección del tipo de flanco para el TMR0. A "1" se incrementa el TMR0 por flanco descendente de RA4, a "0" se incrementa TMR0 por flanco ascendente de RA4.
  • TOCS: Selecciona la entrada de reloj de TMR0. A "1" la entrada de reloj de TMR0 es por flanco de la patilla RA4, a "0" la entrada de reloj de TMR0 es por ciclo de reloj interno.
El PIC también permite que se produzca una interrupción por desbordamiento del TMR0. Cuando se produce una interrupción el programa abandona temporalmente lo que estaba haciendo para atender la subrutina de interrupción, pero antes guarda en una región especial de la memoria llamada pila la dirección de la siguiente instrucción del programa, para que cuando acabe la subrutina de interrupción pueda seguir ejecutando el programa por donde se había quedado.

El registro que configura todas las interrupciones es el INTCON, el cual está mapeado en los dos bancos, una cosa muy útil cuando se trabaja en ensamblador para no tener que cambiar de banco constantemente para su configuración, pero que en C o PBP no es necesario saber ya que es el compilador el que se encarga de gestionar esto de una manera transparente para el programador.

Ahora vamos a ver lo que significa cada uno de los bits que están implicados en la interrupción por el TMR0:
  • T0IF: Solo se puede leer su valor, es un Flag o bandera que se pone a "1" cuando se produce un desbordamiento del TMR0, (este o no este configurado para producir una interrupción). Cuando se trabaja en ensamblador, este bit hay que ponerlo a "0" por programa, con CCS o PBP no tenemos que preocuparnos por ello.
  • T0IE: Habilita la interrupción por desbordamiento de TMR0. Si este bit esta a "1" la interrupción por desbordamiento de TMR0 es posible.
  • GIE: Habilita las interrupciones globalmente. Este bit permite que cualquier interrupción sea posible. Para poder usar cualquier interrupción hay que habilitar globalmente e individualmente.
Existen varias variables que se pueden utilizar a gusto propio para usar el TMR0, la fórmula para calcularlas es la siguiente:



Fuente de Consulta:
Para mayor información acerca de como utilizar el TMR0 y algunos ejemplos entrar a:
http://www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr0-como-temporizador.html

Oscilador

Es un circuito indispensable para el funcionamiento del microcontrolador y el cual además, define la velocidad a la cual va a trabajar. Para hacer funcionar nuestro diseño podemos elegir entre las siguientes cuatro opciones:

  • Oscilador LP: Oscilador de bajo consumo (Low Power)
  • Oscilador XT: Cristal/Resonador
  • Oscilador HS: Oscilador de alta velocidad (High Speed)
  • Oscilador RC: Resistencia/Condensador
En los modos de oscilador LP, XT y HS el cristal debe ir conectado a los pines 15 y 16, OSC2/CLKout y OSC1/CLKin


Palabra de Configuración

Los bits de configuración, llamados también colectivamente "palabra de configuración" permiten re configurar cirtos aspectos generales del funcionamiento del microcontrolador, estos bits de configuración se guardan en una localización especifica de la memoria de programa del PIC y graban al mismo momento que el código de programación.

                                                                                          Bits de configuración del PIC16f628

CP1:CP0 (Bits de protección de código):
Los bits 13-10 son los encargados de proteger la memoria del programa

CP0 (Bit de protección para código de datos):
1= Protección deshabilitada de la memoria de datos
0= Protección habilitada en la memoria de datos

LVP (Habilitación de la programación por voltaje bajo):
1= Habilitado, la terminal RB4/PGM tiene tal función
0= Deshabilitado, RB4/PGM es una terminal de I/O

BODEN (Bit de reset por voltaje de alimentación bajo):
1= Reset por BOD habilitado
0= Reset por BOD deshabilitado

MCLRE (Habilitación de terminal de reset):
1= Terminal de reset (MCLR) en RA5
0= MCLR conectado internamente a VDD, RA5 es un pin I/O

PWRTEN (Bit de alimentación de temporizador al energizar
1= PWRT Habilitado
0= PWRT Deshabilitado

WDTEN (Bit de habilitación del Watch Dog Timer Enable):
1= Habilitado
0= Deshabilitado

FOSC2:FOSC1:FOSC0 (Bits de selección del tipo de oscilador):

  • XTAL
  • EXT
  • Oscilador Interno
  • Oscilador Interno con salida de CLK
  • Oscilador Interno con resistor
  • Oscilador Interno con resistor y salida de CLK

                                           

Interrupciones

Interrupciones del PIC16F648A

El PIC16F648A cuenta con 10 formas de interrupción:

  • Interrupción Externa RB0
  • TMR0
  • Cambio en Puerto B
  • Comparador
  • USART Tx
  • Usart Rx
  • CCP
  • TMR1
  • TMR2
  • EEPROM
El diagrama lógico de estas interrupciones lo podemos encontrar en la hoja técnica del PIC y es el siguiente:



Ampliación:

Las interrupciones son cambios de trayectorias del flujo de programa causadas por agentes externos de mayor prioridad.
Cuando esto ocurre, el microcontrolador detiene el programa en curso, almacena la dirección en la cual se ha detenido y salta a un vector de interrupción previamente definido en el programa.

Registro INTCON


GIE:
1= Habilita todas las interrupciones
0= Deshabilita las interrupciones

PEIE:
1= Habilita la interrupción por escritura de la EEPROM
0= Deshabilita la interrupción por escritura de la EEPROM

T0IE:
1= Habilita la interupción por temporizador TMR0
0= Deshabilita la interrupción por TMR0

INTE:
1= Habilita la interrupción por puerto RB0/INT
0= Deshabilita la interrupción por RB0/INT

RBIE:
1= Habilita la interrupción por puerto B (RB4-RB7)
0= Deshabilita la interrupción por puerto B

T0IF (Bandera de interrupción por desborde del TMR0):
1= Cuando ocurre un interrupción en RB0/INT este bit debe ponerse a cero por software
 
RBIF (Bandera de interrupción por puerto B)
1= Cuando las entradas RB7 a RB4 cambian de estado este bit debe ponerse a cero por software




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 PC's.
RAP 3: Utiliza la arquitectura interna del microcontrolador para construir una red de microcontroladores.