Vous êtes sur la page 1sur 29

Arquitectura de Computadoras

Semana 07: Retardo generado


por software

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

Temario:

– Ciclo de instrucción
– Señal de reloj del sistema
– Duración de un segmento de programa
– Definición de retardo
– Implementación manual de rutinas de retardo
– Generación automática de rutinas de retardo
– Aplicación: Comunicación serial

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.1.- Ciclo de instrucción

¿Cuánto tiempo demora una


instrucción en ejecutarse?

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.1.- Ciclo de instrucción

En la primera parte de nuestro curso, vimos que el ciclo de una instrucción está compuesto
por diferentes pasos, los cuales pueden agruparse en dos etapas generales: búsqueda y
ejecución. Estas etapas requieren de tiempo para poder completarse. El tiempo requerido
para que el ciclo de una instrucción se complete puede expresarse en ciclos máquina o en
ciclos de reloj. Lo más común es expresar el ciclo de instrucción en ciclos de reloj.

La cantidad de ciclos de reloj por cada ciclo de instrucción depende de la arquitectura


empleada. Por ejemplo: en los microcontroladores PIC de la familia 18F, el ciclo de
instrucción equivale a 4 ciclos de reloj. Por otro lado, en los microcontroladores AVR, como el
Atmega2560 (empleado en este curso), el ciclo de instrucción equivale 1 ciclo de reloj.

Es importante aclarar que algunas instrucciones pueden tomar más de un ciclo de


instrucción en ejecutarse, dependiendo de la complejidad de la instrucción.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.2.- Señal de reloj del sistema

Una computadora es un sistema digital síncrono y, por lo tanto, requiere de una señal de reloj
que sincronice el funcionamiento de todo el sistema.

Para obtener esta señal de reloj, el método más directo es emplear una señal de reloj
externa: leer la señal cuadrada generada por un circuito integrado, el cual está especialmente
diseñado para funcionar como fuente de reloj.

Por otro lado, un método alternativo muy utilizado, particularmente en microcontroladores, es


el uso de un circuito oscilador (basado en un buffer inversor) conectado a un resonador
pasivo. Este resonador pasivo puede ser una un resonador cerámico, un cristal de cuarzo o
una red RC (interna, por lo general).

(a) (b)

Resonadores pasivos: (a) resonador cerámico y (b) cristal de cuarzo.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.2.- Señal de reloj del sistema

Resonador
pasivo

Ejemplo de circuito oscilador en un microccontrolador.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.2.- Señal de reloj del sistema

Cristal conectado al circuito oscilador de un microcontrolador.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.3.- Duración de un segmento de programa

La tarjeta Arduino Mega 2560, empleada en nuestro curso, contiene un microcontrolador


ATmega2560, conectado a un cristal de cuarzo de 16MHz (frecuencia de oscilación).

Esto quiere decir que la frecuencia de reloj para nuestro microcontrolador es de 16 MHz y,
por lo tanto, un ciclo de reloj tiene una duración de 62.5 ns.

Sabemos que, en nuestro microcontrolador, un ciclo de instrucción equivale a un ciclo de


reloj, por lo que está claro que un ciclo de instrucción equivale a 62.5 ns.

Con esta nueva información puede saberse, con aceptable precisión, el ttiempo que le tomará
a nuestro microcontrolador ejecutar una instrucción.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.3.- Duración de un segmento de programa

Ejemplo 01:

Con ayuda de la hoja de epecificaciones (datasheet) del Atmega2560, calcular el tiempo que
le tomará al microcontrolador ejecutar todas las instrucciones de la sub-rutina mostrada.

DELAY: LDI R16, 200 ; 1


BUCLE: NOP ; 1 CÁLCULOS
NOP ; 1
NOP ; 1 LDI → 1 c.i.
NOP ; 1
BUCLE (2999 c.i.)
NOP ; 1
NOP ; 1 (12 + 1 + 2) x (199 veces) →2985 c.i.
NOP ; 1
NOP ; 1 (12 + 1 + 1) x (1 vez) → 14 c.i.
NOP ; 1 RET → 5 c.i.
NOP ; 1
NOP ; 1
NOP ; 1 DELAY: 3005 c.i.
DEC R16 ; 1 TIEMPO: 187.81 us
BRNE BUCLE ; 1 ó 2
RET ; 5

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

1.- CÁLCULO DE TIEMPO EN UN PROGRAMA

1.3.- Duración de un segmento de programa

Ejemplo 02:

Con ayuda de la hoja de epecificaciones (datasheet) del Atmega2560, calcular el tiempo que
le tomará al microcontrolador ejecutar todas las instrucciones de la sub-rutina mostrada.

DELAY: LDI R16, 200 ; 1 CÁLCULOS


BUCLE_1: LDI R17, 250 ; 1 LDI → 1 c.i.
BUCLE_2: NOP ; 1
NOP ; 1 BUCLE_2 (1249 c.i.)
DEC R17 ; 1 (2 + 1 + 2) x (249 veces) →1245 c.i.
BRNE BUCLE_2 ; 1 ó 2
DEC R16 ; 1 (2 + 1 + 1) x (1 vez) → 4 c.i.
BRNE BUCLE_1 ; 1 ó 2 BUCLE_1 (250599 c.i.)
RET ; 5
(1 + BUCLE_2 + 1 + 2) x (199 veces) → 249347 c.i.

(1 + BUCLE_2 + 1 + 1) x (1 vez) → 1252 c.i.

RET → 5 c.i.

DELAY: 250605 c.i.

TIEMPO: 15.66 ms

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.1.- Definición de retardo (Delay)

El término retardo (delay en Inglés) es usado para referirnos a un periodo de tiempo que una
computadora espera antes iniciar o continuar un procedimiento.

Los retardos son muy importantes en diversas aplicaciones de la vida cotidiana. Por ejemplo:
un semáforo aplica un retardo de varios segundos antes de cambiar de color; un motor
trifásico, al momento del arranque, requiere de un retardo para hacer un cambio de conexión
delta/estrella; al transmitir una señal serial, es necesario que cada bit de información se
mantenga en ‘1’ ó ‘0’ durante el tiempo correspondiente al ancho del bit.

En la práctica, los retardos en un microcontrolador son generados en base a módulos de


hardware especializados, conocidos como temporizadores. Estos temporizadores llevan a
cabo la tarea de medir el tiempo transcurrido y “avisar” a la CPU cuando se haya cumplido el
tiempo de retardo deseado.

Por otro lado, en el ámbito educativo, es muy común implementar los retardos mediante sub-
rutinas (también conocidos como retardos por software). Estas sub-rutinas (o funciones) se
encargan de “gastar tiempo” hasta que transcurra el periodo deseado.

Para implementar estos retardos con una precisión aceptable, es necesario escribir las sub-
rutinas de manera sistemática.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.1.- Definición de retardo (Delay)

Comunicación serial Secuencia en juego de luces

Control de semáforo Arranque de motor trifásico

Aplicaciones que requieren retardos.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.2.- Implementación manual de rutinas de retardo

De los ejemplos vistos anteriormente, podemos deducir que una sub-rutina de retardo está
compuesta por 02 partes: inicialización de contadores y bucles anidados

DELAY:
LDI R16, CONTA1 ; 1
BUCLE_1: LDI R17, CONTA2 ; 1
BUCLE_2: NOP ; 1
 .
 .   → El BUCLE_2 incluye “n” instrucciones NOP 
 .
NOP ; 1
DEC R17 ; 1
BRNE BUCLE_2 ; 1 ó 2
DEC R16 ; 1
BRNE BUCLE_1 ; 1 ó 2
RET ; 5

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.2.- Implementación manual de rutinas de retardo

De la descripción anterior, se concluye que lo que debe calcularse es el valor inicial de los
registros contadores CONTA1 y CONTA2. Adicionalmente, debe calcularse la cantidad n de
instrucciones NOP que se incluirán.

Analizando la sub-rutina llegamos a las siguientes ecuaciones:

Total_Ciclos = Tiempo_Retardo / Ciclo_Instrucción

Total_Ciclos = [(T1 + 4)CONTA1 + 5]

T1 = (n + 3)CONTA2 – 1

Donde:

0 < CONTA1 < 255

0 < CONTA2 < 255

0 < n < 20 (De preferencia)

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.2.- Implementación manual de rutinas de retardo

Ejemplo 03:

Emplear las ecuaciones descritas anteriormente para implementar una sub-rutina de retardo
de 500 us.

Total_Ciclos = 500 us / 0.0625 us = 8000 ciclos

8000 = (T1 + 4)CONTA1 + 5

T1 + 4 = 7995 / CONTA1

Elegir CONTA1, considerando que la división debe ser exacta:

Mediante prueba y error se elige: CONTA1 = 15

Entonces: T1 = (7995 / 15) – 4 T1 = 529

529 = (n + 3)CONTA2 – 1

N + 3 = 530 / CONTA2 (La división debe ser exacta)

Se obtiene: CONTA2 = 106 n=2

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.2.- Implementación manual de rutinas de retardo

De la solución obtenida, la implementación de la sub-rutina de retardo sería como se muestra


a continuación:

DELAY_500US:
LDI R16, 15
BUCLE_1: LDI R17, 106
BUCLE_2: NOP
NOP
DEC R17
BRNE BUCLE_2
DEC R16
BRNE BUCLE_1
RET

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.2.- Implementación manual de rutinas de retardo

Ejercicio 01:
Escribir un programa para generar una señal cuadrada de frecuencia 1 Khz, a través de uno
de los pines del PUERTO F del microcontrolador. Implementar una sub-rutina de retardo de
500us para llevar a cabo esta tarea. Medir con un osciloscopio la salida generada, para
verificar el correcto funcionamiento del programa.

Ejercicio 02:
Escribir un programa que encienda, de manera permanente, el LED conectado a PB7. Luego,
modificar el programa para transmitir una señal cuadrada de 10KHz a través de PB7.
Implementar una sub-rutina de retardo de 50us para llevar a cabo esta tarea ¿Se nota algún
cambio en la intensidad del brillo del LED?. Medir con un osciloscopio la salida generada.

Ejercicio 03:
Modificar el programa del ejercicio anterior: Implementar sub-rutinas de retardo de 20us,
40us, 60us y 80us. Luego, emular una señal PWM de frecuencia 10KHz (periodo 100us) a
través de PB7. Probar diferentes ciclos de trabajo: 20%, 40%, 60% y 80% ¿Se nota algún
cambio en la intensidad del brillo del LED? Medir con un osciloscopio la salida generada.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.3.- Generación automática de rutinas de retardo

Realizar los cálculos para la implementación de las rutinas de retardo para un


microcontrolador puede resultar engorroso. Por este motivo, algunos usuarios han optado por
crear algoritmos para automatizar el proceso de generación de las rutinas de retardo.

Gracias al trabajo de estas personas, actualmente existen diversas herramientas en línea y


aplicaciones portables que pueden generar, de forma automática, rutinas de retardo.

Considerando que, este curso busca incentivar en el alumno la solución de problemas


mediante análisis, y no mediante procedimientos matemáticos extensos, el uso de
herramientas de software para la generación automática de rutinas de retardo está
PERMITIDO.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

2.- RUTINAS DE RETARDO

2.3.- Generación automática de rutinas de retardo

Ejercicio 04:
Conectar 08 LEDs al PUERTO F del microcontrolador. Luego, escribir un programa que
cuente segundos desde 0 hasta 15 y que muestre el valor de la cuenta (en formato binario)
en los LEDs. Una vez que se hayan contado 15 segundos, el contador debe volver a 0 y
empezar la cuenta nuevamente.

Ejercicio 05:
Conectar 08 LEDs al PUERTO F. Luego, escribir un programa que encienda los LEDs, uno a
la vez, empezando por el LED en la posición 0 hasta el LED en la posición 7. Después de
haber encendido el LED en la posición 7, volver a iniciar con el LED en la posición 0. El
intervalo de tiempo entre el encendido de un LED y otro debe ser de 500ms.

Ejercicio 06:
Conectar 08 LEDs al PUERTO F. Luego, escribir un programa que haga que los LEDs en las
posiciones 0, 1, 2 y 3 parpadeen cada medio segundo, y que los LEDs en las posiciones 4, 5,
6 y 7 parpadeen cada segundo.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.1.- Comunicación serial

Comunicación paralela y comunicación serial entre un microcontrolador y un periférico externo.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.2.- Comunicación serial asíncrona

Comunicación serial síncrona.

Comunicación serial asíncrona.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.3.- El estándar RS-232

Formato de la transmisión serial en el estándar RS-232.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.3.- El estándar RS-232

Formato de la transmisión serial en un microcontrolador con niveles lógicos TTL.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.3.- El estándar RS-232

Hace 15 años:

Puerto serial Adaptador Microcontrolador


de la PC TTL-RS232

En la actualidad:

Puerto USB Adaptador Microcontrolador


de la PC USB-TTL

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.4.- Terminal o consola serial

Software de terminal serial de libre descarga.

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.5.- El código ASCII

Código estándar estadounidense para el intercambio de la información (ASCII)

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.6.- Bit-banging

100us

/* Bit de inicio */ _delay_us(100);


UART_TX_LOW(); UART_TX_HIGH();
_delay_us(100); _delay_us(100);
/* Bits del dato */ UART_TX_LOW();
UART_TX_HIGH(); _delay_us(100);
_delay_us(100); UART_TX_HIGH();
UART_TX_LOW(); _delay_us(100);
_delay_us(100); UART_TX_LOW();
UART_TX_HIGH(); _delay_us(100);
_delay_us(100); /* Bit de parada */
UART_TX_LOW(); UART_TX_HIGH();
_delay_us(100); _delay_us(100);

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

3.- APLICACIÓN: COMUNICACIÓN SERIAL

3.6.- Bit-banging

Ejercicio 07:
Escribir un programa que transmita la señal correspondiente al caracter ‘U’, en formato RS-
232 (con niveles 0V y 5V), con una tasa de transferencia de 9600 bps (bits por segundo).
Transmitir el caracter cada 10ms, mediante uno de los pines del PUERTO F y medir la salida
con un osciloscopio.

Ejercicio 08:
Modificar el programa anterior para transmitir la señal por el pin 1 del PUERTO E. Asimismo,
modificar el programa para transmitir el caracter ‘U’ cada segundo. Luego, ingresar al IDE de
Arduino y activar la terminal serial (no olvide configurar la tasa de transferencia a 9600 bps).
Verifique que la computadora recibe el caracter ‘U’ cada segundo.

Ejercicio 09:
Escribir un programa que almacene un caracter cualquiera en la memoria SRAM, y que llame
a una sub-rutina TX_BYTE que permita transmitir este caracter en formato RS-232. Transmitir
el caracter cada segundo. Verificar su funcionamiento en la terminal serial.

NOTA: Antes de utilizar el pin PE1 como salida, asegúrese de almacenar (con STS) el valor 0
en el registro UCSR0B al inicio del código (el Arduino Mega 2560 requiere hacer esto).

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro


Arquitectura de Computadoras

4.- PREGUNTAS

Semana 07 – Retardo generado por software Miguel A. Torres Lázaro

Vous aimerez peut-être aussi