Retardos1 Por Software en Los Microcontroladores Pic
Transcript of Retardos1 Por Software en Los Microcontroladores Pic
-
UNIVERSIDAD RICARDO PALMA ESCUELA DE INGENIERA MECATRNICA MICROPROCESADORES Y MICROCONTROLADORES
ING. Luis Pacheco Cribillero
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
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
-
UNIVERSIDAD RICARDO PALMA ESCUELA DE INGENIERA MECATRNICA MICROPROCESADORES Y MICROCONTROLADORES
ING. Luis Pacheco Cribillero
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.
-
UNIVERSIDAD RICARDO PALMA ESCUELA DE INGENIERA MECATRNICA MICROPROCESADORES Y MICROCONTROLADORES
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?