Formas de configurar y mantener la configuración en hardware basado en Arduino

3

Actualmente estoy construyendo un juego LaserTag basado en Arduino. Después de resolver muchos desafíos técnicos, ahora estoy en el punto de programar y configurar mi primer prototipo.

Próximos desafíos :

  • Los "Etiquetadores" deben ser personalizables para las necesidades de los jugadores (daños, balas en mag ..)
  • Las reglas deben ser personalizables antes de cada juego
  • El Jugador no debería poder restablecer la salud y la munición simplemente reiniciando el Etiquetador

Ideas :

  1. Mi primera idea fue usar la EEPROM de los arduinos, pero leí que solo sobreviviría alrededor de 100 mil ciclos de escritura / eliminación. Lo cual no es mucho cuando le escribo después de cada disparo.

  2. Mi segunda idea fue utilizar una I2C EEPROM externa para conservar la configuración y los datos actuales del juego. Al menos no rompería mis arduinos cuando llego al punto en que se rompe. También puedo guardar muchos más datos en él.

  3. Otra idea es personalizar el firmware para cada jugador (ya tengo una herramienta para compilar y actualizar el firmware para el etiquetador) y también definir las reglas de juego más comunes en el firmware y simplemente activarlo a través de una conexión en serie . Pero, de nuevo, ¿cómo puedo conservar los datos actuales del etiquetador como salud y munición?

Preguntas :

  • ¿Existen prácticas recomendadas?
  • ¿Hay alguna técnica que no conozca?
  • ¿Qué pasa con las tarjetas SD? Parecen un poco abrumados para mi uso.
pregunta Julian Hollmann

5 respuestas

3

Es posible que desee ver la "nivelación de desgaste EEPROM". Si tuviera un contador de 32 bits (4 bytes) y 1024 bytes de EEPROM, en teoría, podría extender el tiempo de vida de la EEPROM en un factor de 1024/4 = 256, lo que da más de 25M de ciclos de escritura. Incluso si solo usas el 50% de la EEPROM para el contador, serían unos 12 millones de "tiros".

Vea, por ejemplo, Use nivelación en la EEPROM de un microcontrolador o < a href="https://stackoverflow.com/questions/10667491/is-there-a-general-algorithm-for-microcontroller-eeprom-wear-leveling"> enlace . Creo que también hay bibliotecas de soporte por ahí.

Es probable que una tarjeta SD sea excesiva, pero debería funcionar bien. Los mismos principios se aplican a la memoria flash (SD) que a las EEPROMS. Flash también tiene ciclos de escritura limitados, pero los controladores integrales de las tarjetas SD realizan automáticamente la nivelación del desgaste para que no tenga que lidiar con eso. Si tiene una tarjeta de 1 GB y escribe 1 MB de datos nuevos por juego, lo ideal sería que el controlador se hubiera ocupado de que, después de 1000 juegos, cada sector de la tarjeta solo se haya escrito una vez. Suponiendo que solo 10 000 ciclos de escritura garantizados por sector, eso debería dar unos 10 millones de juegos garantizados.

    
respondido por el JimmyB
3

FRAM combina los puntos fuertes de SRAM y EEPROM. No es barato, pero cada chip durará efectivamente la vida útil del equipo. Viene en formularios habilitados para SPI y, por lo tanto, debería ser muy fácil de integrar con un Arduino.

    
respondido por el Ignacio Vazquez-Abrams
2

Sí, EEPROM tiene una vida de escritura limitada. Una técnica es mantener un búfer en la memoria RAM, en el que se escribe. Luego, cada cierto tiempo, ese búfer se escribe en la EEPROM. O está escrito en respuesta a un evento. En algunos casos, se escribe como una respuesta a una interrupción que se genera en el apagado. Por supuesto, necesitaría alguna forma de generar esa interrupción y mantener el chip real encendido el tiempo suficiente para escribir la EEPROM.

Otra forma es extender las escrituras en toda la EEPROM. Verifique la hoja de datos, pero en algunos casos la vida máxima de escritura es por byte. Por lo tanto, si puede encontrar una manera de ubicar los datos actuales en cualquier lugar de la EEPROM, puede seguir moviéndolos para nivelar el desgaste.

    
respondido por el John Honniball
2

Una cosa que podría hacer es colocar un capacitor grande a través de VCC y tierra, luego verificar continuamente para asegurarse de que el voltaje de entrada sea de 5 voltios (o lo que sea que esté usando). Si cae por debajo de algún nivel, podría suponer que se cortó la alimentación, y puede escribir datos en eeprom en los pocos ms antes de que se agote el condensador (las escrituras en eeprom toman 3.3 ms). De acuerdo con esto , el voltaje de suministro puede caer a 3.8 voltios antes de que la velocidad de reloj de 16 mhz se convierta en un problema, por lo que debería darle una buena cantidad de tiempo para volcar datos.

Sé que este no es el tipo de solución que está buscando, pero podría funcionar bien ya que no tendrá que escribir a eeprom cada vez que se dispare un tiro.

    
respondido por el daweim0
1

Ciertamente hay muchas maneras en las que uno podría mantener los valores de conteo almacenados en la EEPROM; si nunca disparas más de 1000 tiros en un solo juego, podrías tener un área de 1 KB de EEPROM que cuenta los tiros para el juego actual; en cada disparo, restablece un byte FF a 00. Al inicio, contar los bytes no FF indicaría cuántos disparos se han disparado.

Dicho esto, realmente no veo la necesidad de eso en esta aplicación. Si un jugador pudiera reiniciar su tagger cuando quisiera, el jugador simplemente podría mantener su tagger en reinicio, excepto cuando podría sacar a un oponente de una posición de seguridad. En vez de eso, sugiero que los etiquetadores sean lo suficientemente sólidos como para que nunca se reinicien, excepto como consecuencia de una acción deliberada del jugador, y que el etiquetador que se reinicie a mitad del juego esté fuera de servicio y presente un patrón de luz distintivo hasta el momento en que sea un juego. oficial lo restaura a la operación.

Además, aunque los juegos de etiquetado diferentes utilizan diferentes enfoques de comunicación, sugeriría que los módulos inalámbricos son lo suficientemente baratos para que sea posible que los etiquetadores intercambien información en tiempo real sobre lo que está sucediendo; incluso si la pistola del jugador se reinicia, como máximo se omitirán algunos disparos de sus informes.

    
respondido por el supercat

Lea otras preguntas en las etiquetas