Comsulta ejercicio 2 examen Feb. 2012

Comsulta ejercicio 2 examen Feb. 2012

de Agustin Castellano Fernandez -
Número de respuestas: 2

Buenas,

Tengo una duda con respecto a este ejercicio, que en principio fue hecho con el bloque CTC pero que Julio recomendó como aplicación de bloques timer y counter.

Puede ser  que solo sea necesario un timer (y no un counter) interrumpiendo al micro con prioridad 2, cada un cierto tiempo (a determinar segun la duracion de la vuelta anterior)?

Mi idea seria cargar en el timer el tiempo de cada sector, con unprescaler fijo en 256 (y una constante a decrementar a ajustar), y actualizar por software en una variable (por ejemplo CUENTA), en cada interrupcion del timer, la cantidad de "sectores temporales" a los que ha llegado la rueda. Por ende, si viene una interrupción del sensor, y CUENTA>16, quiere decir que la rueda esta yendo mas lento que en la vuelta anterior. Y si CUENTA<16, la rueda esta yendo mas rapido que en la vuelta anterior. El tiempo de cada sector para la vuelta siguiente, puedo estimarlo mediante la fórmula:

T_Sector(n)={CUENTA*T_sector(n-1)+cuenta_actual_del_timer}/16

De esta forma, se considera que la rueda anda demasiado lento sii T_Sector es mayor a 65536/16=4096=256*16, lo que implica tener una constante a decrementar de valor 16.

Es correcta esta idea?

Gracias.

 

En respuesta a Agustin Castellano Fernandez

Re: Comsulta ejercicio 2 examen Feb. 2012

de Julio Perez -

El planteo original usaba un counter y dos timers, usando 3 canales del CTC

El counter se inicializaba en 1 y se usaba para interrumpir cada vez que la rueda pasa frente al sensor de posición. Con nuestro controlador de interrupciones esto no hace falta, se conecta el sensor directamente al controlador de interrupciones.

Un timer se usa para medir el tiempo correspondiente a cada sector. El equivalente con nuestros es usar un controlador de interrupciones y un bloque timer. El tiempo en que expira este timer debe ser 1/16 del tiempo de vuelta anterior. Esto puede hacerse dividiendo por 16 el valor inicial o multiplicando por 16 el valor delprescaler.

El otro timer se utiliza para medir el tiempo de vuelta, que se utiliza para configurar el timer anterior al comienzo de la siguiente vuelta. Este timer es el que podría suprimirse y calcular el tiempo de vuelta como sugieren ustedes, sumando la cantidad de sectores que pasaron y sumando además la cuenta parcial del último sector. Hay que hacer las cuentas para ajustar el tiempo de timeout que se pedía para el caso en que el disco gira demasiado lento. La ventaja de resolverlo como proponen ustesdes es que se usa menos hardware, la desventaja es que el software queda más complejo. Esta situación de "trade-off" entre la complejidad del hardware y el software se da muy a menudo.

julio