Você está na página 1de 3

RETARDOS POR SOFTWARE EN LOS MICROCONTROLADORES PIC. La vez pasada, se habl un poco sobre los retardos por software.

Ahora vamos a ver esto de la lgica de los retardos un poco ms a fondo para poder crear nuestras propias subrutinas. Como ya se dijo el pic 16F84A puede usar un oscilador externo de 4MHz, entonces la frecuencia interna de trabajo ser esta frecuencia externa dividida entre 4, o sea 4MHz/4= 1Mhz, si utilizamos este oscilador tenemos que todas las instrucciones se ejecutan a 1uS, internamente la frecuencia es de 1Mhz, exceptuando los saltos que tardan 2 ciclos, es decir 2uS. Tomando en cuenta eso vamos a generar nuestros retardos, pero siempre partiendo de la suposicin de que se est trabajando a una frecuencia de 4MHz, si es as, crear rutinas de retardo para nuestro pic es muy sencillo. F = 1 Mhz 1/F = 1/(1Mhz) = 1/(106hz) = T = 10-6seg = 1useg Tren de pulsos PERODO 0 1 0 1 0 1 0 1 T=1USEG T=1USEG T=1USEG T=1USEG

Vamos a utilizar este FORMATO de CONTADOR para implementar nuestro primer retardo usando un solo CONTADOR.

Supongamos que tenemos la siguiente rutina: CONTINUAR BSF PORTB,5; RB5 <-- 1 CALL RETARDO; salto a subrutina RETARDO BCF PORTB,5; RB5 <-- 0 CALL RETARDO; salto a subrutina RETARDO GOTO CONTINUAR
Como pueden observar se trata de encender y apagar un LED, conectado al PORTB, como se ve en el esquema, pero manteniendo su estado un breve perodo de tiempo dado por la rutina del

PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 RETARDO
MOVLW MOVWF CICLO DECFSZ

retardo.

0X09; 9 es el valor que inicializa el contador CONT; se guarda en CONT0C de memoria CONT,F; decrementa el contenido de F (CONT) = 09 ; hasta CERO, y cuando llega a 0 realiza un ; salto a la subsiguiente instruccin, esto ; quiere decir que si todava no se lleg a ; CERO, debe continuar decrementando, por ; eso se realiza la siguiente instruccin:

ETIQUETA

ADDRESS direccin

MEMORIA De Datos

CONT

0C

GOTO CICLO RETURN El esquema de memoria, a la derecha, les recuerda como se deben guardar los datos en ella.
ING. Luis Pacheco Cribillero

CONT2

0F

Volviendo al formato inicial de RETARDOS, a la derecha de cada instruccin aparece el nmero de ciclos que tomar cada una. Las primeras dos toman solamente 1 ciclo, la tercera decfsz toma (N-1)+2, porque decrementar N-1 veces la variable N y en el ltimo decremento har un salto, es por eso el +2. La instruccin goto se ejecuta en 2 ciclos y se ejecutar N-1 veces, es por eso que se toma como 2*(N-1). De esta forma tenemos que el nmero de ciclos, y por lo tanto el tiempo que tendremos de retardo est dado por la siguiente expresin: 1+1+(1)(N-1)+2+(2)(N-1) , 4+N-1+2N-2, o lo que es lo mismo 3N+1. Si queremos un retardo de 100uS entonces tenemos que 3N+1=100, despejando tenemos N=(100-1)/3=33, asi que para tener un retardo de 100uS el valor de la variable N debe ser 33. Ahora veamos esta rutina: Podemos darnos cuenta que ahora nuestra rutina original (desde CICLO2 hasta goto CICLO) est afectada por la variable M, as que es como si M multiplicara a nuestro retardo. Para saber el nuevo valor del retardo de nuevo sumamos todos los ciclos, tomando en cuenta que M multiplica al retardo original de modo que la expresin ahora queda de la siguiente manera: [3N+1]M+1+1+(1)(M-1)+2+(2)(M-1), o lo que es lo mismo [3N+1]M+3M+1, de manera que tenemos dos retardos anidados. Para saber cunto sera el retardo total primero calculamos el retardo bsico, si queremos que ese retardo sea de 100uS entonces N=33, si ahora queremos que el retardo total sea de 10mS entonces necesitamos completar 10000 ciclos, as que igualamos nuestra expresin a ese nmero: [(3*33)+1]M+3M+1=10000, despejando tenemos M=(9999)/103, esto es aproximadamente igual a 97, as que para un retardo de 10mS nuestra variable N debe valer 33 y la variable M debe tener un valor de 97. As podemos seguir anidando retardos. Para obtener un retardo de 1 segundo utilizaremos la siguiente rutina: Aqu vemos que la variable P afecta a los dos retardos que ya habamos definido de modo que la expresin para calcular el nuevo retardo total seria: [(3N+1)M + 3M+1]P +1 + 1 + (1)(P-1)+2 + (2)(P-1), y reduciendo trminos la expresin seria: [(3N+1)M +3M+1]P + 3P + 1. Queremos un retardo de 1 segundo, esto son 1000000 ciclos, por lo que nuestra expresin del retardo debe ser igual a un milln: [(3N+1)M+3M+1 ]P+3P+1=1000000.
ING. Luis Pacheco Cribillero

Sustituyendo N y M tenemos 9995P+1=1000000, entonces tenemos que P=(999999)/9995 y P entonces es aproximadamente igual a 100. Esta no es la forma ms precisa de realizar retardos, utilizando los valores para las variables N, M y P que calculamos tenemos que al final del retardo solamente se realizaron 999501 ciclos, en tiempo esto es aproximadamente igual a 0.99 segundos pero no el segundo completo, sin embargo para aplicaciones que no necesitan una gran precisin este mtodo funciona, y funciona muy bien! VERIFIQUE CON EL MPLAB Y EL PROTEUS, LA RUTINA PARA ENCENDER Y APAGAR UN LED USANDO EL PIC 16F628A

ESCRIBA EL PROGRAMA QUE CONTROLE EL MOTOR M1, GIRANDO UN TIEMPO EN UN SENTIDO Y OTRO TIEMPO EN EL OTRO SENTIDO: MPLAB, PROTEUS, Y DETERMINE UD SUS TIEMPOS A PARTIR DE LO MOSTRADO EN EL DOCUMENTO!.....OK? ING. Luis Pacheco Cribillero

Você também pode gostar