¿Es mejor usar toda la potencia de un microcontrolador?

MicroPerif1.png
Estructura clásica de un microcontrolador con módulos periféricos

Existen dos filosofías distintas cuando desarrollamos programas para los microcontroladores: la primera es la de usar todo el potencial que un micro en particular nos ofrece, la segunda es la de usar el micro en el modo más simple posible implementando las distintas funciones especiales a través del software que nosotros mismos hacemos. Por ejemplo, para leer un potenciómetro podemos usar el módulo ADC (convertidor analógico digital) incorporado en el micro o hacer uno todo nuestro usando solamente el código software y un normal pin de entrada-salida del micro.

Ambos métodos tienen sus ventajas y sus inconvenientes. Usar toda la potencia de un micro en particular nos permite desarrollar programas más fácilmente y de calidad mayor pero por otro lado nos quita flexibilidad y universalidad. Es decir, nuestro programa hecho para un cierto modelo de micro podría no funcionar con un micro diferente. Por ejemplo, los programas que he desarrollado tantos años atrás para el PIC16C54, uno de los primeros modelos producidos por la Microchip, podrían funcionar perfectamente con los nuevos modelos de micros porque en dichos programas, yo no usaba ninguno de los módulos especiales que los micro actuales incorporan.

MicroPerif2.png
Estrategia de programación que usa solo software para reemplazar los módulos periféricos

Al inicio he usado la palabra "filosofía" porque el problema del que hablo en realidad se presenta non solo en el sector de los microcontroladores sino en toda la tecnología moderna. Por ejemplo: ¿si quisiera aprender a sonar un instrumento musical es mejor un piano clásico o un teclado ultrasofisticado con cientos de funciones especiales? En este último caso pasaríamos la mayor parte del tiempo estudiando las funciones especiales mientras que las simples teclas blancas y negras que representan la esencia de la música serían en segundo plano. Después de poco tiempo en esta "carrera tecnológica" el teclado dejaría de fabricarse, reemplazado por otros modelos mucho más sofisticados y todo nuestro conocimiento de funciones "especiales" sobre ese específico modelo se perderían en la nada.

MicroPerif3.png
Listado de programación en assembly para leer la posición de un potenciómetro de regulación sin usar un módulo ADC incorporado

Por otro lado, no podemos pretender que nuestro software hecho en casa reemplace la sofisticación alcanzada por muchos módulos que los micros modernos incorporan. Por ejemplo, sería muy difícil (sino imposible) desarrollar con solo software un puerto USB para PC o un ADC de 12 o 14 bits. Por lo tanto, según mi punto de vista, la mejor solución es la de adaptarse a las exigencias usando lo que realmente es necesario (no usar un misil para matar un mosquito). Por ejemplo, si el objetivo es el de hacer un encendido lento de un led, podemos lograrlo simplemente con un poco de código en lugar de usar un módulo PWM incorporado. Lo mismo vale en el caso de la lectura de un potenciómetro de regulación. Aunque si al principio nos parecerá estúpido hacer este trabajo extra si nuestro micro tiene ya los respectivos módulos, con el tiempo notarán la ventaja que este método nos da.

Los contenidos de este blog son originales y están bajo una licencia Creative Commons BY_NC_SA

Logo creative commons cc by nc sa

¿Es mejor usar toda la potencia de un microcontrolador? ultima modifica: 2012-09-18T10:01:30+02:00 da inventable

13 comentarios sobre “¿Es mejor usar toda la potencia de un microcontrolador?”

  1. EL QUE PUBLICO ESTE TEMA ES UN NOSTALGICO DE LOS 90s, SIGUE CLAVADO EN LA FRUSTRACION DE LOS PICs DE ESA EPOCA DONDE NO EXISTIAN MUCHAS FACILIDADES PARA LOS PROGRAMADORES TANTO EN SOFT Y HARDWARE…

    YA ES 2013… LAS COSAS CAMBIARON… ES HORA DE VER EL FUTURO Y OLVIDARSE DEL FRSTIVAL DE WOOSTCK.. ADIOS A LOS JIPIES…

    Hola Kira, he eliminado el apelativo que pusiste en tu comentario porque en este blog no hay espacio para la mala educación y la falta de respeto reciproco. Encontrás en internet muchos lugares a tu altura. Respecto a tu critica, yo no hubiera escrito ese post si no me preguntara que es la cosa mejor. Vivo en un país donde los negocios de electrónica se funden todos los días y donde todo se compra hecho. Lo que pienso es que dentro de unos años, la gente no será más capaz de construir nada con sus manos. Ese es el futuro que veo Kira. Por eso existe inventable. Uno es libre de seguir su propio destino.

  2. Kira amigo, me parece que fuiste un poco fuerte con tu comentario, no creo que sea forma de dirigirse hacia alguien que está constantemente compartiendo sus conocimientos. Además me parece un artículo completamente válido.

  3. Quiero aprender a programar microcontroladores de última generación que funcionen a alta velocidad, por ejemplo para video , que me aconsejan, como puedo lograrlo? gracias por sus respuestas

    Pregunta para el foro.

  4. Gabriel, no deberías dar tantas explicaciones a gente como este Kira. Si quiere leer el blog que lo haga y si no quiere, que no lo haga. Es simple.
    Yo no puedo decir que estoy totalmente de acuerdo con el artículo, pero incluso utilizando el mismo chip (yo utilizo los AVR de Atmel, no los PIC) he implementado ambos métodos. Por ejemplo, si necesitás cuatro AD y sólo tenés tres disponibles, utilizo un sistema parecido al tuyo para los cuatro AD. Obviamente, si en uno de los casos necesito una exactitud mucho mayor que lo que este método permite, la cosa cambia, uso el AD nativo, no hay que exagerar.
    El artículo está perfecto, no te preocupes. Es cuestión de cada uno cómo hace las cosas.

    Mis más cordiales saludos,
    Juan (de Argentina)

    Hola Juan, gracias por contarnos tu experiencia y tu visión personal. Hasta pronto.
    Gabriel

  5. Estamos en el 2016 y este articulo tiene mas vigencia que nunca. La única forma de aprender las cosas bien, es conocer la esencia de las misma.
    Aprovecho para darte las gracias Gabriel por dedicar tu tiempo a escribir estos articulo, son muy interesantes y sobre todo muy bien explicados, e aprendido un montón de cosas nuevas con tus artículos.

    Gracias amigo tienes un don para hacerte entender.

    1. Hola Keller:
      Tienes razón, se rompe el c… para hacerse entender y lograr presentar las cosas de la forma en que lo hace. Pero por sobre todo, como le comenté a uno de sus colaboradores, lo que más me sorprende es la paciencia infinita que tiene 🙂 .
      Recorriendo el blog, he visto cada pregunta que, si las hubiera tenido que responder yo… jeje, te imaginarás lo que iba a decir.
      No puedo , ni por asomo, hablar en nombre de él, pero me parece que aprecia mucho los comentarios como el tuyo.
      Después de todo, cuando uno se esfuerza mucho en algo, y encima lo comparte con los demás, lo más humano es que espere aprecio, no comentarios como el del tarado que escribió al principio.
      Y coincido contigo en que la forma correcta de aprender es entendiendo, no como los que preguntan esperando que les entreguen la solución en un paquetito para regalo, sin haber hecho ningún esfuerzo por si mismos.
      Como puedes ver, no tengo la paciencia de Gabriel 🙂 .

      Saludos, Keller,
      Juan

    2. Perdón, yo de nuevo.
      Lo que acabo de escribir no tiene nada que ver con si uno está de acuerdo con el artículo o no, sino a la forma de expresar la opinión. En algunas artículos, hubiera hecho las cosas de otra forma de lo explicado, pero por elección o preferencias, no porque considerara que el artículo estaba mal.
      La cuestión es cómo uno expresa el desacuerdo: si lo hace como insulto, está muy mal; si lo hace amablemente es otra cosa. Cuando uno le habla bien a otra persona, ésta siempre estará más dispuesta a escuchar, y si ésta le contesta bien, uno también estará dispuesto.
      Bueno, me estoy yendo por las ramas.

      ¡Saludos!
      Juan

  6. Quisiera que investigases el programa niple, creo que ayudaría a muchos a programar fácilmente y rápido, cosas complicadas

    A mi me gusta mucho, porque el código de programación no es lo mío

    Un saludo

    1. Hola, yo suelo usar Niple y Flowcode, y lamentablemente mi memoria no da para acordarme de tantos codigos, pero si animo a saber y escribir los codigos porque de ellos se sirven los modulos que manejamos en programas como los citados, y de hecho hay una instrucción que suelo usar y que escribo en ensamblador para acelerar o decelerar el pic en la programación de niple, porque el programa no da toda la gama de instrucciones que tiene el chip para el oscilador local.

      Yo si apoyo y veo bien el artículo ademas considero que es importante saber la raiz de las instrucciones para saber como funciona y evaluar el fallo en caso de que el programa no hiciera bien el trabajo (cosa que con Niple me ha pasado varias veces, y he tenido que crear una rutina propia porque la que trae el programa es erratica) pero también veo con buen ojo el aprovecharse de lo nuevo, porque ahorra tiempo y esfuerzo de memorización (al menos en mi caso, porque hacer una rutina es llevarme varias horas de investigación, mi memoria ya no esta muy lucida me temo 🙂

      Todo avance es importante, pero aun es más importante la base porque en ella se apoyan los avances del futuro.

      Un saludo desde España

      P.d.: Gracias por la aclaración de los diodos Schottky de esta mañana, ello me va a ayudar mucho para mis pequeños proyectos 🙂

      1. Ese es (según mi opinión) el enorme problema de un compilador: uno no sabe qué diablos va a hacer con lo que uno escribe. Es obvio que no se puede escribir un Libre Office para PC en assembler, pero programar un PIC o un AVR de 2K de memoria en Python o incluso en C me parece una tontería. Y ni hablar del Arduino…
        Uno de los aparatos que hice (con un micro de apenas 8K) maneja displays LCD (con sus frases fijas en tres idiomas que se comen más de la mitad de los 8K), sensores de temperatura, teclado, entrada y salida de datos por audio, comunicación con PC y no sé que más y los programé en assembler sin ningún problema, con la ventaja de que uno sabe exactamente qué está haciendo el micro en cada momento. Y ni hablar de la velocidad…
        Algunos argumentan acerca de la portabilidad; ellos sabrán si se necesita o no. Claro que hay que esforzarse más, pero una vez que te compenetras no es tan difícil.
        Hay un montón de criterios para elegir uno u otro camino. No creo que valga la pena discutir por eso.

        Bueno, se me fue la mano 😉
        Saludos a todos,
        Juan

        P.d.: De nada 🙂

  7. Buen día, queria saber si es bueno o malo que el micro que uso en su hoja de especificaciones diga que es de baja potencia.

    1. Hola Jhan: normalmente eso se considera como bueno, y se especifica generalmente en micros pensados para dispositivos a batería. Pero, y esto tomalo con pinzas, a veces, si son usados en ambientes eléctricamente «ruidosos», y no necesitas baterías, conviene usar la versión que no es low power, pero repito, esto lo digo por cosas que he visto a lo largo de los años, no es una realidad científica 🙂 .

      Saludos,
      Juan

Los comentarios están cerrados.