Supongamos que está iniciando un proyecto integrado con alguna funcionalidad conocida. Cuando selecciona un microcontrolador, ¿cómo selecciona la cantidad de RAM que necesita?
¿Usa una placa de desarrollador y codifica su proyecto primero y luego ve cuánta memoria ha usado y luego selecciona un microcontrolador apropiado que se ajuste a esa memoria?
¿Simplemente elige un microcontrolador robusto para un prototipo y luego lo reduce una vez que tiene un producto que funciona?
¿Simplemente elige algo que está seguro de que será suficiente y si se queda sin espacio, simplemente actualice a uno de mayor densidad de memoria, de lo contrario, simplemente conserva el microcontrolador existente?
¿Qué se considera una buena práctica?
Personalmente, para proyectos de pasatiempos, tiendo a usar el microcontrolador más potente de la familia con el tamaño adecuado. Luego desarrollo la PCB, escribo algo de código y produzco un prototipo.
Esto tiene la ventaja de que conozco bastante bien la pequeña cantidad de microcontroladores, por lo que puedo crear prototipos rápidamente sin tener que leer una hoja de datos completa. También tengo tableros de trabajo y plantillas de código para ellos.
Si funciona y estoy haciendo más de un puñado, entonces compro el microcontrolador más barato que tiene los periféricos correctos y suficiente memoria para lo que codifiqué anteriormente. Esto puede ser molesto si los registros internos cambian (sucede en el PIC) o si alguno de los microcontroladores tiene periféricos adicionales que deben desactivarse para que el código funcione.
Sin embargo, para fines de producción, esto le permitiría reducir una buena cantidad de cada unidad.
Por supuesto, para un solo prototipo casero puede ser una buena recomendación comenzar con el más potente de todos los micros compatibles y luego ir escalando.
Sin embargo, si desea ganar una cotización, debe decirle a su cliente un precio antes de tener el dinero para implementar cualquier cosa.
Por lo tanto, una buena práctica es escribir algún tipo de especificación antes de empezar a programar. Usted sabe lo que quiere hacer y debe escribir cómo lo va a hacer.
Este "cómo" también incluye pensar en un diseño de software, respondiendo preguntas como:
Resumir todos esos valores le da una estimación aproximada. Hasta qué punto puede confiar en eso depende de qué tan detallado sea su análisis, y depende de su experiencia :-)
Agregar un margen de al menos 30..50% de su estimación es sin duda una buena idea.
Una vez que su producto esté terminado y tenga alrededor de 80 a 90% de RAM en uso, puede estar bastante seguro de que su selección fue correcta, al menos con respecto a la RAM.
Si tan solo fuera posible codificar su sistema embebido primero y luego construir el hardware. Eso facilitaría la vida de todos. Desafortunadamente, eso también significa que sus plazos están fuera de la ventana. Por lo general, el hardware debe diseñarse mucho antes de que se termine el software porque las piezas de hardware suelen tener largos plazos de entrega.
Por lo tanto, los desarrolladores de sw embebidos generalmente necesitarán estimar las necesidades de CPU y memoria de su programa. Su primer paso debe ser tratar de convencer a los chicos de hardware para que le proporcionen el microcontrolador/CPU más potente con la mayor cantidad de RAM posible. Eso rara vez funciona porque tienen requisitos y objetivos propios, pero de vez en cuando tienes suerte.
Si eso no funciona, entonces lo siguiente que haría es un diseño de software de alto nivel y dividir los módulos en funcionalidad. Luego estimaría líneas de código para cada función para cada módulo en el sistema. A continuación, puede utilizar una fórmula para convertir líneas de código en una estimación aproximada de la memoria de código. También investigaría cualquier requisito de memoria inusual (como arreglos grandes) y agregaría una estimación para acomodarlo. Luego agregue un porcentaje sobre ese total para cubrir todo lo que se haya perdido. Luego duplíquelo para cumplir con el requisito típico de utilización del 50 %.
Sí, lleva tiempo. Sí, es necesario pasar por todos los aros porque cambiar el hardware es muy difícil después de construirlo.
Generalmente, los proveedores de microcontroladores colocan un rango de memoria en sus dispositivos que es adecuado para aplicaciones típicas. Por lo tanto, si solo necesita unos pocos pines de E/S y un SPI en un dispositivo de tamaño reducido, es poco probable que encuentre algo que venga con 500 kBytes de Flash y 64 kBytes de RAM. Con dispositivos más grandes, que están más cerca de los paquetes SoC, incluso el más pequeño es casi seguro lo suficientemente grande a menos que esté planeando hacer algunos cálculos numéricos serios, como el procesamiento de imágenes.
En un entorno profesional, la clave para elegir el microcontrolador adecuado es utilizar datos históricos. Tendrá un registro de los otros proyectos que ha desarrollado y sabrá qué memoria y otros recursos de silicio se requieren para implementar cada función. Sabrá lo que se espera que haga el producto y, por lo tanto, tendrá una buena lista de características y podrá calcular de forma rápida y precisa los recursos que el microcontrolador deberá proporcionar. Tratar de adivinar los requisitos de recursos a partir de una especificación de diseño inicial (desarrollada al comienzo del proyecto cuando se dispone de la menor información sobre el sistema) no es confiable en el mejor de los casos y solo los ingenieros con mucha experiencia, que han construido un completo base de datos de datos históricos en sus propias cabezas, tendrá algún tipo de éxito en el uso de este método.
Muchas empresas han adoptado un enfoque 'ágil' tanto para el software como para el diseño electrónico, lo que implica la creación de una 'biblioteca' de placas de características pequeñas (por ejemplo, placas RS-485, placas ADC, etc.) junto con placas de plataforma genéricas que albergan los microcontroladores. , de forma similar al uso de un kit de desarrollo y complementos. Luego, se puede crear un prototipo de un producto rápidamente (en cuestión de horas) seleccionando y conectando el conjunto de placas requeridas para las funciones. El software se ensambla de manera similar a partir de módulos de biblioteca y se puede portar y probar rápidamente. Una vez que se conoce el tamaño de la parte del código específica del hardware, generalmente es suficiente seleccionar la parte más pequeña que la contendrá. La excepción es la mencionada anteriormente donde la funcionalidad del dispositivo involucra grandes datos o algoritmos muy complejos. Este método proporciona una información precisa,
(Otra ventaja del enfoque Agile es que permite que el software y el desarrollo electrónico se realicen en paralelo, siendo el diseño electrónico un ejercicio para integrar el conjunto de placas de características y realizar el EMC relevante y otras cosas difíciles al mismo tiempo que el El software de aplicación se está desarrollando en los ensamblajes de prototipos. Todavía es necesario realizar algunas adaptaciones e integración, pero se realiza cuando el software y los componentes electrónicos están disponibles).
marcos catherine blanco
jwsc