Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Platarforma Mbed OS Clase #02.
Buenos días estimados lectores. En el día de hoy vamos a ver la segunda clase del curso STM32F303K8 Nucleo y Plataforma Mbed OS. Programación de microcontroladores de 32btis con Mbed OS. Para esta segunda clase vamos aver como configurar corectamente Mbed OS para poder trabajarlo con cualquier tarjeta, que para este caso trabajaremos con la STM32F303K8 Nucleo de Stmicroelectronics.
Mbed OS y compatibilidad con tarjetas de 32bit existentes.
Como sabemos por anteriores entradas, Mbed es una plataforma desarrollada por ARM para microcontroladores de 32bits. Pero bueno, en el mercado hay infinidad de tarjetas, entonces ¿soporta todas las tarjetas que estas basadas en micros de 32 bits? la respuesta es simple, y eso NO. ARM contruye sus propios microcontroladores de 32bits pero su negocio en general es vender licencias de los núcleos IP que sirven para desrrollar los famosos cortex M, y actualmente muchas empresas lo que hacen es diseñar sus microcontroladores con base en estos. Es decir, casi que son identicos; simplemte le agregan más perifericos y nuevas tecnologías. La arquitectura (RISC) que diseño ARM para los cortex son casi que universales y esto es lo que precisamente permite que casi todos los micros en el mercado sean compatibles para la plataforma Mbed OS. Miremos algunas de las empressas que son soportadas en Mbed:
En general estas son las empresas las cuales diseñan microcontroladores de 32 bits con base a la arquitectura de ARM son bastantes, aunque hay algunas que no como Microchip --pero ya se estan declinando--. Ahora en esta entrada aprenderemos a configurar algún microcontrolador soportado con el compilador Mbed OS a través del siguiente vídeo:
Y esto sería todo lo necesario para poder epezar a programar en Mbed OS. Espero que les haya gustado esta entrada. en la siguiente estaremos programando el "hola mundo" del mundo de nuestros microcontroladores.
Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Actualización de firmware de St-link V2. Clase #01.
Buenos días estimados lectores. En el día de hoy vamos a ver la primera clase del curso de programación de microcontroladores STM32 con la plataforma Mbed OS. Para esta primera clase lo que vamos a hacer es actualizar nuestro progrmador interno que poseen las tarjetas Nucleo. Antes que nada vamos a ver como funciona el Stlink V2.
¿Qué es el programador St-link V2 y cuales son sus características?
El ST-LINK / V2 es un depurador y programador en circuito para las familias de microcontroladores STM8 y STM32. Las interfaces del módulo de interfaz de un solo cable (SWIM) y JTAG / depuración de cable en serie (SWD) se utilizan para comunicarse con cualquier microcontrolador STM8 o STM32 ubicado en una placa de aplicación. Además de proporcionar las mismas funciones que el ST-LINK / V2, el ST-LINK / V2-ISOL cuenta con aislamiento digital entre la PC y la placa de aplicación de destino. También soporta voltajes de hasta 1000 Vrms. Las aplicaciones STM8 utilizan la interfaz USB de velocidad completa para comunicarse con el software ST Visual Develop (STVD) o ST Visual Program (STVP). Las aplicaciones STM32 utilizan la interfaz USB de velocidad completa para comunicarse con Atollic®, IAR ™, Keil® o para TASKING en entornos de desarrollo integrado.
Las características de este programador son:
Alimentación de 5 V suministrada por un conector USB
Interfaz compatible con USB 2.0 a toda velocidad
Cable USB estándar de A a Mini- B
Características específicas de SWIM
1.65 V a 5.5 V voltaje de aplicación soportado en la interfaz SWIM
Modos SWIM de baja velocidad y alta velocidad soportados
Velocidad de programación SWIM: 9.7 Kbytes / s en baja velocidad y 12.8 Kbytes / s en alta velocidad
Cable SWIM para la conexión a la aplicación a través de un conector vertical estándar ERNI (ref: 284697 o 214017) o conector horizontal (ref: 214012)
Cable SWIM para la conexión a la aplicación a través de un conector o un conector de paso de 2,54 mm
Características específicas de JTAG / serial wire debugging (SWD):
Voltaje de aplicación de 1,65 V a 3,6 V admitido en la interfaz JTAG / SWD y entradas tolerantes de 5V
Cable JTAG para la conexión a un conector estándar de 2.54 mm JTAG de paso de 20 pines
Compatible con JTAG
Soporta comunicación SWD y visor de cable serie (SWV)
Función de actualización directa de firmware compatible (DFU)
LED de estado que parpadea durante la comunicación con la PC
Temperatura de funcionamiento 0 a 50 ° C.
1000 Vrmshigh voltaje de aislamiento (solo ST-LINK / V2-ISOL)
Bien muchachos. Básicamente esto es lo que concierne al programador St-link V2, a diferencia del de la imagen anterior, el de nuestra tarjeta Nucleo se encuentra miniaturizado. Ahora y que conocemos a ciencia cierta las características de nuestro programador/depurador, vamos a ver en el siguiente vídeo como poder actualizar el firmware que posee este para corrección derrores y mejoras de nuestro dispositivo:
Curso STM32F303K8 Nucleo y Plataforma Mbed OS: Introducción
Buenas noches estimados lectores. En el día de hoy daremos comienzo al curso de programación de mcirocontroladores STM32 con la plataforma Mbed OS de la empresa ARM. Para este curso estaremos trabajando con la tarjeta de desarrollo STM32F303K8 Nucleo, una tarjeta muy práctica de conseguir y de utilizar para muchos estudiantes e ingenieros, y el público en general interesado en el tema.
En este curso vamos a programar como les mencione anteriormente la tarjeta de desarrollo nucleo basada en el STM32F303K8. Aprenderemos a configurar y usar sus diferentes perifericos, desde salidas y entradas digitales hasta llegar a USART. Tal vez I2C y SPI. Este curso será básico, así que no profundizaremos tanto en el uso de los perifericos, pero con lo visto en este podrán profundizar por su cuenta en el mundo de la programación de 32 bit. Comenzemos conociendo el software y el hardware a utilizar.
¿Qué es Mbed OS?
Mbed es una plataforma y sistema operativo para dispositivos conectados a Internet basados en microcontroladores ARM Cortex-M de 32 bits. Tales dispositivos también se conocen como dispositivos de Internet de las cosas . El proyecto es desarrollado en colaboración por Arm y sus socios tecnológicos.
Las aplicaciones para la plataforma Mbed se pueden desarrollar utilizando el IDE en línea de Mbed, un editor y compilador de código en línea gratuito. Solo es necesario instalar un navegador web en la PC local, ya que un proyecto se compila en la nube, es decir, en un servidor remoto, utilizando el compilador ARMCC C / C ++. El IDE de Mbed proporciona espacios de trabajo privados con la capacidad de importar, exportar y compartir código con el control de versión de Mercurial distribuido, y se puede usar también para la generación de documentación de código.
Las aplicaciones para la plataforma Mbed se pueden desarrollar utilizando el IDE en línea de Mbed, un editor y compilador de código en línea gratuito. Solo es necesario instalar un navegador web en la PC local, ya que un proyecto se compila en la nube, es decir, en un servidor remoto, utilizando el compilador ARMCC C / C ++. El IDE de Mbed proporciona espacios de trabajo privados con la capacidad de importar, exportar y compartir código con el control de versión de Mercurial distribuido, y se puede usar también para la generación de documentación de código.
¿Qué es STM32 Nucleo?
Las placas STM32 Nucleo altamente asequibles permiten a cualquiera probar nuevas ideas y crear prototipos rápidamente con cualquier MCU STM32.
Al compartir los mismos conectores, las placas Nucleo STM32 se pueden ampliar fácilmente con una gran cantidad de complementos de hardware de aplicaciones especializadas (Nucleo-64 incluye conectores morfo de Arduino Uno rev3 y ST, Nucleo-32 incluye conectores Arduino Nano).
Las placas STM32 Nucleo integran un depurador/programador ST-Link, por lo que no hay necesidad de una sonda separada.
Con las placas Núcleo STM32 se proporciona una biblioteca HAL de software STM32 junto con varios ejemplos de software, que funcionan a la perfección con una amplia gama de entornos de desarrollo que incluyen IAR EWARM, Keil MDK-ARM, mbed y IDE basados en GCC / LLVM.
Todos los usuarios de STM32 Nucleo tienen acceso gratuito a los recursos en línea de mbed (compilador, C / C ++ SDK y comunidad de desarrolladores) en www.mbed.org, lo que permite crear una aplicación completa en solo unos minutos.
Bueno muchachos ya que miramos a groso modo sobre los que es la plataforma de desarrollo Mbed OS y las tarjetas de desarrollo Stm32 Nucleo, ahora vamos a ver la introducción al curso de programación STM32 Nucle con Mbed OS:
Bien muchachos, técnicamente esta es la bienvenida y la introducción del curso que nos espera. En una nueva entrada miraremos el como actualizar firmware que posee el programador interno de la tarjeta de desarrollo STM32F303K8 Nucleo.
Escrito por: Breismam Alfonso Rueda Díaz
Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.
Servidor web Con raspbery Pi 2 + IP Estática + Acceso a internet Parte#02
Buenas noches estimados lectores. Hoy veremos la segunda parte del curso de como crear un servidor web con base en una Raspberry Pi. Para la primera parte vimos como esstablecer un servidor web con una dirección ip estática. esto tiene algunos problemas. Por ejemplo, no podremos asignarle un dominio por la sencilla razón de que el router nos asignará una ip direfente, y por tal motivo el dominio asignado previamente se perderá. Para solucionar esto, podemos decirle al router que nos asigne una ip estática y esto es lo que veremos en la entrada de hoy. Antes de empezar lo que haremos es ver algo de teoría para complementar los conceptos que veremos hoy y así entender mejor el vídeo que se presentará para poder asignar una ip estática.
¿Qué es un protocolo de internet?
El protocolo de internet (en inglés Internet protocol o IP) es un protocolo de comunicación de datos digitales clasificado funcionalmente en la capa de red según el modelo internacional OSI.
Su función principal es el uso bidireccional en origen o destino de comunicación para transmitir datos mediante un protocolo no orientado a conexión que transfiere paquetes conmutados a través de distintas redes físicas previamente enlazadas según la norma OSI de enlace de datos.
¿Qué es una dirección ip?
El protocolo de Internet define el formato de dirección IP. Desafortunadamente, hay un límite de cantidad de direcciones IP disponibles, debido a que la estructura de la dirección es un número binario de 32 bits. En los primeros días de Internet, no había ningún problema asignando el siguiente número disponible para un nuevo usuario. No había mucha gente navegando por Internet y parecía que había un montón de direcciones IP para todos. En este período, todas las direcciones IP eran estáticas.
¿Qué es una ip estática?
Una dirección IP estática es una dirección regular que está asignada permanentemente a una computadora localizable a través de Internet. Cada computadora conectada a una red tiene una dirección física permanente llamada dirección MAC. Esto no se puede cambiar sin tener que reemplazar el adaptador de red del equipo. La dirección IP, aunque asignada permanentemente, no se da automáticamente a una computadora. Puede ser abandonada y luego reasignada a otro equipo.
¿Que es una dirección ip dinamica?
La definición de las direcciones "Estáticas" sólo fue contundente cuando un sistema diferente llegó a existir. "Estática" sólo tiene sentido si se compara con direcciones IP dinámicas. Las direcciones IP dinámicas son un intento de ralentizar la absorción de direcciones IP. Un proveedor de servicios de Internet (ISP, por sus iniciales en inglés) tiene un menor número de direcciones IP que el número de clientes. Cuando un cliente se conecta, el ISP asigna una dirección IP temporal a ese equipo durante toda la sesión. No todos los clientes del ISP iniciarán la sesión al mismo tiempo. Cada uno utiliza una dirección IP única que no está asignada permanentemente a ellos.
Aunque la dirección IP dinámica tienen un uso más eficiente de las direcciones IP disponibles, algunos usuarios de Internet debe tener una dirección IP estática. La comunicación a través de redes requiere de dos partes: el cliente y el servidor. El cliente comienza con una solicitud de contacto. El servidor responde. La dirección IP del cliente puede cambiar con frecuencia sin ninguna consecuencia. Sin embargo, los servidores tienen una dirección permanente. Los clientes encuentran servidores señalando la dirección de un sitio visitado con regularidad o mediante la búsqueda de la dirección a través de un servicio de listado o motor de búsqueda. Una dirección IP que cambia constantemente haría un servidor ilocalizable.
Bueno estimados lectores, ya que vimos los conceptos más importantes para poder entender esta entrada lo que sigue ahora es proceder a realizar la configuración de la dirección ip como estática y verificar los cambios efectuados en esta. Esto lo veremos a través del siguiente vídeo:
Bueno mis estimados seguidores y lectores; hasta este punto ya deberán tener configurada sus Raspberry Pi como servidor bajo una red local, además con una IP estática. En la siguiente entrada procederemos a abrir puertos y establecer nuestro servidor en internet con un dominio publico gratuito para que tengan conectividad a el sin necesidad de estar bajo su red de área local conectados.
Servidor web Con raspbery Pi 2 + IP Estática + Acceso a internet Parte#01
Buenas noches estimados lectores, en el día de hoy vamos a tratar un tema que en la actualidd es de suma importancia, y es acerca de los servidores web. Lo que haremos en esta entrada será configurar una Raspberry Pi como un servidor web y mostrar una página html a través de el. Antes de comenzar con la configuración veremos algo de teoría que será fundamental para entender cda parte del vídeo y que puedan entender lo máximo posible el proceso.
¿Qué es un servidor web?
Un servidor web es un programa el cual procesa un programa del lado de un servidor. Entendiendo que un servidor es un computador con una conexión a internet. La finalidad de un servidor web es realizar la comunicación bidireccional de un servidor a un cliente, que en este caso seria otro computador con acceso a internet que no comparte archivos a diferencia de servidor web que si lo hace. Como el servidor web comparte archivos, podemos compartir imagenes y escritos, vídeos y demás, por tal razón los servidores web son tan ampliamente usados en el mundo, ya que a través de ellos podemos compartir nuestros archivos con interfaces gráficas como lo son las páginas web. Para la transmisión de todos estos datos suele utilizarse algún protocolo. Generalmente se usa el protocolo HTTP para estas comunicaciones, perteneciente a la capa de aplicación del modelo OSI. El término también se emplea para referirse al ordenador
¿Qué es una red local?
Una red de área local (Local Area Network, o LAN) es un grupo de equipos de cómputo y dispositivos asociados que comparten una línea de comunicación común o un enlace inalámbrico con un servidor. Normalmente, una LAN abarca computadoras y periféricos conectados a un servidor dentro de un área geográfica distinta, como una oficina o un establecimiento comercial. Las computadoras y otros dispositivos móviles utilizan una conexión LAN para compartir recursos como una impresora o un almacenamiento en red.
Una red de área local puede servir a sólo dos o tres usuarios (por ejemplo, en una red de oficina pequeña) o a varios cientos de usuarios en una oficina más grande. Las redes LAN incluyen cables, conmutadores, enrutadores y otros componentes que permiten a los usuarios conectarse a servidores internos, sitios web y otras redes LAN a través de redes de área extensa (WAN).
¿Qué es PHP?
PHP, acrónimo recursivo en inglés de PHP: Hypertext Preprocessor (preprocesador de hipertexto), es un lenguaje de programación de propósito general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico. Fue uno de los primeros lenguajes de programación del lado del servidor que se podían incorporar directamente en un documento HTML en lugar de llamar a un archivo externo que procese los datos. El código es interpretado por un servidor web con un módulo de procesador de PHP que genera el HTML resultante.
PHP ha evolucionado por lo que ahora incluye también una interfaz de línea de comandos que puede ser usada en aplicaciones gráficas independientes. Puede ser usado en la mayoría de los servidores web al igual que en muchos sistemas operativos y plataformas sin ningún costo.
En lugar de usar muchos comandos para mostrar HTML (como en C o en Perl), las páginas de PHP contienen HTML con código incrustado que hace "algo" (en este caso, mostrar "¡Hola, soy un script de PHP!). El código de PHP está encerrado entre las etiquetas especiales de comienzo y final que permiten entrar y salir del "modo PHP".
Lo que distingue a PHP de algo del lado del cliente como Javascript es que el código es ejecutado en el servidor, generando HTML y enviándolo al cliente. El cliente recibirá el resultado de ejecutar el script, aunque no se sabrá el código subyacente que era. El servidor web puede ser configurado incluso para que procese todos los ficheros HTML con PHP, por lo que no hay manera de que los usuarios puedan saber qué se tiene debajo de la manga.
Lo mejor de utilizar PHP es su extrema simplicidad para el principiante, pero a su vez ofrece muchas características avanzadas para los programadores profesionales. No sienta miedo de leer la larga lista de características de PHP. En unas pocas horas podrá empezar a escribir sus primeros scripts.
¿Qué es apache?
Apache es un software de servidor web gratuito y de código abierto con el cual se ejecutan el 46% de los sitios web de todo el mundo. El nombre oficial es Apache HTTP Server, y es mantenido y desarrollado por la Apache Software Foundation.
Le permite a los propietarios de sitios web servir contenido en la web, de ahí el nombre de “servidor web”. Es uno de los servidores web más antiguos y confiables, con la primera versión lanzada hace más de 20 años, en 1995.
Cuando alguien quiere visitar un sitio web, ingresa un nombre de dominio en la barra de direcciones de su navegador. Luego, el servidor web envía los archivos solicitados actuando como un repartidor virtual.
¿Qué es Mysql?
MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual: Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como la base datos de código abierto más popular del mundo,12 y una de las más populares en general junto a Oracle y Microsoft SQL Server, sobre todo para entornos de desarrollo web.
MySQL fue inicialmente desarrollado por MySQL AB (empresa fundada por David Axmark, Allan Larsson y Michael Widenius). MySQL AB fue adquirida por Sun Microsystems en 2008, y ésta a su vez fue comprada por Oracle Corporation en 2010, la cual ya era dueña desde 2005 de Innobase Oy, empresa finlandesa desarrolladora del motor InnoDB para MySQL.
Bueno, ya que vimos a groso modo que es un servidor web, red de área local, PHP, que es apache y que es mysql procederemos a ver el siguiente vídeo tutorial para poder empezar a configurar nuestraRaspberry Pi como servidor web:
Bueno mis estimados seguidores y lectores; hasta este punto ya deberán tener configurada sus Raspberry Pi como servidores bajo una red local con una IP dinamica. En la siguiente entrada procederemos a establecer una IP estática a nuestro nuevo servidor.
Escrito por: Breismam Alfonso Rueda Díaz
Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.
Instalar Arduino IDE en Raspberry Pi 2 B (Rasbian Stretch) , compatible con todos los modelos de Raspberry.
Buenos días estimados lectores. En el día de hoy miraremos como poder instalar Arduino IDE en Raspberry Pi 2 B con la distribución de Rasbian Stretch (con base en Debian Stretch).
Primero que todo lo que debemos saber al momento de instalar Arduino IDE es que raspberry pi es una tarjeta de desarrollo la cual no posee muchas capacidades en cuanto a hardware, pero no es impedimento para poder instalar Arduino IDE, ya que es un entorno ligero y no consume muchos recursos al momento de compilar la programación realizada apra Arduino. Algo que debemos tener claro es la distribución o sistema operativo que va a manejear nuestra Raspberry Pi. No todos los sistemas operativos soporta Arduino. Por ejemplo nosotros sabemos que existe una versión de windows 10 para Raspberry Pi, pero esta solo esta en modo terminal o CMD, es decir que no tiene interfaz gráfica. Por tal motivo no recomiendo la instalación del compilador de Arduino IDE para poder programarlo vía CMD, ya que se complicarán con esto. Alguna distribución que este basada en Debian estará perfecta para poder instalarlo. En este caso utilizaremos Rasbian Stretch, distribución basada en Debian 10.
Lo primero que debemos hacer es actualizar nuestra Raspberry Pi, y para esto necesitaremos modificar los repositorios que por defecto vienen en Rasbian. La ruta que utilizarán para modificar los repossitorios será /etc/apt/sources.list. Luego descomentan los repositorios existentes borrando el "#" y aplicamos los cambios. Posteriormente a esto actualizamos el cache de los repositorios y actualizamos nuestra distribución. Por último a través del comando sudo apt-get install arduino* instalamos Arduino IDE y eso sería todo.
Para que puedan hacer todo correctamente les dejaré el siguiente vídeo donde podrán apreciar todo el proceso descrito anteriormente.
Escrito por: Breismam Alfonso Rueda Díaz
Bien muchachos, esto es todo por hoy. Estén pendientes de mi canal, de mi blog y de mi pagina de Facebook para más contenido.
Inteligencia artificial aplicada a microcontroladores Parte #02
Buenos días estimados lectores. En el día de hoy continuaremos con la segunda parte se inteligencia artificial aplicada a microcontroladores.
Para aquellos que aún no están en contexto, a través del siguiente link podrán ver la primera parte. Analizando la entrada anterior a este tema pudimos ver que de alguna forma un microcontrolador nos daba la posibilidad de poder integrar una red neural artificial, o en general algún método de la inteligencia artificial para optimizar algún tipo de proceso. Quedamos a la espectativa de saber si es posible o no el implementar esto; para fortuna de todos si. Resulta que tras un tiempo de consultas y estudios, pude observar que hay algo llamado programación dinamica; y aquí se encuentra un aliciente pero no el unico de la solución de este contexto.
Mapa de problema sobre diligencias
¿Qué es la programación dinámica?
La programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas. El matemático Richard Bellman inventó la programación dinámica en 1953 que se utiliza para optimizar problemas complejos que pueden ser discretizados y secuencializados.
Una subestructura óptima significa que se pueden usar soluciones óptimas de subproblemas para encontrar la solución óptima del problema en su conjunto. Por ejemplo, el camino más corto entre dos vértices de un grafo se puede encontrar calculando primero el camino más corto al objetivo desde todos los vértices adyacentes al de partida, y después usando estas soluciones para elegir el mejor camino de todos ellos. En general, se pueden resolver problemas con subestructuras óptimas siguiendo estos tres pasos:
Dividir el problema en subproblemas más pequeños.
Resolver estos problemas de manera óptima usando este proceso de tres pasos recursivamente.
Usar estas soluciones óptimas para construir una solución óptima al problema original.
Los subproblemas se resuelven a su vez dividiéndolos en subproblemas más pequeños hasta que se alcance el caso fácil, donde la solución al problema es trivial.
Decir que un problema tiene subproblemas superpuestos es decir que se usa un mismo subproblema para resolver diferentes problemas mayores. Por ejemplo, en la sucesión de Fibonacci (F3 = F1 + F2 y F4 = F2 + F3) calcular cada término supone calcular F2. Como para calcular F5 hacen falta tanto F3 como F4, una mala implementación para calcular F5 acabará calculando F2 dos o más veces. Esto sucede siempre que haya subproblemas superpuestos: una mala implementación puede acabar desperdiciando tiempo recalculando las soluciones óptimas a problemas que ya han sido resueltos anteriormente.
Esto se puede evitar guardando las soluciones que ya hemos calculado. Entonces, si necesitamos resolver el mismo problema más tarde, podemos obtener la solución de la lista de soluciones calculadas y reutilizarla. Este acercamiento al problema se llama memoización (no confundir con memorización; en inglés es llamado memoization). Si estamos seguros de que no volveremos a necesitar una solución en concreto, la podemos descartar para ahorrar espacio. En algunos casos, podemos calcular las soluciones a problemas que de antemano sabemos que vamos a necesitar.
Cuando hablamos de optimizar nos referimos a buscar alguna de las mejores soluciones de entre muchas alternativas posibles. Dicho proceso de optimización puede ser visto como una secuencia de decisiones que nos proporcionan la solución correcta. Si, dada una subsecuencia de decisiones, siempre se conoce cuál es la decisión que debe tomarse a continuación para obtener la secuencia óptima, el problema es elemental y se resuelve trivialmente tomando una decisión detrás de otra, lo que se conoce como estrategia voraz. En otros casos, aunque no sea posible aplicar la estrategia voraz, se cumple el principio de optimalidad de Bellman que dicta que «dada una secuencia óptima de decisiones, toda subsecuencia de ella es, a su vez, óptima». En este caso sigue siendo posible el ir tomando decisiones elementales, en la confianza de que la combinación de ellas seguirá siendo óptima, pero será entonces necesario explorar muchas secuencias de decisiones para dar con la correcta, siendo aquí donde interviene la programación dinámica.
Contemplar un problema como una secuencia de decisiones equivale a dividirlo en problemas más pequeños y por lo tanto más fáciles de resolver como hacemos en Divide y Vencerás, técnica similar a la de programación dinámica. La programación dinámica se aplica cuando la subdivisión de un problema conduce a:
Ejemplo sobre problema de diligencia-programación dinámica
Una enorme cantidad de problemas.
Problemas cuyas soluciones parciales se solapan.
Grupos de problemas de muy distinta complejidad.
Pero como vimos anteriormente en la definición de programación dinámica, podemos deducir que unos de los problemas fundamentales al momento de intentar programar un algoritmo de forma dinámica es la cantidad de memoria que se necesitaría para poder programar los distintos subproblemas que conllevaría la implementación. Pero bueno, para esto hay una solución y es la implementación de una memoria flash externa controlada por algún periférico SPI que posea el microcontrolador. Entonces, en la actualidad. ¿porqué no se implementan este tipo de programación?, por una sencilla razón, y es que los compiladores no estan optimizados para este tipo de programación. Entonces, ¿si no están optimizados para este tipo de programación, porqué no los optimizan?. Resulta que este tipo de programación no es muy eficiente para distintas situaciones, por tal razón, no es viable optimizar los microcontroladores para estos tipos de algoritmos; pero bueno, no todo son malas noticias, hay situaciones que poco a poco se van presentando en la industria de una manera exponencial y que sugiere la nesecidad de implementar algún tipo de algoritmo autónomo que dependiendo de las variables, pueda decidir la mejor solución sin necesidad de intervención humana. Es en este punto donde entra a jugar las DNN (Deep Neural Networks), que son algoritmos entrenados para para realizar tareas específicas. Anteriormente mencioné que si se puede implementar inteligencia artificial en los microcontroladores; básicamente se puede hacer algunos arreglos, crear compiladores que se ajusten a la necesidad de un algoritmo tan especializado como lo son como los de programación dinámica, pero como dije anteriormente el tiempo es un recurso que no podemos olvidar, y si es para un proyecto de baja escala, posiblemente no valga la pena ponerse a realizar este trabajoso proceso.
Una solución actual y que es muy viable es implementar una DNN, que en cuestión ya es posible. Veremos este apartado de implementación de redes neurales en microcontroladores en una tercera parte para poder tratar mejor el tema.