TUTORIAL PRIMERA PARTE: GENERACIÓN DE UN RETARDO CON TIMER.



Documentos relacionados
El TIMER 0. (c) Domingo Llorente

SISTEMAS ELECTRÓNICOS AVANZADOS. ING. TÉC. INDUSTRIAL ELECTRÓNICO

Temporizadores y contadores en tiempo real: El módulo Timer0 y el prescaler del PIC

COMUNICACION DE PLC S MEDIANTE EL PUERTO RS- 485 Y MONITOREADO POR PANTALLA.

Temporizadores y contadores en tiempo real: El módulo Timer0 del PIC.

Usando los Codificadores Cuadráticos

Tema. Módulo Captura Comparación Modulación n de Achura de Pulsos. C. F. G.S. D.P.E. Módulo de Proyectos 1

Tema 14. Interrupciones. Las. C. F. G.S. D.P.E. Módulo de Proyectos 1

Creación de Funciones de Conducción

Creación de nuevos modelos a partir de otros ya existentes.

Curso sobre Controladores Lógicos Programables (PLC).

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

TEMPORIZADORES, CONTADORES Y COMPARADORES

CÓMO CREAR NUESTRO CATÁLOGO

GUIA DE USO DEL ACCPRO

Actividad 4: Comunicación entre PLC s vía Ethernet

Memoria La memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos).

Manual de software. Dynamic Cloud. 10/2014 MS-Dynamic_Cloud v1.2

Programación de Microcontroladores

Unidad: Representación gráfica del movimiento

Manual de usuario. Autor: Oriol Borrás Gené.

Capitulo 3. Desarrollo del Software

Control, Instrumentación e Instalaciones Ingeniería Ambiental

PUERTOS DE ENTRADA Y SALIDA

SOFTWARE CSU-485. Para conectar el dispositivo CSU-485 lo podemos hacer de dos maneras:

Hilos, comunicación y competencia entre procesos. Dr. Alonso Ramírez Manzanares 2-Sep-2010

GENERACIÓN DE TRANSFERENCIAS

Accesibilidad web GUÍA FUNCIONAL

DESCRIPCION DE PLC UP32 17/07/11 MAN-PLC-UP32-01A

SISTEMAS NUMERICOS. Ing. Rudy Alberto Bravo

5. SECCIÓN DEL MICROCONTROLADOR (PROGRAMACIÓN)

Agradecimiento: A Javier Lomelín Urrea por su dedicación y esmero en este proyecto. Manuel Fernando Guzmán Muñoz Presidente OMIJal

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores

MANUAL DE USUARIO Sensor de temperatura y humedad digital MCI-SEN REV. 1.0

Curso Internet Básico - Aularagon

Configuracion Escritorio Remoto Windows 2003

Comunicación CPU S Vs CPU S por TCP

CAPITULO II SISTEMAS DE NUMERACIÓN Y CÓDIGOS

ZILOG DEVELOPER STUDIO

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento



Curso Completo de Electrónica Digital

podemos enfocar al funcionamiento del robot, es decir la parte de electrónica. Para que el

SISTEMAS DE NUMERACIÓN. Sistema decimal

INSTITUTO TECNOLÓGICO DE COLIMA LIC. EN INFORMÁTICA

BUS I2C. IES Los Viveros Sevilla Dpto. Electrónica. 1

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

(PHP y APACHE), y el programa de comunicación Skype, para controlar de manera

TUTORIAL. Configuración de cuentas de correo electrónico

MANUAL DE AYUDA. MODULO SAT (Anexo Integración AGIL SAT)

El módulo LCD Ejemplos de funcionamiento

ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ

Familias de microcontroladores de radio frecuencia.

Microcontrolador PIC 16F84

REQUISITOS MÍNIMOS RECOMENDADOS para Windows 7

Parámetros con la ventana de selección de usuario, reglas, texto y descomposición (IVE)

Temporizadores/Contadores

Impress : Programa de presentaciones de OpenOffice.

El protocolo IMAP ofrece la descarga de correos en modo sólo lectura, es decir descarga sólo una copia del correo y no permite el borrado.

Manual de Uso Simuladores Gmetrix

Regatta Race Timer_W014. Manual de Instrucciones

EL PROGRAMA DE PRESENTACIONES IMPRESS (I)

MCBtec Mas información en

PUESTA EN MARCHA PROGRAMA GESTION DE OPTICAS. Junio

MANUAL DE USUARIO SISTEMA PEAJE

Instructivo Outlook Mesa de ayuda Sistemas. Introducción

PRACTICA #1. Aprender a programar una interrupción software empleando C y/o Ensamblador.

Tema 8. Circuitos secuenciales de Propósito general: REGISTROS Y CONTADORES

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

DESCRIPCION DEL SITEMA MASTER.

Inicio del programa WORD 2007

RESOLUCIÓN DE INCIDENCIAS PROCURADORES

Introducción a la plataforma Moodle Aníbal de la Torre Plataforma Moodle. Accediendo a los contenidos

Proyecto final Diseño de un circuito secuencial. utilizando un contador binario de cuatro bits

CURSO BÁSICO PARA TOCAR EL PIANO. 1. Introducción. Capítulo siguiente: 2 - Las claves

Web Publishing con LabVIEW (I)

Universidad Autónoma de Baja California Facultad de Ingeniería Mexicali


Figura 1. Símbolo que representa una ALU. El sentido y la funcionalidad de las señales de la ALU de la Figura 1 es el siguiente:

UNIDADES DE ALMACENAMIENTO DE DATOS

TEMA - 3 LÓGICA SECUENCIAL. REGISTROS DE DESPLAZAMIENTO Y CONTADORES. 1.- Introducción.

TEMA7. SISTEMAS SECUENCIALES

GENERACIÓN DE ANTICIPOS DE CRÉDITO

Tema 2: Programación de PLCs

Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones

LABORATORIO 1 OPERACIONES DE ENTRADA Y SALIDA

iam Izenpe Manual de usuario para Windows

Matemáticas para la Computación

Crear presentaciones con Impress de OpenOffice

Ingeniero en Teleinformática Técnico Superior Universitario en Teleinformática

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

Aproximación local. Plano tangente. Derivadas parciales.

editor de HTML integrado en Moodle. El contenido se divide en distintas partes llamadas páginas, que se muestran individualmente.

CIF-KM. GUÍA DE LOS PRIMEROS PASOS

SIMULADOR DE SISTEMAS DE EVENTOS DISCRETOS

Análisis de medidas conjuntas (conjoint analysis)

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

INSTRUCTIVO PARA LA PUESTA EN MARCHA DE LAS TERMINALES IP EN EL SISTEMA ACCESO

AUTOMATIZACIÓN INDUSTRIAL

Transcripción:

1 TUTORIAL OBJETIVOS Familiarizarse con el TMR0 como contador de pulsos internos y generador de retardos. Conocer el método del polling para verificar banderas de dispositivos. Crear y manipular variables INTRODUCCIÓN En esta práctica pretendemos utilizar el timer 0 como contador de pulsos internos para generar bases de tiempo. Inicialmente lo usaremos para generar retardos variables para controlar la velocidad de un motor paso a paso. En una segunda parte de este tutorial incrementaremos una variable cada cierto tiempo (es decir realizaremos un conteo) y utilizaremos displays de 7 segmentos para visualizar los datos. PRIMERA PARTE: GENERACIÓN DE UN RETARDO CON TIMER. CONCEPTOS: El timer0: Un temporizador es un módulo que se encarga de contar ya sea tiempos (pulsos del reloj interno) o pulsos externos (pulsos recibidos por el pin RA para este caso particular). El timer0 trabaja sobre un registro llamado TMR0 en el cual guarda el conteo actual de los pulsos (8 bits) y es controlado por un registro llamado OPTION_REG (el cual también controla otras funciones del microcontrolador). A continuación se ilustra el registro de control y la función de cada uno de sus bits. OPTION_REG: Bit 7: RBPU: Cuando está en cero activa las pullups del puerto B, no se usa para controlar el TMR0 pero se usará mas adelante. Bit 6: INTEDG: No se usa para el TMR0, se usa para la interrupción externa. Bit 5: T0CS: Acá indicamos cual es la fuente para el conteo, en uno indica que se contaran pulso externos por el pin RA (T0CKI) (contador) en cero indicaran que se cuentan ciclos internos de instrucción del microcontrolador (temporizador) (1 ciclo de instrucción = ciclos del reloj). 1

2 Bit : T0SE: Si se esta utilizando como contador de eventos por RA, en este bit se indica si se incrementa en un flanco de subida (0) o de bajada (1). Bit 3: PSA: Asignación del preescaler, el preescaler es un módulo que permite incrementar el conteo cada dos, cuatro, ocho, dieciséis... pulsos en lugar de incrementarlo en cada pulso, al colocarlo en cero el preescaler se asignara al TMR0, de resto se asignará al WDT. Bit 2-0: PS2 PS0: Acá seleccionamos el valor del preescaler según la siguiente tabla: Desbordamiento del TMR0: El Tmr0 trabaja sobre un registro de 8 bits, por lo tanto su máximo valor alcanzable es 255, cuando alcanza este valor el próximo pulso que sea contado causará el desbordamiento del TMR0, en este momento el Tmr0 volverá al valor de 0 y una bandera llamada T0IF (del registro INTCON) será activada indicando que ha sucedido desbordamiento, está bandera puede disparar una interrupción si esta está habilitada. Para generar un retardo (o una base de tiempo) utilizando el TMR0 o cualquier otro temporizador procedemos de la siguiente manera: Cargamos un valor inicial en TMR0, en este momento el TMR0 empieza a contar a partir de dicho valor, luego verificamos cuando se ha cumplido el tiempo al saber cuando se desbordó el timer, ya sea preguntando continuamente por la bandera T0IF, o por medio de una interrupción. El tiempo generado a partir de este retardo estará dado por la fórmula: Tiempo = Fosc ( 256 TMR0) Pr eescaler Donde Fosc es la frecuencia de oscilador usada, TMR0 es el valor cargado inicialmente en dicho registro y preescaler es el valor escogido en el OPTION_REG. Ejemplo: 2

3 Para generar un retardo de 10ms, usando un preescaler de 1:128 tendríamos y un oscilador de Mhz tendríamos: 10ms = ( 256 TMR0)128 Mhz ( 10ms) ( ) Mhz TMR 0 = 256 = 177.8 128 Obviamente, solo podemos escribir valores enteros, por lo tanto escogemos el valor de TMR0 igual 178 y obtenemos un pequeño error por la aproximación. El código para el retardo sería de la siguiente forma: OPTION=0b00000110; //En la configuración, TMR0 como contador interno //preescaler 1:128 TMR0=178; while(t0if==0) //Cargo el valor del retardo //Limpio bandera de desbordamiento. //Espero que se cumpla el tiempo. En la instrucción while(t0if==0) el microcontrolador estará preguntando continuamente por la bandera de desbordamiento del TMR0, cuando haya transcurrido el tiempo de retardo el timer se desbordará y se pondrá en 1 la bandera del TMR0, por lo tanto el microcontrolador saldrá de este ciclo y continuará la ejecución. Al simular el retardo anterior obtenemos un tiempo de: 9.99ms. El retardo más grande que puede obtenerse por medio de este método, a un cristal de Mhz sería: Tiempo = 53 Mhz ( 256 0) 256 = 65. ms El cual es relativamente pequeño, en especial si se buscan retardos como en nuestro caso del orden de 200 o 300ms necesitamos llamar varias veces el retardo. En ocasiones se utilizan variables para contar varias veces el retardo. Basados en lo anterior podemos realizar un código que permita mover un motor de paso a paso utilizando una secuencia normal con retardo variable, para ello leeremos un valor de 8 bits en el puerto B, dicho valor será cargado en TMR0 para generar un retardo variable, además se agregará un swiche en RA0 para controlar el sentido de giro, se propone el siguiente código: 3

#include <pic.h> void retardo (void); void main (void) //Configuración de puertos TRISD=0b11110000; TRISB=0b11111111; //PORTB son entradas // TRISA=0b11111111; //PORTA son entradas ADCON1=6; ANSEL=0x00; ANSELH=0x00; OPTION=0b00000111; while(1) PORTD=0b00001000; PORTD=0b00000100; PORTD=0b00000010; PORTD=0b00000001; //Opcional //Configuro TMR0. void retardo (void) while(t0if==0) ; //Subrutina para el retardo variable

5 En el código anterior se ha hecho uso de subrutinas para evitar copiar varias veces el código del retardo. Obsérvese que si se introduce un valor muy cercano a 256 en el puerto B el tiempo de retardo generado será muy pequeño y el motor empezará a oscilar. ESQUEMA DE CONEXIONES: 5