Programación y desarrollo de microcontroladores

gonya707

Bienvenido/a! Con este hilo pretendo formar un digno heredero de este hilo del foro de estudios, pero más enfocado a formar, resolver dudas y mostrar nuestros proyectos realizados con cualquier tipo de microcontrolador, FPGA, etc. no sólo Arduino. Hoy en día la oferta de placas de desarrollo es muy grande y variada y cada familia tienes sus pros y contras, que intentaré resumir aquí.

qué es todo esto? por dónde empezar?

Hoy en día prácticamente todo aparato electrónico lleva un microcontrolador, un microprocesador con las mismas funciones que el procesador de vuestro ordenador, pero a pequeña escala, barato, de bajo consumo y útil para millones de cosas. Si llevas un tiempo deseando hacer un proyecto de domótica, iniciarte en la programación de hardware o profundizar tus conocimientos en programación a bajo (en ocasiones MUY bajo) nivel, este es tu lugar. No es necesario que tengais ningún conocimiento de electrónica, no os hace falta ni saber la Ley de Ohm, sólo hace falta tener conocimientos básicos de programación (en especial C) y ganas de aprender a pensar con un cambio de mentalidad.

familias de microcontroladores

  • Microchip PIC es probablemente la familia de procesadores más vendida de la historia. Baratos, fiables, y con un espectro MUY amplio de prestaciones, desde PICs de 8 pines diminutos hasta PICs con varias decenas de GPIO, conversores y demás perifericos.


Placa de desarrollo PIC y diversos procesadores PIC.

Estos procesadores pueden programarse directamente en ensamblador, en C plano, o bien en un lenguaje llamado CCS PIC (confundir con CSS :p), el cual recomiendo. En todos estos aparatos el "Hello world" suele consistir en apagar y encender un LED conectado a la placa que habitualmente suele incluirse en la PCB. Este hellow world o "Blink" como se le conoce habitualmente se programaría de este modo en CCS PIC.

spoiler

La mayor pega para iniciarse en la programación de PIC es sin ninguna duda el desembolso inicial. El aparato necesario aparte del propio procesador es el programador llamado PicKit . Del cual existen muchos clones los cuales recomiendo, antes que el original y caro. Tambien es muy recomendable hacerse con una placa de desarrollo de PIC como la de la foto de la cabecera. Pueden encontrarse en torno a $15.

  • Atmel/Arduino


Placa Arduino UNO clónica

Atmel ha sido la competencia directa de Microchip PIC desde sus inicios. Microchip ganó la contienda y dejó a Atmel poco más que en el fango. Entonces surgió un proyecto de código abierto del que todo el mundo ha oido al menos hablar, Arduino, y las placas de arduino se basaron en procesadores Atmel. La popularidad de este tipo de placas a hecho resurgir a Atmel de sus cenizas, siendo la clave del éxito un lenguaje de programación simplificado hasta límites insospechados, haciendo posible que todo el mundo, incluso sin conocimientos previos de programación se haya lanzado al mundo de desarrollo de hardware.

Este es el ejemplo de Blink esta vez en "wiring", el lenguaje usado por Arduino.

spoiler

En este caso el inconveniente es el mismo que PIC, el precio de una placa oficial de Arduino es caro, pero existen miles de clones y de proyectos paralelos basados en arduino con idéntica funcionalidad y prestaciones que hacen de esta familia de microcontroladores una buena elección para iniciarse en el mundillo.

  • MSP430 es el buque insignia de Texas Instruments (Si! hacen más cosas aparte de calculadoras)


Placa de desarrollo MSP430 y procesador MSP430 2553

spoiler
  • ARM es una familia de microcontroladores relativamente moderna y enormemente impulsada por la evolución constante de la telefonía móvil. Las placas de desarrollo ARM que fabrican numerosos gigantes de la industria como Texas Instruments con sus Tiva/Stellaris Launchapds o ST microelectronics con las placas Discovery ofrecen una potencia bruta infinitamente mayor al resto de placas de microprocesador disponibles en el mercado, programables además en un lenguaje de alto nivel, sencillo, conciso y completo.


Placas Stellaris (Ahora Tiva) y ST Discovery

Este es un ejemplo de Blink hecho en CCS (esta vez no confundir con CCS PIC), el lenguaje usado en los procesadores Tiva de TI.

spoiler

Una posible pega para estos procesadores es lo caótico que resultaba hacerse con un IDE y todos los drivers necesarios para empezar a programar. Ahora gracias al ecosistema de launchpad (más abajo en los links de interés) hecho por Texas instruments este paso se ha convertido en algo muy sencillo.

como enfocar mi aprendizaje

Un microcontrolador puede hacer muy pocas cosas por si solo, sin embargo con esas pocas instrucciones la cantidad de aplicaciones es inmensa. Cualquiera de las familias que he enumerado anteriormente y cualquier otra que me haya dejado en el tintero posee muy probablemente estas funciones y deberían aprenderse aproximadamente en este orden:

  • Controlar tiempos y la frecuencia con la que trabaja el procesador, necesario para hacer mediciones temporales de precisión y usar la frecuencia de trabajo apropiada.

  • Configurar y usar los pines como entrada/salida. Cada procesador posee un numero variable de los llamados GPIO General purpose Input and Output, es decir pines que pueden leer y escribir estados logicos (1 o 0) en sun contacto eléctrico.

  • Usar interrupciones. Una interrupción detiene la secuencia del programa y ejecuta una porción de código cuando ocurra algún evento concreto, como puede ser pulsar un interruptor o haber pasado un determinado tiempo.

  • Usar los timers del procesador. Cada procesador lleva un número variable de temporizadores con los que pueden realizarse acciones periódicamente en segundo plano, entre otras muchas cosas.

  • Generar señales de PWM. Una señal de modulación de ancho de pulso es una de las señales eléctricas más versátiles de la eléctronica, pudiendo servir desde iluminar un LED con la intensidad deseada como colocar un brazo robótico en la posición deseada.

  • Leer datos analógicos por medio de los conversores analógico-digital (ADC) y realizar el proceso contrario, de digital a analógico por medio de un DAC.

  • Aprender a usar periféricos básicos, como un LCD de 16x2 caracteres, un LCD gráfico, una botonera, un lector de tarjetas SD, servos, puertos USB...

  • Saber iniciar, recibir y enviar mensajes en alguno de los protocolos de transmisión de datos, tanto síncronos (SPI, I2C) como asíncronos (UART) o ambos (RS232).


LCD táctil, LCD 16x2 y botonera de 4x4

ideas de proyecto para iniciarse

  • Un reloj binario con LEDs.

  • Un ambilight para pc con una tira de LEDs RGB

  • Un lector USB de tarjetas SD

  • Un sintetizador musical.

  • Un conmutador accionado por una palmada.

  • ...Todo lo que se os pueda ocurrir

Algunos proyectos y motivación adicional

NES programada en un FPGA

Chronos. Un reloj de pulsera programable de manera inalámbrica. Posee un MSP430 en su interior y dispone de numerosos sensores (temperatura, humedad, pulsaciones...), asi como un acelerómetro en tres dimensiones y es capaz de comunicarse por bluetooth y wifi con cualquier aparato.


http://www.ti.com/tool/ez430-chronos

Un programador de PIC montado en un MSP430
http://43oh.com/2013/12/burn-a-microchip-pic-with-your-msp430-launchpad/

Gamby, una placa de expansión diseñada para arduino pensada para programar juegos con un enfoque retro

http://logicalzero.com/gamby/

Algunas direcciones de interés

El "ecosistema" de Launchpads de Texas Instruments
Pagina oficial del proyecto Arduino
Pagina oficial de Energía. La alternativa de Texas instruments a Arduino
Tindie, una web dedicada a la venta de placas de expansión y muchas más cosas hardware
Seeedstudio. Venta de hardware y placas de circuito impreso
43oh! Foros no oficiales del procesador MSP430, también disponen de tienda online donde pedir placas
Stellarisiti. Foros no oficiales de las placas de desarrollo ARM Stellaris/Tiva/ST discovery, etc
Curso online de EDX de sistemas embebidos sobre la Tiva Launchpad

36
S

vaya pedazo de currada, con users asi da gusto de verdad

Jastro

#1 Menudo curro compañero, a mi esto me vendrá genial, porque sinceramente no tengo ni puta idea y siempre he tenido ganas de probar estas cosillas D:

Lecherito

Cuantas cosas haría si tuviera dinero e ideas :-c

1 respuesta
gonya707

#4 En el estado en el que está todo esto en la actualidad lo primero no es excusa, una placa de MSP430 te vale 10 dolares con gastos de envio gratis ;)

Todso

In Gonya707 we trust.

Gran aporte tengo ganas de ponerme con algo en cuanto acabe exámenes.

Jastro

lo de Gamby me ha molado demasiado, pero no em deja mirar los precios, al darle a la tienda dice que la web no existe :(

1 respuesta
gonya707

#7 Tienen el link mal o algo. El bueno es este

https://www.tindie.com/products/logicalzero/gamby-arduino-retro-gaming-shield/

1 respuesta
Jastro

#8 Gracias! joder me planteo pillarme uno, pero para mi es la primera vez que hago esto.

¿Que es lo que se necesita para programar en esto?

1 respuesta
gonya707

#9 Hombre, los pines que tiene estan pensados para hacerlos coincidir con un Arduino, pero con cualquiera de las placas que he puesto en #1 te valdría.

Al estar pensado para arduino lo mas logico seria usar un Arduino o un MSP430 programado con Energia (el lenguaje es exactamente el mismo). A partir de ahi añadir las librerias que te dan y leer un poco la referencia para ver las funciones ya implementadas.

Si no recuerdo mal en la web hay un zip con 3 juegos completamente hechos como ejemplo

2 1 respuesta
Jastro

#10 Gracias, le echare un vistazo D:

Fyn4r

Yo para comprar todo tipo de trastos arduino compatibles tiro de dealextreme, hay un poco de todo y bueno, calidad made in china pero oye xD

Drhaegar

A favoritos de cabeza, cuando termine los exámenes le echo un ojo. Siempre me había llamado mucho la atención pero nunca me lo había tomado en serio, now is the time.

intelntl

Me encanta la electronica y tengo mi placa arduino uno, pero nunca sé que hacer con ella

Leinz

gran aporte, en q acabe examenes a ver si empiezo a hacer algo interesante con mi arduino

r2d2rigo

Añado que para los que penseis que el C de Arduino es demasiado hardcore, existe Netduino que viene a ser parecido pero programmable en C# con el .NET Micro Framework. Ademas, es compatible con la mayoria de shields existentes.

#1 hace tiempo que hice un prototipo de interfaz HID por USB con un Arduino Nano al que se le flasheo un firmware custom para que fuese standalone. Ahora me gustaria transformarlo en un hardware lo mas simple y barato posible ensamblado por mi mismo. Alguna idea de por donde comenzar?

1 respuesta
gonya707

#16 el C de arduino demasiado hardcore? XD es una broma no?

Llamame lerdo pero no estoy seguro de entender lo que quieres.

3
B

Pillo sitio, buen hilo!

B

Mola, yo tengo PICs de Microchip y no sé qué hacer con ellos aún xD.

Kb

lo más que he hecho ha sido un cronómetro, algo así (fue en el 2000 y no saqué foto)

lo recuerdo mucho más ordenado y mejor visualmente que eso

1 1 respuesta
B

¡Qué currado el post dios! Me ha encantado =)

En la universidad nos enseñan a programa con Pickit3 igual me llevo uno a casa de gratis porque es bastante sencillo de programar, usamos PIC16F88, y de compilador usamos el MPLAB que no sé si es una aplicación específica del PICkit3. La verdad es que es muy chulo, estamos haciendo una mano robótica que juega a piedra-papel-tijeras contigo controlando motores paso a paso.

1 respuesta
gonya707

#21 sip, MPLAB es la alternativa a CCS PIC, yo prefiero CCS PIC por sencillez y por trabajar a un nivel algo más alto, el lenguaje de MPLAB es demasiado C plano para mi, de hecho me recuerda mucho al lenguaje del MSP430

1 respuesta
B

#22 ¿Me puedes explicar la diferencia entre mplab xc8 xc16 xc32? quiero descargarmelo para hacer tonterias pero no entiendo bien, en la uni nos dijeron que era gratis. Eso igual es MPLAB X a secas y los otros serán de pago ¿No? ¿Es el número de patillas del microcontrolador?

#23 Gracias =)

1 respuesta
gonya707

#23 No son los pines pero casi, son los bits del bus de direcciones, 8, 16 o 32 bits.

El PIC16F88 es de 8 bit por ejemplo

B

A favoritos! Tengo un arduino en casa y no he trasteado casi nada con el por estar en otros proyectos (programación y trasteando con una raspberry pi), pero a ver si cuando vaya acabando lo que tengo pendiente retomo la plaquita :).

Por cierto, #1, no he visto por aí arriba tessel.io , esta placa seguro sumará mucha gente a la escene, el concepto de hardware for developers llama mucho, además con js que es una pasada, espero hacerme con una cuando salga.

Un saludo!

#26

En eso estoy de acuerdo, de hecho a mi me gusta programar a bajo nivel, pero por ejemplo soy un fanboy de python y me encanta trastear con el en absolutamente para todo, independientemente de que en ocasiones pueda verme limitado al tocar hardware porque a través de una sóla librería y sin excesivo soporte detras no puedes tocar todo y se tenga que tirar de ctypes (Digo por ejemplo, lo que tengo probado con el arduino). Pero independientemente de eso, el marketing puede atraer a gente que no sepa programación a bajo nivel (gente de diseño web que sepan js o que vienen de un fp y sólo dan java y algun lenguaje de scripting), o gente autodidacta que empieza con lenguajes más amigables que los de bajo nivel, por eso lo comentaba, porque mola bastante el concepto y a mi, personalmente, me encantará probarla y ver que posibilidades ofrece.

Edito 2: En cuanto al precio, tienes razón, hay alternativas más baratas y algunos como yo por simplemente probar no nos importe pagar, pero mucha parte de la scene no pagará lo que vale. Pero, lo que he dicho antes, el marketing, puede ser que atraiga gente que de programación a bajo nivel no tenga ni idea pero le molaría tocar hardware.

3 respuestas
gonya707

#25 Un compañero de carrera me dijo una vez que deberian prohibir programar microcontroladores en cosa que no sean C o derivados de C. Lenguajes como python, javascript, etc no son para nada adecuados para aplicaciones de hardware, y si la excusa es por "aprovechar un lenguaje que ya he aprendido" no tiene mucho sentido ya que todos los desarrolladores de software saben C.

Vamos que no lo veo tan revolucionario, ya ha habido otras intentonas de llevar los microcontroladores a otros lenguajes y no conozco ni uno que haya tenido exito. Ademas habrá que ver sobre qué precio se mueve. Teniendo una placa MSP a 10$ la competencia puede ser feroz.

1 respuesta
gonya707

#25 pues quiza te interese ver esto: http://micropython.org/

1 respuesta
seridb

#25 Si en 4 meses que tengo empresa he aprendido algo de hardware (soy de rama de informatica), es que los microcontroladores aunque tengan lenguajes interpretados estilo javascript/python (arduino se puede hacer con JS) es que en C funcionan mucho mejor, tienes mas memoria para meter mas codigo y al limitar los tipos a cosas cerradas (Por ejemplo usar unsigned int para numeros etc).

Igualmente si quieres tirar por JS tienes esto: https://github.com/rwaldron/johnny-five

1 respuesta
Thanat0s

#20 Eso está muy pero que muy ordenado, no te haces a la idea el lío de cables que teníamos yo y una compañera en nuestras prácticas.

pd: se me ha hecho la boca agua leyendo #1
Me encantó cuando programé el ARM en la uni, la verdad que bajar a tan bajo nivel y controlar todo mola mazo.

Fyn4r

Programar a tan bajo nivel sin un lenguaje de bajo nivel es como... no se xD

A ver si acabo los examenes y me llega un shield y pongo por aquí un mini proyecto en el que ando, por colaborar y eso jaja