Acabo de terminar un proyecto similar para un amigo, compró un carrito de golf y quería instalar un SpeedOMeter en él. Era simple Le pido que produzca un disco que se adjuntaría a uno de los neumáticos delanteros, imanes incrustados en el disco, un sensor magnético (eBay). El sensor cambia su salida lógica cada vez que un imán se acerca a su cabeza. Midió la circunferencia del neumático y me dio un parque de pelota de 52.8 pulgadas, lo que significa que una revolución por segundo significa 3 mph. En base a eso, le pedí que instalara 15 imanes pequeños en el disco, si capturo pulsos del sensor durante 200 ms, me dará 3 conteos, por lo tanto, a 3 mph. Fue fácil. Pero podría requerir calibración, sus medidas podrían estar equivocadas, el neumático en movimiento podría tener una circunferencia diferente, etc. No es gran cosa. Estaría satisfecho con dos pantallas LED azules de 7 segmentos (1.5 "de altura) para indicar la velocidad. Elijo un AtMega88 simple (en el cajón). El AtMega podría manejar la pantalla directamente, sin necesidad de transistores, si la corriente no está Lo bueno es que la gran pantalla azul usa dos LED en serie debajo de cada segmento, lo que tendría un doble brillo con la misma corriente de un solo LED. Pero hubo un retén, dos LED azules requerirían más de 5 V, requieren 6.3V para tener un buen brillo diurno. Compró los 7 segmentos en la versión de Common Cathode, lo que fue complicado. El AtMega no puede funcionar con 6.3V, por lo que necesitábamos crear una base virtual en + 1.3Vdc para el AtMega, mientras que La tierra de la pantalla será el cero real Volts. La solución fue simple, alimentando el AtMega con 6.3V, pero su ZeroV se conectaría a tierra real a través de dos diodos de silicio simples 1N914 o 1N4148. El AtMega tendría + 5V o menos entre VCC y Los pines de GND y la pantalla se manejarán con 6.3 V dir. Desde los pines del puerto de E / S de AtMega. Funcionó muy bien. Ahora, reloj fusible para usar oscilador interno de 8MHz. Conectó el sensor de pulso directamente al pin T1 (PD5), programó el contador para que cuente cuando el pin T1 sube, constantemente. Programado Counter1 (16 bits) para contar desde un valor específico, e interrumpe cuando el contador llega a cero, me dio una interrupción cada 200 ms. En la rutina de interrupción, simplemente lea el contador T1 y ponga a cero. Almacene el valor de lectura en 4 registros y empújelos hacia adelante, para mantener solo las últimas 4 lecturas en esos registros. Luego, agréguelos todos y divídalos por cuatro, lo que se hace con un simple cambio lógico dos veces. Al hacer esto, redujo la inestabilidad entre 3 y 4 valores en la pantalla, por ejemplo. Use una tabla simple de segmentos para iluminar en cada una de las pantallas dobles, de -0 a 29 y voilá, solo busque la tabla desde el valor del valor promedio y vuélvala a los pines del puerto que controlan la pantalla de 7 segmentos. Trabajado como un encanto. Ah, el carrito de golf funciona a una velocidad máxima de 20 mph, esta es la razón por la que la mesa sube hasta 29 solamente. La calibración se hizo fácilmente. Un simple puente hace que el AVR deshabilite la interrupción de 200 ms, cuente los impulsos del pin T1, comenzando desde cero, mientras conduce el carro por exactamente, exactamente 22 pies, lo que es 264 pulgadas. Si la llanta tiene una circunferencia de 52.8 ", girará exactamente 5 revoluciones, exactamente 75 pulsos en el sensor. Ahora viene matemática. El contador 1 se desborda a cada 200 ms cuando se carga con cierto valor, que es la división de 8MHz con 256 prescaler. ¿Qué es exactamente el número 31250? ¿Qué hago ahora? multiplique 31250 por 75 (es decir, una constante fija de 2343750 = 0x23C346) y divida por los pulsos reales contados durante el movimiento de 22 pies. No estoy dispuesto a crear un caos completo de división de 24 bits , Simplemente resté el valor del contador de pulsos del 0x23C346 las veces suficientes para llegar a cero, esto no es una carrera de velocidad de cálculo, funcionó. Badabim. Tendré el nuevo valor para cargar en el desbordamiento del contador 1 y tendré una cantidad de tiempo diferente 200 ms o más, ese desbordamiento del contador 1 me interrumpe para leer el valor de los conteos de pulsos T1 durante ese tiempo. Fácil. Ahora, todo lo que el usuario debe hacer para calibrar es insertar un puente, correr los 22 pies y quitar el puente. El puente, el cálculo es hacer. ne y el nuevo valor de counter1 se almacena en eeprom. Ahora, cada vez que enciende la unidad, lee el eeprom para el valor de los desbordamientos del contador 1, y está listo para funcionar. Fácil, menos de 100 bytes de programación en ensamblaje. Me encanta este idioma. Le gustó la idea de usar un AVR, ya que al principio quería hacerlo utilizando contadores y temporizadores simples en lógica TTL pura. Ahora quiere que actualice el AVR para hacer el control de las luces intermitentes y los temporizadores, y así sucesivamente.