Paso 2: Restricciones de la plataforma
El Arduino Uno (ATMega328P o no "P") y su inherente limitación
Arduino es divertidos, pero son nativamente simples en cuanto a poder computacional. Su equipo es más probable es que un equipo de 64 bits, lo que significa que usted puede realizar operaciones aritméticas sobre números binarios 64 pedacitos largos. La ONU tiene sólo 8 bits que es un octavo del ancho de banda además de un espacio de mayor frecuencia (~ 2Ghz a 16mhz) y corazones y bla bla bla...
Significado, que utilizando un Uno es computacionalmente en una situación de desventaja. Manipulación de Puerto simple de LEDs y pequeños motores son lo suficientemente buenos para ese propósito, pero algoritmos que crunch un montón de números manteniendo el tiempo correcto es bastante difícil conseguir suficiente velocidad y precisión.
Mucho el bajo consideración son límites específicos para el Arduino Uno y yo los estoy analizando como un ejercicio de principios de ingeniería. Como futuro ingeniero (aún estoy en Colegio, yahoo), tuve que analizar todos los aspectos del problema. Para mis propósitos, ya había entendido que 8 bits no es suficiente así que compré un Arduino debido por lo que yo puedo permanecer dentro de la precisión de 32 bits nativo de un tipo de datos entero (en el correo en el camino). Utilizando una herramienta matemática como Matlab, podido hacer esa determinación antes de incluso codificadas en el Arduino Uno. Puede ver imágenes de las pruebas que hice en algunas formas de onda en el siguiente paso. Pero, continué en el enfoque de 8 bits sólo para *** y se ríe.
Límite de 8 bits
Contando de 0 a 255 de la chupa. Sobre todo cuando haces un operador matemático que debe permanecer dentro de ese límite. Tan su precisión real para ese tipo de operación realmente cae desde 8 bits a 7 bits para agregar y permanecer dentro de esa ventana de números binarios.
Si no es evidente para usted, la razón es desbordamiento. Desbordamiento se produce en un dispositivo electrónico cuando intenta hacer una operación matemática que va fuera de los límites de los límites. Así, por ejemplo, restar -128 de 128 le da (128 + 128) = 256. Boom... algoritmo matemático roto.
Tipos de datos cifrada por encima de 8 Bits
Sumar dos números de 8 bits tarda un ciclo de instrucción nativo, agregando un entero de 16 bits será tomado no menos de tres ciclos de instrucción. Esto puede no sonar a mucho ya que un ciclo es el inverso de la frecuencia del cristal (16Mhz ^ -1) que trata de 63ns. Aquí en el problema con la multiplicación de los ciclos de instrucción por 3; Como mínimo, cuando tienes que hacer 400 sustracciones, 400 adiciones (en un tipo de datos más grande hasta 800 ciclos de instrucción), entonces una división (que tiene 200 + ciclos de instrucción) que es una iteración de aproximadamente 200 iteraciones más... su velocidad de reloj relativamente lento llega a ser muy evidente para usted.
ADC de 10 bits de precisión
El ADC en un Uno tiene una precisión de 10 bits, pero basado en la restricción anterior de 7 u 8 bits, sabes que no se puede utilizar todo; Sólo será una pérdida de poder computacional a utilizar todo el ancho. También, usando analogRead() es sólo un gasto derrochador de tiempo. Mire en la manipulación directa del puerto!