Estoy trabajando en un arduino personalizado que funcionará a 3.3 V sin reguladores ni chips USB (para consumo de energía). Escuché que overclocking del chip a 16 MHz / 3.3 V generalmente está bien, pero de todos modos me gustaría estar dentro de las especificaciones.
Primero: para ejecutar a 8 MHz, ¿solo necesito reemplazar el cristal? ¿O hay algo más que deba hacer?
Segundo: ¿Necesito hacer algún cambio en el código para reflejar la nueva velocidad? Estoy usando conexiones serie, SPI e I2C en este proyecto, junto con el sistema operativo NilRTOS y las funciones millis / delay. ¿Alguno de estos se romperá? ¿El código se ejecutará notablemente más lento?
Tercero: ¿Cómo puedo programar el chip? ¿Está bien programarlo en un Arduino Uno a 16 MHz y luego trasplantarlo al arduino personalizado?
Cuarto: ¿cambiará el consumo de energía a 8 MHz?
¡Gracias!
Respuestas:
La fórmula parece ser volt * 5.9-6.6 = mhz (válido entre 1.8v y 4.5v), por lo que a 3.3v, esto daría 12.8mhz. Tenga en cuenta que, si está ejecutando a 12.8mhz, CUALQUIER caída por debajo de 3.3v PUEDE causar problemas (¡y muy difícil de diagnosticar también!) O PUEDE salirse con la suya.
Sin embargo, los chips Arduino Atmega328p tienen una detección de "caída de voltaje" establecida en 4.3v; cualquier caída por debajo de eso, el chip se apaga. Puede obtener un ISP (AKA ICSP) para cambiar los fusibles; vaya a http://www.engbedded.com/fusecalc/ para averiguar en qué configurar los fusibles. También puede usar el ISP para leer los fusibles actuales, o reprogramar el chip sin una placa Arduino: todos mis proyectos tienen un encabezado de 6 pines. Si hace esto, antes de reprogramar usando la placa Arduino, tendrá que "Grabar Bootloader" (en el menú de herramientas). Tenga en cuenta que la programación aún se puede hacer a través de Arduino IDE.
Alternativamente, si desea ir "ligero" (y tener un ISP), puede cambiar los fusibles para usar el reloj interno de 8 mhz, ¡esto también libera 2 pines adicionales! Sin embargo, tenga en cuenta que el reloj interno puede derivar 1.2 horas por día (= 5%), en comparación con 1.7 segundos por día (= 20 partes por millón) en un cristal de cuarzo típico. Si no lo usa para medir el tiempo, esto probablemente no importe.
Tendrá que hacer cambios en el tiempo, para su código, debe agregar un tablero. Texto con la configuración correcta para su chip / velocidad de reloj, etc. - puede copiar la configuración de la entrada para el tablero, cambiar el nombre y cambiar la configuración "build.f_cpu"; reinicie (o inicie) su IDE Arduino, vaya a "Herramientas-> Tablero" y seleccione el tablero que agregó.
Puede mover el chip dentro / fuera del tablero y reprogramarlo allí (tenga en cuenta que el tablero seleccionado en Herramientas-> Tablero es el tablero FINAL, no el tablero de programación). Tenga cuidado al enchufarlo / desenchufarlo; eventualmente, ¡doblará los pines! Alternativamente, puede usar ISP (ICSP), como se mencionó anteriormente, muy recomendable. La programación del ISP también funcionará si el chip es el predeterminado de fábrica, siempre que tenga un reloj que funcione.
La cantidad de energía que utiliza el chip depende en gran medida de lo que haga con él, no solo las velocidades del reloj, la fuente del reloj, etc., sino también los modos de suspensión. Si está durmiendo mucho, puede consumir menos cuando corre más rápido que correr más lento, si casi todo su tiempo está dormido, entonces el consumo de energía debe contarse por ciclo de reloj, no por segundo, si su reloj es la mitad de la velocidad, y media corriente, luego dibuja la misma corriente por instrucción. Como el resto del tiempo lo pasas dormido, no obtienes ningún beneficio. Consulte http://www.gammon.com.au/power para obtener un desglose muy bueno del uso de energía, consejos sobre cómo ahorrar energía, etc.
Si ralentiza demasiado su reloj, el serial e i2c pueden volverse poco confiables (a menos que disminuya la velocidad), pero esperaría poder bajar a 1 mhz antes de que esto sea un problema: un chip de 1 mhz que intenta hacer 9600 bps tiene 104 instrucciones por bit de datos transferidos. i2c se ejecuta a 100khz, por lo que obtienes 10 instrucciones por bit (a 1mhz), posiblemente empujándolo. 8mhz debería estar bien. Prueba, prueba, prueba.
ACTUALIZACIÓN: Hay 3 configuraciones posibles para la detección de oscurecimiento: hay 3 valores posibles para AtMega328p: deshabilitado, 1.8v, 2.7v y 4.3v. Tenía la impresión (arriba) de que los Arduinos normalmente estaban configurados en 4.3v; aparentemente ese no es el caso (ver comentario más abajo). Recuerdo haber visto en alguna parte que hubo detección de apagones. Esto es algo a tener en cuenta, si su arduino se reinicia, especialmente al colocar cargas más grandes en la batería (motores en funcionamiento, leds múltiples, etc.)
fuente
No, ejecute en el oscilador interno como lo sugiere AMADANON Inc.
Alternativamente, configure el fusible "dividir el reloj por 8" (que lo haría funcionar a 2 MHz desde un cristal de 16 MHz) y luego, en el código, cambie la división de nuevo a 2. es decir.
O para programar en otro Uno, deje el fusible solo, programe a 16 MHz y luego deje caer el reloj en el chip de destino, con la esperanza de que funcione lo suficiente a 3.3V para ejecutar esa primera instrucción. Lo más seguro sería instalar un cristal o resonador de 8 MHz en la placa de destino. Sin embargo, si el tiempo no es crítico, ejecute con el oscilador interno.
Si le dice al IDE que tiene un procesador de 8 MHz (por ejemplo, un Lilypad), entonces debe ajustar los retrasos, los cálculos de velocidad de transmisión, etc.
I2C y SPI son automáticos. Se pueden ejecutar a una variedad de tasas. Dudo que haya algún problema con ellos. En cuanto a la serie, siempre que los cálculos se realicen correctamente, todavía debería estar disponible una amplia gama de velocidades de transmisión.
Bueno, sí, funcionará a media velocidad en comparación con 16 MHz.
Usted puede hacer eso. O puede conectar un encabezado ICSP o un encabezado FTDI y programarlo in situ.
Ejemplos aquí: http://www.gammon.com.au/breadboard
Sí, se reduce un poco.
Puede reducirlo considerablemente más utilizando otras técnicas como se describe en http://www.gammon.com.au/power , y AMADANON Inc.
fuente