Programacion de Arduino/AVR en C

Hola.. Nuevo en el foro, y también en el mundo de Arduino.

Les cuento, hace un par de meses me compre mi primer Arduino, y conseguí hacer un par de cosas interesantes. Por ejemplo recupere un viejo cartel de leds de 80x7 (El cual usaba un puerto serie DB9, y de por si, habían perdido el programa de control), y también "hice" un pequeño control de temperaturas para un galpón de pollos, controlando los ventiladores, cortinas y riego, censando la temperatura con dos LM35, muestra la temperatura actual con un display 2x20 (Actual, Maxima, Minima, y reset), y tiene posibilidad de configurar la temperatura ideal, y hasta puede comunicarle la temperatura actual a un programa echo en gambas que muestra un grafico con el histórico.

Este ultimo, hasta ahora "fue" solo un experimento, y aun me falta resolver un par de cosas. Digo "fue", porque tuve que ponerme las pilas con la facu, y estuve con poco tiempo asi que por ahora abandone todo tipo de desarrollo. y digo que es un experimento, porque CREO que funciona como tiene que funcionar (y de echo me base en control de temperaturas de los galpones que ya tiene mi viejo), pero nunca hice la placa real para controlar los motores trifacicos, y tambien debo buscar una buena alternativa a los LM35 que varían "mucho" cuando encienden estos motores, y tambien tengo problemas con los cables de 20 metros. je. (Se escuchan sugerencias!-)

Bueno.. A nuestro tema..
Parte por la que abandone estos desarrollos, es que me di cuenta que los programas son muy grandes!!! (aunque todavia no llene ningun arduino.. jajaja) y leyendo varias paginas, pude confirmar que tambien es en mucho mas lento (40/60 veces) que usando C puro.
y bueno.. Le puedo confimar que soy un enfermito de C. Je. Nunca aprendi C++, ni java, etc.. pase de programar en Visual Basic a programar todos los puertos de la computadora en C para la facu, y al dia de hoy suelo progamar aplicaciones para linux con GTK y C, asi que estoy bastante acostumbrado al lenguaje.

Recién estoy empezando a usar la placa Arduino programandola en C, y me gustaria hacer y traducir algunos tutoriales sobre esto que me gustaria compartir, ya que no encontre informacion de esto en castellano.

En definitiva escribo, para ver a cuanta gente le intereza el tema, y si pueden ayudarme en lo que sea. =)

Por hoy les paso una traduccion (Muy literal, asi que agradeceria sugerencias para los terminos) de esta pagina http://www.javiervalcarce.eu/wiki/Program_Arduino_with_AVR-GCC, que me parecio interesante porque al menos habla de como leer los fusibles, y hace una introducción basica al uso de avrdude.

Esto es lo primero que traduje, pero en realidad empece a programar con esta otra pagina How to start using AvrStudio, C code and Arduino | HeKilledMyWire, y este es el tipo de tutorial que me gustaria hacer, aunque quisiera mejorarlo/actualizarlo y formatearlo tipo libro. Esta orientado a utilizar AVR Studio, que es un exelente ide, y es proporcionado de forma gratuita por la misma atmel.

¿A alguien les intereza??? ¿Vale la pena?

Saludos.
Matias.

Programación de Arduino con AVR-GCC.pdf (50.2 KB)

Programación de Arduino con AVR-GCC.odt (15.7 KB)

A mi me interesa bastante el tema, de hecho yo estoy siguiendo tutoriales de extreme electronics, pero parece que la web ha desaparecido, menos mal que me los copié !! te dejo alguno de ejemplo si alguien los quiero los subo al megaupload

son muy gráficos y nada toston. Igual te sirven también de referencia.

Un saludo y ánimo!

EDITO: acabo de poder acceder a la web:

adc.pdf (193 KB)

Si ya la estás programando en C

vale me ha costado pero al ver los ejemplos he entendido de que hablas. Hablas de programar en C puro y no usar la estructura (setup,loop) ni las funciones sino programar directamente los registros. Me parece interesante, pero he de reconocer que es más fácil programar como lo hace arduino. La ventaja que tiene lo que comentas es que se entiende más el funcionamiento del micro y que al entenderlo podemos modificar el timer, interrupciones... que con las funciones de arduino son más trasparentes.

Esto me lleva a una discusión que tuve hace tiempo sobre las ventajas de programar en asambles en vez de c. Porque en asambler aprendes mucho mejor y controlas mucho más el funcionamiento de del micro que con c. ¿Pero es necesario conocer todo al detalle? en general la respuesta es no ya que lo que nos interesa es programar lo más rápidamente-simplemente posible y que funcione. Arduino para lo que no conocemos la estructura interna del micro es una maravilla porque es muy trasparente, pero como ahora quiero empezar a tocar las tripas del micro me parece muy interesante lo que comentas. Otra solución es mirar el datasheet pero suelo preferir más ir al dentista que empezar a descifrar el datasheet. XD

Yo hace un tiempo escribí un pequeño manual sobre las entradas y salidas digitales

2 Teoria - Registro de Puertos.doc (220 KB)

me parece muy interesante lo que se propone aquí. Seria algo asi como Arduino para avanzados, de forma que nos metemos un poco mas en el tema del micro.
una idea que se me ocurre es coger algunos de los ejemplos que vienen con arduino y desarrollar exactamente el mismo programa pero en C puro (no se si se llama así).
que os parece? por ejemplo el blink clasico, y todos estos programas sencillos.

Yo algo de eso hicé hace tiempo: AVR, no toco todos los módulos pero si algunos.

La idea de Sergegsx me parece estupenda, hacer una colección con los ejemplos básicos.

Lo mejor si quereis aprender es mirarse el core de Arduino (entender que hace un digitalWrite,millis, pinMode,Serial.begin...etc).
Podeis ver todas las funciones como están implementadas en C!! Es un buen primer paso.
Así podeis ver como usan macros, las funciones, como hacen el buffer serie, y un largo etc. Hay teneis puro C orientado a micros atmel!!

:wink:

jaja...
Disculpen si costo leer todo lo que escribi.. :wink:

Bueno. Para que quede claro, mi idea es hacer un par de tutoriales sobre la programacion de micros Atmel en C, partiendo desde las placa arduino. Lo que habia pensado es reunir los tutoriales basicos de Arduino (http://arduino.cc/es/Tutorial/HomePage) y presentarlos en un mismo tutorial con sus esquivalentes en C.

Para el que dude, la programacion en C vs Arduino, como siempre es cuestion de gustos, pero les puedo asegurar que la mayoria de las funciones de arduino, pueden reemplazarce por solo un par de lineas de codigo en C. Es igual de simple, pera la diferencia obvio es que hay que comprender el funcionamiento de los registros. Es cuestion de interiorizarce un poco. tampoco es tan complicado.
Yo tambien suponia que Arduino era solo una capa fina de software, pero aun no me queda muy claro, porque los programas son mas grandes. Por ejemplo, el resultado del blink de arduino es "Binary sketch size: 1024 bytes", y haciendo lo mismo en C, pesa 172bytes. Una gran diferencia.. ¿No?

El IDE de atmel, AVR Studio, es muy facil instalarlo, esta lleno de ejemplos, y tambien se pueden usar librerias para controlar los display por ejemplo.

Gracias por los links.
Por lo pronto seguire estudiando un poco mas y seguire traduciondo los articulos en http://hekilledmywire.wordpress.com/ que me parecen bastante claros. Primero los voy a traducir tal cual se encuentran, como para retribuircelos al autor, y luego me gustaria reunir la mayor cantidad de informacion y lograr un buen tutorial.

Saludos.

Sergegsx:
me parece muy interesante lo que se propone aquí. Seria algo asi como Arduino para avanzados, de forma que nos metemos un poco mas en el tema del micro.
una idea que se me ocurre es coger algunos de los ejemplos que vienen con arduino y desarrollar exactamente el mismo programa pero en C puro (no se si se llama así).
que os parece? por ejemplo el blink clasico, y todos estos programas sencillos.

seria la bomba y muy didactico.

Esa es una manera pero es dura y requiere un trabajo individual muy grande. Yo no estoy muy puesto pero me da la sensacion que las funciones de arduino tienen codigo basura que despistan su comprension.

Personalmente no me parece una manera dura mirarse el core, pero puede que la sea.... es algo personal...

Un buen libro: http://www.smileymicros.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=26

Otro link con ejemplos => piconomic.co.za

amigo, la paguina: http://www.micro2c.com/categoria-Atmel-AVR-c2p0.html me ha ayudado mucho, les recomiendo mirar antes los videotutoriales de PIC porque ahi explica mucho de C y con los videotutoriales de Atmel se mete directamente a la la hoja de datos ya que se supone que han visto los videos de PIC. gran esfuerzo la del creador de la pagina y al parecer tiene planeado empezar con videotutoriales de Arduino!

Saludos y animo con los tutoriales que somos muchos los que lo vamos a aprovechar y agradecer!

Parece interesante, pero me pide registrarmeeeee!! !!! :S jajaja.. el fin de semana trato de verlos..

Lo de mirar el core, no es tan complicado, y puede ser muy util, pero quiero conseguir algo donde se pueda buscar informacion directamente, con ejemplos cortos y claros, sin tener que destripar codigos largos. =)

ionhs:
Yo hace un tiempo escribí un pequeño manual sobre las entradas y salidas digitales

Muy bueno.. Recien lo pude ver, y para entender los ejemplos basicos, no hace falta explicar nada mas. Ya te pido permiso, para usarlo cuando empiece con el tutorial.. =)

aero_yo:
A mi me interesa bastante el tema, de hecho yo estoy siguiendo tutoriales de extreme electronics, http://extremeelectronics.co.in/avr-tutorials/part-i-introduction/

Recien pude entrar. Anda muy intermitente la pagina.. Despues los voy a ver bien..

Sergegsx:
me parece muy interesante lo que se propone aquí. Seria algo asi como Arduino para avanzados, de forma que nos metemos un poco mas en el tema del micro.
una idea que se me ocurre es coger algunos de los ejemplos que vienen con arduino y desarrollar exactamente el mismo programa pero en C puro (no se si se llama así).
que os parece? por ejemplo el blink clasico, y todos estos programas sencillos.

Exactamente eso espero hacer.. y veo que hay interes en esto, asi que me dan las pilas suficiente para encararlo..

Gracias x todo.
Saludos.

matiasdelellis:

ionhs:
Yo hace un tiempo escribí un pequeño manual sobre las entradas y salidas digitales

Muy bueno.. Recien lo pude ver, y para entender los ejemplos basicos, no hace falta explicar nada mas. Ya te pido permiso, para usarlo cuando empiece con el tutorial.. =)

Úsalo sin problemas, que para eso lo subí. SAlu2

acabo de ver que en el blog este han puesto este tutorial sobre los puertos (en ingles =() pero tiene buena pinta http://tronixstuff.wordpress.com/2011/10/22/tutorial-arduino-port-manipulation/

Una buena introducción a C para sistemas embebidos (aunque no específicamente AVR) => Tte Intro Embedded C | PDF
Se puede descargar el pdf de http://www.tte-systems.com/books/pttes (“Introduction to Embedded C”)

(en inglés)

Bueno.. Me cag* escribiendo y cuando fui a publicarlo de dijo que no podia cargar mas de 1.9 megas, y asi perdi todo lo que escirbi.. :frowning:

Pero basicamente le decia que:
Si lo que quieren es aprender mas a fondo sobre la programacion de microcontroladores les recomiendo el libro "Microcontroladores 8051" de MacKenzie. Obvio se refiere a la arquitectura 8051, que es muy diferente a la AVR, pero pronto se daran cuenta que la forma de utilizarlo es la misma sea cual sea el micro. Tendran sus diferencias (Diferentes registros, o cambira el paginado de la memoria, etc), pero la forma de inicalizar cada uno de los puertos es la misma, y las estrucuras de control no variara de micro a micro. De verdad el libro tiene muy buenos ejemplos y esta orientado a C, apoyandoce continuamente de las hojas de datos del micro. (Cosa que es muy impartante)

Bueno.. A lo que me interesa.
Le paso la primer traduccion del blog que les comente. Este corresponde al articulo "How to start using AvrStudio, C code and Arduino" (How to start using AvrStudio, C code and Arduino | HeKilledMyWire)

Este cubre la descarga e instalacion del IDE AVR Studio, y desarrolla el ejemplo basico Blik, explicando minimamente la metodologia de trabajo sobre el IDE, y como cargar al programa en el micro usando la linea de comandos. Si lo leen se convencerán que no es mucho mas complicado programnarlo en C, que usando arduino. Y tambien comprobaran que el codigo resultante es casi 10 veces mas chico. ¿Es una buena ventaja no?

Vuelvo a repetirles. Es un traducción bastante literal. Sin ningun tipo de modificaciones que me gustaria hacer. Como por ejemplo orientarlo al AVR Studio 5 que salio hace un tiempo. Escucho criticas y sugerencias. :wink:

Bueno, esto podria corresponderce al primer capitulo de los tutoriales que quiero escribir. Me gustaria agregar una mejor explicacion del maejo de registros (Aca entra tu articulo ionhs. :)) y una mejor explicacion de los diferentes metodos de carga de los programas (Aca entra el tuto que traduje la semana pasada.) ¿Le parece bien?

Saludos.

p.d.: Por lo pronto, voy a seguir reuniendo informacion, y aprendiendo todo lo que pueda. Recien en el verano (de Argentina) me voy a dedicar a escribir los tutos reuniendo la mejor informacion que encuentre.

How to start using AvrStudio, C code and Arduino (24-10-2011).pdf (805 KB)

Que bueno, lo que mas me gusta es que se puede aprovechar mas el micro; ejemplo el codigo mas pequeño y eso por ende le da mas velocidad al codigo realizado. Lo otro seria que se puede programar los fuse y de esa manera proteger el codigo cosa que en la plataforma arduino no lo he visto ya que es de usu free pero en oportunidades es recomendable proteger sus codigos para que terceros no se los clonen.

Saludos y estudiare mas de cerca el post en cuestion y mas contando con su ayuda.

No tengo tiempo para probarlo pero cuando tenga un hueco decente lo pruebo, ya lo tengo guarda a buen recaudo. Gracias por el documento matiasdelellis.

Vuelvo a repetirles. Es un traducción bastante literal. Sin ningun tipo de modificaciones que me gustaria hacer. Como por ejemplo orientarlo al AVR Studio 5 que salio hace un tiempo. Escucho criticas y sugerencias.

Yo no soy muy partidario de las traducciones muy literales, suelo hacer traducciones libres y si veo que puedo añadir alguna cosa interesante más lo añado. Por cierto que el documento que puse es una recopilación de 3 documentos, filtrando lo que no me gustaba y añadiendo cosas de mi cosecha.

Salu2

Tampoco me gustan la traducciones literales, por eso insisto en aclararlo. Pero desgraciadamente, hay gente que se ofende si tomas sus articulos prestados sin mencionarlos, o por hacer obras derivadas (y tampoco especifican alguna licencia).. Por eso, y porque realmente no tengo mucho tiempo, prefiero traducirlos tal cual. Pido disculpas si queda algo muy confuso, hay unas pocas partes donde realmente no entendi completamente lo que quizo decir (Es muy liberal al escribir), y trate de respetar en mayor medida la idea del autor.

Me gustaria hacer millones de cambios, por eso, por lo pronto lo traduzco así, y se los paso al autor original. Por ahora que el haga lo que quiera, y cuando yo tenga mas tiempo juntare la mejor informacion/conocimientos que tenga, y lo formateare a mi gusto. :slight_smile:

Les paso otra traducción, que cubre los mismos temas que el documento que vos compartiste (Realmente no agrega nada nuevo, pero queria tenerlo):

La próxima traducción seguramente sera sobre "Operaciones matemáticas a nivel de bits y operadores lógicos". Un tema muy aburrido, ampliamente explicado tambien, pero es muyyyyyy importante saberlo.

Saludos.
Matias.

p.d: La semana proxima, arrancamos con cosas mas interesantes, como ADC y temporizadores. :wink:

Manipulación directa de puertos. Usando los puertos digitales. (25-10-2011).pdf (214 KB)

Hola gente..
Hoy les paso algo mas interesante. Un tuto para usar las clasicas pantallas HItachi 2x16. :slight_smile:

Una de las grandes ventajas de Arduino es la cantidad de librerias precreadas (como la liquidcristal), que nos permiten utilizar elementos externos sin saber exactamente nisiquiera como funcionan. :wink:

Bueno.. Al final del tutorial, obtendran las funciones lcd_init(), lcd_xy(), lcd_puts(), y lcd_clear(), muy similar a las usadas en arduino. y optimizadas para los LCD de 2x16, por lo que el codigo se simplifica apliamente, y es muy reducido. Igualmente.. Al final del posteo original van a encontrar el codigo para usar cualquier tamaño de pantalla.

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296

Lo reconosco, antes de llegar a esto, hay cosas mucho mas importantes para explicar!!! !, pero este tutorial es muy simple, y seguro lo entenderan.

Saludos.
Matias.

Tutorial para usar LCD HD44780 y similares (2-11-2011).odt (18 KB)

Tutorial para usar LCD HD44780 y similares (2-11-2011).pdf (60.2 KB)