para implementar lo que describe curopatula, necesitas hacer un encoder, que no es mas que una rueda con un agujero o varios, de acuerdo a la resolución que quieras tener, la velocidad a la que quieras que se actualice el sistema y la velocidad maxima a la que gire el mismo.
Ejemplo (pon tus numeros aqui), un motor que gira a maximo 3600 RPM, tiene que actualizar el display cada .5 segundos y tiene que tener una resolucion de 1/2 RPM:
primero, vemos que tanta resolución se necesita:
velocidad maxima 3600 rpm/60seg/minuto= 60 rev por segundo, de ahi 30 rev cada 1/2 segundo, a esta velocidad 1/2 RPM se vuelven 1/240avo de revolucion, tu encoder necesita tener una resolución de 240 marcas por vuelta.
Segundo, ya tenemos nuestra rueda y sensor optico, ahora viene lo "fácil", ponemos el micro a monitorear la rueda un tiempo determinado, por ejemplo, contar el tiempo que necesitas para medir cien marcas, esto te da un valor en microsegundos, por ejemplo (regresando a nuestro ejemplo, a maxima velocidad te da 7000 microsegundos aprox (1/60avo de segundo para dar una vuelta, entre 240 vueltas por marca, por cien marcas), luego, lo comparas con una tabla que puedes calcular.
ejemplo de la tabla:
tiempo microsegundos RPM
7000 3600
8000 3125
etcetera
la otra opcion es medir la frecuencia del sistema (el intervalo entre marca y marca), pero la historia es mas o menos la misma, tienes un tiempo determinado entre marca y marca (en nuestro ejemplo 69 microsegundos), si mides un intervalo de un milisegundo por ejemplo serian 14.4 marcas a maxima velocidad, y tienes que hacer tu tabla con base en estos tiempos (tu limite es la velocidad del micro, tienes que tomar un tiempo suficiente para que puedas detectar la diferencia que necesites,