TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: colotron en 03 de Agosto de 2016, 09:13:49

Título: Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 03 de Agosto de 2016, 09:13:49
Hola. Conocía el foro hace un tiempo pero me había registrado con una cuenta de correo que no use nunca y no pude recuperar el registro. Así que me registré de vuelta y vine a pescar audiencia.

Estoy haciendo mi primer intento de video-tutorial de programación de micros.
Va a ser una serie de videos que se llama Programateando (programación + mate, a la Argentina). Empiezo con la implementación de una interfaz de comandos por puerto serie. NO ES para gente que arranca desde cero, sino para alguien que ya se marchitó la cabeza haciendo algún programa sencillo, que lidió con que no le ande el programador, la placa, que el micro no ejecute código, etc.
Requerimientos para verlo diría que es saber lenguaje C (nivel básico al menos), y alguna herida de batalla tratando de hacer funcionar el programa en físico.
Estoy usando un msp430 launchpad con el msp430g2553, pero lo que estoy haciendo (salvando la programación de registros específicos del micro) debería ser aplicable a cualquier micro en general, no me centro tanto en el micro como en el proceso de desarrollo.

Estuve el Domingo grabando clips y de ahí en adelante a editar, todavía no termino de procesar lo que grabé el Domingo pero ya hay más de 1 hora de video, mejor ir publicando de a poco.

Estoy separando los videos por semana (Programateando #1 va a ser la 1ra semana, #2 la 2da, etc) para poder dividir los temas temporalmente y poder discutirlos por separado.

Playlist:
https://www.youtube.com/playlist?list=PLGL5AjNW8FqrC4nG78msLqIiTcxzeSBIO

Programateando #1. Presentación del proyecto CLI. Visión rápida de las herramientas utilizadas:

Programateando #1 - Verificando herramientas de desarrollo, led blink. Hacemos una verificación rápida y somera de las herramientas de desarrollo, con el nunca bien ponderado proyecto de hacer parpadear un led.

Programateando #1 - Planificando el proyecto. Hacemos una planificación muy básica y mínima del proyecto. El objetivo es obtener la primera tarea a desarrollar con un objetivo muy claro.

Programateando #1 - Eco por uart. Escribimos código muy básico para recibir/enviar un caracter por el puerto uart usando un ejemplo de código provisto por el fabricante.

Programateando #1 - Refactorizando. Luego de tener código que funciona, lo corregimos y estructuramos para que sea más legible y fácil de mantener.

Programateando #1 - Interrupciones, plantUML. ¿Por qué precisamos utilizar interrupciones para recibir texto por uart?. ¿Cómo cambia el flujo de programa?. Una presentación rápida de PlantUML. Actualizamos lista de tareas.

Programateando #1 - Implementando fifo (básica). Programamos una fifo para recibir los caracteres uart.Inicializamos estructura con macros. Convención de código John Carmack.

Programateando #1 - Fifo test, introduciendo código de test. Un primer test de la fifo. Escribimos código de test que se ejecuta dentro de la aplicación para determinar si cometimos algún error. Mini-crítica de IDEs (Eclipse, Arduino IDE, Code Blocks).

Escucho críticas, sugerencias, insultos  :D y cualquier otro feedback que crean oportuno para mejorar ésto que, seguramente, tendrá errores varios e irá mejorando a medida que tenga más práctica.
Saludos!!!.
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: MGLSOFT en 03 de Agosto de 2016, 09:18:23
Da error en Youtube, revisalo...
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 03 de Agosto de 2016, 10:00:04
Ups  :oops: gracias...
Este anda (por ahora):
https://www.youtube.com/playlist?list=PLGL5AjNW8FqrC4nG78msLqIiTcxzeSBIO
Parece que al agregar videos cambia el link de la lista?, no se.

Primero de la lista:
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 04 de Agosto de 2016, 08:35:17
Otro recién salido del horno, en este perdí un poco el orden de los temas y divagué más de la cuenta. En vista de eso en la descripción puse las marcas temporales de cada cosa


Todavía me faltan editar 2 más para dar por terminado el Programateando #1. Pero sarna con gusto no pica  :-)
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: KILLERJC en 04 de Agosto de 2016, 09:05:00
La interrupcion en los micros, al menos no conozco alguno que interrumpa la instruccion en curso, Lo que si hace es terminar de ejecutar la instruccion ( de ASM ) y procede a ir a la interrupcion. Tal ves te referiste a la instruccion de C, y yo me hice una historia.

Tambien pienso que hubiera estado bueno que separas la sintaxis para cada compilador, ya que lo tenias al frente. Con el compilador de TI, IAR, entre otros era una linea mas simple:

Código: C
  1. __interrupt void INTERRUPT_SOURCE(void)

Y como todo GCC la interrupcion se declara con el __attribute__

Es lo unico que tenia para decir :P

--------------

Una pregunta, comprando la placa de evaluacion MSP te da acceso a todas las funcionalidades del CCS y compilador de TI?, yo poseo una de TM4 y me permite todo tamaño de codigo y usar el compilador de TI ( aunque es ARM ), por eso pregunto, ya que veo que estas usando la sintaxis de GCC.
Mas que nada pregunto por que el MSP a pesar de todo sigue vigente, me refiero a que no es viejo sino que hay versioens nuevas con el core del MSP
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: CompSystems en 04 de Agosto de 2016, 10:04:43
Hola me interesa entrar con la plataforma de desarrollo de Texas Instrumets (TI), por motivos educativos, ya que una parte de la compañía TI esta enfocada en este mercado https://education.ti.com/en/us/home

hay un foro en francés que habla sobre conexión "TI LaunchPad MSP-EXP432P401R" con calculadoras TI-NSPIRE-CX-CAS y TI84

(https://i.imgur.com/M5vEXfXt.jpg)

(https://i.imgur.com/2r3n4Ort.png)

Enlaces: https://tiplanet.org/forum/viewtopic.php?p=206200&sid=40a1ba84c8a3cfa6eb8ccc5fb77912df#p206200

https://tiplanet.org/forum/viewtopic.php?p=206169&sid=40a1ba84c8a3cfa6eb8ccc5fb77912df#p206169
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 04 de Agosto de 2016, 10:36:55
La interrupcion en los micros, al menos no conozco alguno que interrumpa la instruccion en curso, Lo que si hace es terminar de ejecutar la instruccion ( de ASM ) y procede a ir a la interrupcion. Tal ves te referiste a la instruccion de C, y yo me hice una historia.

Es que tenes razon, yo me expresé mal. Quería explicarlo por arriba y a la pasada, por ahí fue demasiado. Después meto una aclaración en texto sobre impuesto.

Tambien pienso que hubiera estado bueno que separas la sintaxis para cada compilador, ya que lo tenias al frente. Con el compilador de TI, IAR, entre otros era una linea mas simple:

Código: C
  1. __interrupt void INTERRUPT_SOURCE(void)

Y como todo GCC la interrupcion se declara con el __attribute__

Es lo unico que tenia para decir :P
Sí... por ahora quería hacerlo para un compilador solo y en alguna otra oportunidad abordar las extensiones para hacerlo multiplataforma/multicompilador/multiplaca.

Una pregunta, comprando la placa de evaluacion MSP te da acceso a todas las funcionalidades del CCS y compilador de TI?, yo poseo una de TM4 y me permite todo tamaño de codigo y usar el compilador de TI ( aunque es ARM ), por eso pregunto, ya que veo que estas usando la sintaxis de GCC.
Mas que nada pregunto por que el MSP a pesar de todo sigue vigente, me refiero a que no es viejo sino que hay versioens nuevas con el core del MSP

La verdad, no sé. Yo tenía un par de launchpads que compre cuando estaban a U$S4  :D
El compilador para msp430 (16 bits) tenés:
 
También tengo un TM4C123G launchpad. Pasa que ahí está el compilador arm-none-eabi que en general soporta una variedad amplia de micros ARM de 32 bits (no solo de Texas).

Muchas gracias por el feedback!!!  :) , es la única prueba de que alguien lo vió, jajaja.
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 04 de Agosto de 2016, 10:47:55
Hola me interesa entrar con la plataforma de desarrollo de Texas Instrumets (TI), por motivos educativos, ya que una parte de la compañía TI esta enfocada en este mercado https://education.ti.com/en/us/home

hay un foro en francés que habla sobre conexión "TI LaunchPad MSP-EXP432P401R" con calculadoras TI-NSPIRE-CX-CAS y TI84

Hola, no conozco ese programa educativo. ¿Parece más orientado a programación de calculadoras?.
En temas educativos Texas Instruments tiene una presencia muy fuerte en USA, pero no tanto por acá (me parece).
Acá en Argentina yo me inicié con pics (2005, el tiempo pasa...), que junto con Motorola/Freescale/[inserte futuro nombre] eran las opciones más comunes, y te enviaban samples, y abusábamos de eso, etc...

Hoy por hoy para educación lo más inmediato es Arduino, porque para dar un curso de algunos meses no hay que perder el 80% del tiempo hablando de arquitectura/teoría y se puede empezar a teclear código casi de inmediato, y hasta enseñar C directamente sobre las placas.

De hecho hay un spin-off de Arduino para msp430 que es el proyecto Energía: http://energia.nu/

En fin, a lo mejor esa no era tu pregunta, y quizás ni siquiera preguntabas nada :lol:
Saludos.
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: CompSystems en 04 de Agosto de 2016, 23:01:25
TI education ofrece un software matemático avanzado que se instala tanto en calculadoras físicas como en PC y i-OS, pero recientemente agregaron comandos de comunicación para las tarjetas de TI, de esta manera se podrían crear aplicaciones interesantes pues se aprovecha el motor de calculo avanzado o CAS, para hacer cálculos complejos sin necesidad de programarlos en el microocntrolador, este "matrimonio" entre plataformas (maths-uctrl) puede ser interesante, TI tiene mucho dinero, esta invirtiendo en educación y en conjunto con la NASA
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 05 de Agosto de 2016, 14:00:34
Va saliendo uno nuevo...
Da para charlar la fifo. ¿Qué tipos de datos usar? (1 solo tipo de dato, puntero a void?), ¿punteros o indices?, ¿como llevar la cuenta?. Todas cosas que omito haciéndome el tonto, porque sino no avanzamos más  :)
Título: Re:Programando #1. Mi tutorial básico para programar embebidos en C
Publicado por: jhozate en 05 de Agosto de 2016, 14:54:27
Hola , que bueno que hayas arrancado el hilo y usando los micros de texas, lo seguiré de cerca
Yo aun soy muy nuevo , actualmente uso el launchpad del MSP430FR5739 con el CCS studio
Título: Re:Programando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 06 de Agosto de 2016, 20:23:19
Hola , que bueno que hayas arrancado el hilo y usando los micros de texas, lo seguiré de cerca
Yo aun soy muy nuevo , actualmente uso el launchpad del MSP430FR5739 con el CCS studio

Gracias jhozate!!!.
Sí... tenes un micro FRAM, ahí tenés para sacarle el jugo al bajo consumo; ideal para cosas que funcionen con pilas botón (así se cambia una pila cada 1 o 2 años en vez de cada 3 meses).
Ya voy a llegar a hablar algo de bajo consumo... pero esto toma tiempo, para procesar lo que grabo en 1 día estoy toda la semana  :lol:

Hablando de eso... acá viene el último de lo que grabé el Domingo pasado, ahora tengo que grabar, ahí vamos!!!  :mrgreen:
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: jhozate en 08 de Agosto de 2016, 09:30:07
Si de hecho, estoy trabajando en eso, he logrado poner al micro en el modo de bajo consumo LPM4.5 con un consumo de 7uA, aunque es bajo comparado con el consumo que estaba teniendo no he logrado el valor típico que dice la hoja de datos.

Seria bueno que en tu primer post pongas los links con el nombre del tutorial que estas llevando.

Saludos
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 08 de Agosto de 2016, 18:34:29
Si de hecho, estoy trabajando en eso, he logrado poner al micro en el modo de bajo consumo LPM4.5 con un consumo de 7uA, aunque es bajo comparado con el consumo que estaba teniendo no he logrado el valor típico que dice la hoja de datos.
¿En LPM4.5 casi como que lo único que lo puede despertar es una interrupción por pin externo no?. ¿Estás deshabilitando el supervisor de lado bajo SVSL? (https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/298276).

Seria bueno que en tu primer post pongas los links con el nombre del tutorial que estas llevando.
Saludos
De inmediato, es cierto, queda más ordenado con los videos al principio. ¿Quizás debería editar el primer mensaje cada vez que agrego un video?, ¿o las dos cosas? (aviso con una respuesta nueva que subí algo nuevo para reflotar el tema, y a la par edito el primer mensaje).
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: jhozate en 09 de Agosto de 2016, 10:40:38
si , ya he deshabilitado el SVS.
Bueno sera un tema que quizás podamos tocar luego en los tutoriales. Mientras tanto sigamos adelante
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: CompSystems en 22 de Agosto de 2016, 10:31:37
Hola, una sugerencia, por que no realizar los tutos con una plataforma de desarrollo mas común y accesible por cualquiera, como son los Arduinos
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: jhozate en 22 de Agosto de 2016, 11:48:46
Sobre Arduino hay mucho material en la red, sobre los Texas hay poco actualmente en el Foro.
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 22 de Agosto de 2016, 13:39:17
Hola, una sugerencia, por que no realizar los tutos con una plataforma de desarrollo mas común y accesible por cualquiera, como son los Arduinos

Estimado, mis disculpas por no contestar previamente.
Como decís, Arduino es mucho más accesible que los micros de Texas, por lo menos en Argentina seguro que lo es.
Y está en los planes portar el código a Arduino, pero uno de los motivos por el cual elegí esta plataforma es que el depurador ya viene integrado en la plaqueta, y el compilador y demás herramientas son gratuitas y abiertas.
Del lado de Arduino no hay un depurador abierto y accesible.
Del lado de los pics los compiladores solían tener limitaciones en cuanto a tamaño de código, o al menos faltos de optimizaciones, y si bien los pickit son accesibles para programar y depurar hay que comprarlos aparte.
Pero esto que digo respecto a pics y Arduinos quizás ya cambió, en su momento quería empezar a grabar algo y sinceramente, el launchpad msp430 era lo que tenía más a mano.
También estoy separando lo más posible lo que es manejo de hardware de la lógica para luego poder hacer el port más fácil.

Ayer termine de grabar clips para el Programateando #2 que estaré posteando cuando termine de editar, supongo que esta noche termino el 1er video. Esta vez es menos cantidad, como adelanto hablo del SASE 2016 que se hizo en Buenos Aires, repositorios (local y remoto), termino con los tests de la fifo (tenemos una versión de assert muy básica), y cerramos con una sesión de depuración.

Voy a hacer un tema aparte para no hacerlo 1 solo demasiado largo y que sea más fácil de comentar y discutir.

Gracias por el feedback!!!
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: elgarbe en 23 de Septiembre de 2016, 13:35:28
Va saliendo uno nuevo...
Da para charlar la fifo. ¿Qué tipos de datos usar? (1 solo tipo de dato, puntero a void?), ¿punteros o indices?, ¿como llevar la cuenta?. Todas cosas que omito haciéndome el tonto, porque sino no avanzamos más  :)

Una consulta, por que no usas los tipos uint16_t, int16_t etcetera? no se supone que son más portables?
Por el resto todo muy entretenido e interesante

saludos
Título: Re:Programateando #1. Mi tutorial básico para programar embebidos en C
Publicado por: colotron en 23 de Septiembre de 2016, 23:57:47

Una consulta, por que no usas los tipos uint16_t, int16_t etcetera? no se supone que son más portables?
Por el resto todo muy entretenido e interesante

saludos

Sí... yo me pregunto lo mismo. Quizás no quería meter más conceptos nuevos en el video. Además de todas formas iba a usar unsigned int (que después lo cambié a char :p ) por la cuestión de que quería que el código fuera sencillo y rápido. Un micro de 16 bits tiene un unsigned de 16 bits, uno de 8 tiene de 8, similarmente arm de 32.
Pero si pongo uint16_t por ejemplo (el tipo "natural" para los msp430) eso un micro de 8 bits tiene que hacer 2 accesos de memoria para escribirlo, y uno de 32 si le pongo int16_t tiene que hacer extensión de signo y es más ineficiente.
Por eso con unsigned me evito extensiones de signo, y tamaño int hago que el micro use lo que más le convenga (en un pic serán 8 bits, en un msp430 16, y en un arm 32).

Al hablar de esos tipos quería extenderme a stdint.h en general,  también suelo usar los tipos _fast (uint_fast8_t, uint_fast16_t...) que por ejemplo para un micro de 16 bits un dato uint_fast8_t va a ocupar 16 bits, porque ese es el tamaño de registro que maneja más rápido (en un ciclo de acceso). Pero eso mismo para un pic sería de 8 bits.

Seguro voy a volver sobre eso cuando quiera hacer que la fifo trabaje sin un tipo de datos específico (quiero que maneje chars, strings, punteros, enteros...), que también quiero sacarle el campo .count para hacerlo thread-safe y en fin... ya vamos a llegar a eso :)
La Fifo va a volver a estar en escena, probablemente más de una vez.

Muchas gracias elgarbe por el feedback ;)