You are on page 1of 38

Lenguaje c para microcontroladores pic atmega

Programacin orientada a objetos

2.1 LENGUAJES DE PROGRAMACIN


AnteriorSiguiente
MIKROELEKTRONIKA

El microcontrolador ejecuta el programa cargado en la memoria Flash.


Esto se denomina el cdigo ejecutable y est compuesto por una serie
de ceros y unos, aparentemente sin significado. Dependiendo de la
arquitectura del microcontrolador, el cdigo binario est compuesto por
palabras de 12, 14 o 16 bits de anchura. Cada palabra se interpreta por
la CPU como una instruccin a ser ejecutada durante el funcionamiento
del microcontrolador. Todas las instrucciones que el microcontrolador
puede reconocer y ejecutar se les denominan colectivamente Conjunto
de instrucciones. Como es ms fcil trabajar con el sistema de
numeracin hexadecimal, el cdigo ejecutable se representa con
frecuencia como una serie de los nmeros hexadecimales denominada
cdigo Hex. En los microcontroladores PIC con las palabras de programa
de 14 bits de anchura, el conjunto de instrucciones tiene 35 instrucciones
diferentes.

LENGUAJE ENSAMBLADOR
Como el proceso de escribir un cdigo ejecutable era considerablemente
arduo, en consecuencia fue creado el primer lenguaje de programacin
denominado ensamblador (ASM). Siguiendo la sintaxis bsica del

ensamblador, era ms fcil escribir y comprender el cdigo. Las


instrucciones en ensamblador consisten en las abreviaturas con
significado y a cada instruccin corresponde una localidad de memoria.
Un programa denominado ensamblador compila (traduce) las
instrucciones del lenguaje ensamblador a cdigo mquina (cdigo
binario).

HEste programa compila instruccin a instruccin sin optimizacin. Como


permite controlar en detalle todos los procesos puestos en marcha dentro
del chip, este lenguaje de programacin todava sigue siendo popular.
Ventajas de lenguajes de programacin de alto nivel
A pesar de todos los lados buenos, el lenguaje ensamblador tiene
algunas desventajas:

Incluso una sola operacin en el programa escrito en ensamblador


consiste en muchas instrucciones, hacindolo muy largo y difcil de
manejar.

Cada tipo de microcontrolador tiene su propio conjunto de


instrucciones que un programador tiene que conocer para escribir un
programa

Un programador tiene que conocer el hardware del


microcontrolador para escribir un programa
Programa escrito en C (El mismo programa compilado al cdigo
ensamblador):

Los lenguajes de programacin de alto nivel (Basic, Pascal, C etc.)


fueron creados con el propsito de superar las desventajas del
ensamblador. En lenguajes de programacin de alto nivel varias
instrucciones en ensamblador se sustituyen por una sentencia. El
programador ya no tiene que conocer el conjunto de instrucciones o
caractersticas del hardware del microcontrolador utilizado. Ya no es
posible conocer exactamente cmo se ejecuta cada sentencia, de todas
formas ya no importa. Aunque siempre se puede insertar en el programa
una secuencia escrita en ensamblador.
Si alguna vez ha escrito un programa para un microcontrolador PIC en
lenguaje ensamblador, probablemente sepa que la arquitectura RISC
carece de algunas instrucciones. Por ejemplo, no hay instruccin
apropiada para multiplicar dos nmeros. Por supuesto, para cada
problema hay una solucin y ste no es una excepcin gracias a la
aritmtica que permite realizar las operaciones complejas al
descomponerlas en un gran nmero operaciones ms simples. En este
caso, la multiplicacin se puede sustituir con facilidad por adicin
sucesiva (a x b = a + a + a + + a). Ya estamos en el comienzo de una
historia muy larga No hay que preocuparse al utilizar uno de estos

lenguajes de programacin de alto nivel como es C, porque el compilador


encontrar automticamente la solucin a ste problema y otros
similares. Para multiplicar los nmeros a y b, basta con escribir a*b.
Lenguaje C
El lenguaje C dispone de todas las ventajas de un lenguaje de
programacin de alto nivel (anteriormente descritas) y le permite realizar
algunas operaciones tanto sobre los bytes como sobre los bits
(operaciones lgicas, desplazamiento etc.). Las caractersticas de C
pueden ser muy tiles al programar los microcontroladores. Adems, C
est estandarizado (el estndar ANSI), es muy portable, as que el mismo
cdigo se puede utilizar muchas veces en diferentes proyectos. Lo que lo
hace accesible para cualquiera que conozca este lenguaje sin reparar en
el propsito de uso del microcontrolador. C es un lenguaje compilado, lo
que significa que los archivos fuentes que contienen el cdigo C se
traducen a lenguaje mquina por el compilador. Todas estas
caractersticas hicieron al C uno de los lenguajes de programacin ms
populares.

La figura anterior es un ejemplo general de lo que sucede durante la


compilacin de programa de un lenguaje de programacin de alto nivel a
bajo nivel.

urso para aprender a programar en lenguaje C utilizando un compilador para PIC, en


concreto el PCW compiler de la casa CCS. Cursos sobre C en Internet a miles, pero
todos los que yo he visto estn realizados sobre compiladores de propsito general,
como Vicual C++ de Microsoft Builder C++ de Borlan, sin duda son excelentes
compiladores que nos permiten realizar aplicaciones para
ordenadores de escritorio tanto en C como en C++ (la versin orientada a objetos de
C), pero no sirven para programar PIC, es decir con el ejecutable que generan al
compilar no se puede programar un Microcontrolador.
Lo habitual hasta ahora es que los usuarios que se inician en este apasionante mundo
de la programacin de Microcontroladores, sea de la marca que sea, primero lo hacan
utilizando el lenguaje ensamblador, especifico no solo ya para cada marca de
microcontrolador sino para cada modelo, ya que hay que conocer perfectamente los
recursos de cada Microcontrolador (Nmero de puertos de Entrada/Salida Relojes
internos, etc. ). Al principio de los tiempos de estos dispositivos esto era obligatorio ya
que los recursos de memoria y velocidad de procesamiento no eran muy grandes y
haba que optimizar el cdigo al mximo, esto implicaba que haba que utilizar a la
fuerza un lenguaje de programacin de bajo nivel que bien utilizado explotara los
recursos de estos dispositivos sin desperdiciar memoria y velocidad de procesamiento,
pero al igual que ha ocurrido con los ordenadores personales las prestaciones de estos
dispositivos ha ido creciendo exponencialmente con el tiempo, siendo ya perfectamente
factible el utilizar un lenguaje de alto nivel para programar estos dispositivos y
aprovecharnos de las ventajas de portabilidad que ofrecen este tipo de lenguajes, de
esta manera por ejemplo podemos hacer un programa para un PIC en concreto y
utilizarlo en otro de mayores prestaciones sin modificar apenas nada del cdigo fuente.
Quien puede sacar provecho de este curso?. Este curso es para ti si:
Has programado PIC en Ensamblador y quieres hacerlo en un lenguaje de
alto nivel como el C.
No has programado nunca Microcontroladores pero conoces el lenguaje de
programacin C de haberlo utilizado para otros propsitos.
No has programado nunca un PIC en Ensamblador, ni conoces ningn
lenguaje de alto nivel como el C. Es decir, no tienes ni idea de
Microcontroladores ni de programacin (Esto es posible porque el curso va ha
empezar desde cero es decir con el clsico Hola Mundo con el que empiezan
todos los libros de iniciacin a la programacin.
Bueno alguno pensar que para aprender a programar en C vale cualquier compilador
de uso general
y lo que realmente interesa es saber las instrucciones de C que tengo que utilizar para
configurar por ejemplo un puerto como entrada o salida, o que cdigo tengo que utilizar
para utilizar los convertidores A/D que incorporan ya casi todos los
PIC, indudablemente ese es el propsito final de este curso y para ello
paralelamente a l va haber otro donde se van a ver aplicaciones prcticas. Pero hay
que tener en cuenta que los compiladores para Microcontroladores son especficos para
estos dispositivos embebidos y no cumplen con el Estndar ANSI C al 100 %, por lo que
cuando ests programando lo ms seguro es que te vayas dando cuenta que una
funcin que en el C estndar funciona perfectamente aqu te da un error al compilar.
Adems te irs quedando con mucho cdigo que lo has probado y sabes que te funciona
perfectamente, cuando tengas que hacer una aplicacin prctica no tendrs la duda si
puedes usar una determinada estructura en tu programa si es posible utilizar punteros
o no y como hacerlo, porque ya lo sabrs a la vez que has ido aprendiendo el lenguaje
de programacin y no solo eso, te irs familiarizando con las instrucciones especficas
del compilador: de que herramientas dispone, sus funciones precompiladas, su sistema
de depuracin de errores, etc.
Que herramientas voy a necesitar para realizar el curso?.
El compilador CCS seguro, vaya es de pago ya empezamos con problemas te puedes
bajar una versin de Evaluacin por 30 das desde aqu:
http://www.ccsinfo.com/ccsfreedemo.php

Despus de rellenar el formulario te descargas el programa de instalacin y lo instalas


en tu ordenador como un programa ms de Windows, aunque tienes que tener en
cuenta que solo podrs programar un pequeo conjunto de PIC de cada familia, otro
inconveniente es que tienes que estar conectado a Internet para que te funcione si no te
aparecer esta ventanita poco amigable:

Otra limitacin es que el tamao del programa no puede superar los 2K de memoria,
aunque para los ejemplos que vamos a hacer aqu te sobra. Bien ya tenemos
solucionado el tema del compilador, bien sea por que con la demo nos apaamos o
porque tengo un amigo cojonudo que me va ha prestar uno con licencia para que pueda
realizar el curso (je,je..
).
Bien ya tengo el compilador y puedo empezar a programar y a crear mis .HEX (para el
que no lo sepa es el archivo que tenemos que cargar en nuestro PIC para que funcione).
Todo esto es muy elemental para el que lo sabe, pero como dije al principio este curso
est pensado tambin para el que no tiene ni idea de programar microcontroladores. As
es que sigamos.
Una vez que tenemos nuestro .HEX tendremos que comprobar que funciona realmente
para ello tenemos dos opciones:
Montar nuestro circuito con todos sus componentes, programar el PIC con un
programador comercial como el PICSTART de Microchip o con uno de los
muchos que hay en Internet que sirven perfectamente para empezar a
programar estos dispositivos.
Utilizar un programa de simulacin electrnica como Proteus que tiene la
ventaja de disponer de una extensa biblioteca de microcontroladores PIC
junto con los componentes auxiliares que normalmente utilizan estos
dispositivos: leds, pantallas LCD, teclados, memorias, etc.

Bien nosotros utilizaremos la segunda opcin, aunque en una prctica veremos como
hacerlo de la primera forma.
La versin de evaluacin de Proteus te la puedes descargar desde aqu:
http://www.labcenter.co.uk/download/prodemo_download.cfm
Claro que tiene limitaciones, sino no sera una demo, la principal es que no podemos
guardar nuestros
trabajos y la segunda es que no lleva incorporado muchas de las libreras dinmicas
necesarias
para realizar la simulacin de algunos microcontrloladores. Mira a ver si el amigo que te
dejo el compilador te puede dejar tambin una licencia para este magnfico Simulador.
Nota: en este sitio est prohibido el mostrar facilitar enlaces a lugares de descarga de
dudosa reputacin. Lo digo tambien para que se tenga en cuenta en el foro que
prximamente estar a vuestra disposicin y donde podremos exponer nuestras dudas
experiencias sobre este tema y sobre otros que irn saliendo.
Otra cosa que quiero aclarar es que el curso va a ser todo lo prctico que pueda y la
forma de proceder ser
la siguiente: ir mostrando uno varios ejemplos de cada tema y posteriormente har
una Explicacin de los mismos. Yo no se vosotros pero yo cada vez que he querido
aprender algo nuevo lo primero que he hecho a sido mirar los ejemplos, despus
vosotros tendris que comprobar que lo que he dicho es cierto y que el ejemplo compila
y funciona sin errores.
Para facilitar la navegacin el prximo da presentar el ndice de los tems que va a
tratar el curso
Aunque puede que lo vaya modificando segn vallamos avanzando.
Un saludo y hasta el prximo da.

Arduino
En este artculo se detectaron varios problemas, por favor, edtalo para
mejorarlo:

Necesita ser wikificado conforme a las convenciones de estilo de


Wikipedia.

Necesita mejorar su estructura.

Su redaccin no sigue las convenciones de estilo.

Podra ser difcil de entender para lectores interesados en el tema.

Estas deficiencias fueron encontradas el 27 de abril de 2016.

Arduino (US)
Genuino

Genuino, denominacin internacional fuera de los EE.UU.

Tipo

Placa
computadora(microcontrolador de placasimp
le)

CPU

AVR, ARM Cortex, Intel Quark

Memoria

SRAM

Capacidad de

Memoria Flash, EEPROM

almacenamient
o

Pgina web

www.arduino.cc

[editar datos en Wikidata]

Arduino (en EEUU, Genuino a nivel internacional) es una compaa de hardware libre y
una comunidad tecnolgica que disea y manufactura placas computadora de desarrollo
de hardware y software, compuesta respectivamente por circuitos impresos que integran
un microcontrolador y un entorno de desarrollo (IDE), en donde se programa cada placa.
Arduino se enfoca en acercar y facilitar el uso de la electrnica y programacin de
sistemas embebidos en proyectos multidisciplinarios1 2 . Toda la plataforma, tanto para sus
componentes de hardware como de software, son liberados con licencia de cdigo
abierto que permite libertad de acceso a ellos3 .
El hardware consiste en una placa de circuito impreso con un microcontrolador,
usualmente Atmel AVR, puertos digitales y analgicos de entrada/salida,4 , los cuales
pueden conectarse a placas de expansin (shields), que amplan las caractersticas de
funcionamiento de la placa Arduino. Asimismo, posee un puerto de conexin USB desde
donde se puede alimentar la placa y establecer comunicacin con el computador.
Por otro lado, el software consiste en un entorno de desarrollo (IDE) basado en el entorno
de Processing y lenguaje de programacin basado en Wiring, as como en el cargador de
arranque (bootloader) que es ejecutado en la placa.4 El microcontrolador de la placa se
programa mediante un computador, usando una comunicacin serial mediante un
convertidor de niveles RS-232 a TTL serial.
La primera placa Arduino fue introducida en 2005, ofreciendo un bajo costo y facilidad de
uso para novatos y profesionales. Buscaba desarrollar proyectos interactivos con su
entorno mediante el uso de actuadores y sensores. A partir de octubre de 2012, se
incorporaron nuevos modelos de placas de desarrollo que usan microcontroladores Cortex
M3, ARM de 32 bits,5 que coexisten con los originales modelos que integran
microcontroladores AVR de 8 bits. ARM y AVR no son plataformas compatibles en cuanto a
su arquitectura y por lo que tampoco lo es su set de instrucciones, pero se pueden
programar y compilar bajo el IDE predeterminado de Arduino sin ningn cambio.
Las placas Arduino estn disponibles de dos formas: ensambladas o en forma de
kits "Hazlo t mismo" (por sus siglas en ingls "DIY"). Los esquemas de diseo del

Hardware estn disponibles bajo licencia Libre, con lo que se permite que cualquier
persona pueda crear su propia placa Arduino sin necesidad de comprar una prefabricada.
Adafruit Industries estim a mediados del ao 2011 que, alrededor de 300,000 placas
Arduino haban sido producidas comercialmente y en el ao 2013 estim que alrededor de
700.000 placas oficiales de la empresa Arduino estaban en manos de los usuarios.
Arduino se puede utilizar para desarrollar objetos interactivos autnomos o puede ser
conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data, etc. Una
tendencia tecnolgica es utilizar Arduino como tarjeta de adquisicin de datos
desarrollando interfaces en software como JAVA, Visual Basic y LabVIEW 6 . Las placas se
pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede
descargar gratuitamente.
El proyecto Arduino recibi una mencin honorfica en la categora de Comunidades
Digitales en el Prix Ars Electrnica de 2006 7 8 9 .

"Arduino Uno" Revisin 3

Placa Arduino RS23210

ndice
[ocultar]

1Historia

2Hardware

3Equipo de desarrollo

4Aplicaciones

5Esquema de conexiones
5.1Entradas y salidas

6Especificaciones

7Lenguaje de programacin Arduino


7.1Funciones bsicas y operadores

7.1.1Sintaxis bsica

7.1.2Estructuras de control

7.1.3Variables

7.1.3.1Constantes

7.1.3.2Tipos de datos

7.1.3.3Conversin entre tipos

7.1.3.4Cualificadores y mbito de las variables

7.1.3.5Utilidades
7.1.4Funciones bsicas

7.1.4.1E/S digital

7.1.4.2E/S analgica

7.1.4.3E/S avanzada

7.1.4.4Tiempo

7.1.4.5Matemticas

7.1.4.6Trigonometra

7.1.4.7Nmeros aleatorios

7.1.4.8Bits y Bytes

7.1.4.9Interrupciones externas

7.1.4.10Interrupciones

7.1.4.11Comunicacin por puerto serie

7.1.5Manipulacin de puertos

7.2AVR Libc

7.2.1Interrupciones

7.2.2Temporizadores

7.2.3Manipulacin de puertos

7.2.4Establecer Bits en variables


7.3Diferencias con Processing

7.3.1Arreglos

7.3.2Impresin de cadenas
7.4Ejemplo sencillo de programacin en Arduino

8Bibliotecas en Arduino
o

8.1Serial

8.2EEPROM

8.3Ethernet

8.4Firmata

8.5LiquidCrystal

8.6Servo

8.7SoftwareSerial

8.8Stepper

8.9Wire

8.10Creacin de bibliotecas

8.10.1Ejemplo de biblioteca

9Ejemplos de Cdigo

10Instalacin en diferentes entornos


o

10.1Windows

10.2GNU/Linux
11Otras interfaces de programacin

11.1Pduino

11.2Minibloq

11.3Physical Etoys

12Vase tambin

13Referencias
o

13.1Bibliografa
14Enlaces de externos

Historia[editar]
Arduino se inici en el ao 2006 como un proyecto para estudiantes en el Instituto IVREA,
en Ivrea (Italia). En ese tiempo, los estudiantes usaban el microcontrolador BASIC Stamp,
cuyo coste era de 100 dlares estadounidenses, lo que se consideraba demasiado costoso
para ellos. Por aquella poca, uno de los fundadores de Arduino, Massimo Banzi, daba
clases en Ivrea.11
El nombre del proyecto viene del nombre del Bar di Re Arduino (Bar del Rey Arduino)
donde Massimo Banzi pasaba algunas horas. El rey Arduino fue rey de Italia entre los
aos 1002 y 1014. En la creacin de este proyecto contribuy el estudiante colombiano
Hernando Barragn, quien desarroll la tarjeta electrnica Wiring, el lenguaje de
programacin y la plataforma de desarrollo.12 Una vez concluida dicha plataforma, los
investigadores trabajaron para hacerlo ms ligero, ms econmico y disponible para la
comunidad de cdigo abierto (hardware y cdigo abierto). El instituto finalmente cerr sus
puertas, as que los investigadores, entre ellos el espaol David Cuartielles, promovieron la
idea.11 Banzi afirmara aos ms tarde, que el proyecto nunca surgi como una idea de
negocio, sino como una necesidad de subsistir ante el inminente cierre del Instituto de
diseo Interactivo IVREA. Es decir, que al crear un producto de hardware abierto, este no
podra ser embargado.
Posteriormente, Google colabor en el desarrollo del Kit Android ADK (Accesory
Development Kit), una placa Arduino capaz de comunicarse directamente con telfonos
mviles inteligentes bajo el sistema operativo Android para que el telfono controle luces,
motores y sensores conectados de Arduino.13 14
Para la produccin en serie de la primera versin se tom en cuenta que el coste no fuera
mayor de 30 euros, que fuera ensamblado en una placa de color azul, deba ser Plug and
Play y que trabajara con todas las plataformas informticas tales
como MacOSX, Windows y GNU/Linux. Las primeras 300 unidades se las dieron a los
alumnos del Instituto IVREA, con el fin de que las probaran y empezaran a disear sus
primeros prototipos.
En el ao 2005, se incorpor al equipo el profesor Tom Igoe,12 que haba trabajado en
computacin fsica, despus de que se enterara del mismo a travs de Internet. Igoe
ofreci su apoyo para desarrollar el proyecto a gran escala y hacer los contactos para
distribuir las tarjetas en territorio estadounidense. En la feria Maker Fair de 2011 se
present la primera placa Arduino 32 bit para realizar tareas ms pesadas. 15

Hardware[editar]
Los modelos de Arduino se categorizan en placas de desarrollo, placas de expansin
(shields), kits, accesorios e impresoras 3d .
Placas
Arduino Galileo16 , Arduino Uno, Arduino Leonardo, Arduino Due, Arduino Yn,
Arduino Tre (En Desarrollo), Arduino Zero, Arduino Micro, Arduino Esplora, Arduino
Mega ADK, Arduino Ethernet, Arduino Mega 2560, Arduino Robot, Arduino Mini,
Arduino Nano, LilyPad Arduino Simple, LilyPad Arduino SimpleSnap, LilyPad
Arduino, LilyPad Arduino USB, Arduino Pro Mini, Arduino Fio, Arduino Pro, Arduino
MKR1000/Genuino MKR1000, Arduino MICRO/Genuino MICRO, Arduino
101/Genuino 101, Arduino Gemma.
Placas de expansin (shields)
Arduino GSM Shield, Arduino Ethernet Shield, Arduino WiFi Shield, Arduino
Wireless SD Shield, Arduino USB Host Shield, Arduino Motor Shield, Arduino
Wireless Proto Shield, Arduino Proto Shield.
Kits
The Arduino Starter Kit, Arduino Materia 101.
Accesorios
TFT LCD Screen, USB/Serial Light Adapter, Arduino ISP, Mini USB/Serial Adapter.
Impresoras 3d
Arduino Materia 101.

Equipo de desarrollo[editar]
El ncleo del equipo de desarrollo de Arduino est formado
por Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca
Martino, David Mellis y Nicholas Zambetti.

Aplicaciones[editar]
La plataforma Arduino ha sido usada como base en diversas
aplicaciones electrnicas:

Xoscillo: Osciloscopio de cdigo abierto17

Equipo cientfico para investigaciones18

Arduinome: Un dispositivo controlador MIDI19

OBDuino: un econmetro que usa una interfaz de diagnstico a


bordo que se halla en los automviles modernos

SCA-ino: Sistema de cmputo automotriz capaz de monitorear


sensores como el TPS, el MAP y el 02S y controlar actuadores
automotrices como la bobina de ignicin, la vlvula IAC y
aceleradores electrnicos

Humane Reader: dispositivo electrnico de bajo coste con salida


de seal de TV que puede manejar una biblioteca de 5000 ttulos
en una tarjeta microSD20

The Humane PC: equipo que usa un mdulo Arduino para emular
un computador personal, con un monitor de televisin y un teclado
para computadora21

Ardupilot: software y hardware de aeronaves no tripuladas

ArduinoPhone: un telfono mvil construido sobre un mdulo


Arduino22 23

Mquinas de control numrico por computadora (CNC)

Open Theremn Uno: Versin digital de hardware libre del


instrumento Theremn

Impresoras 3D

Esquema de conexiones[editar]
Entradas y salidas[editar]
Poniendo de ejemplo al mdulo Diecimila, este consta de 14 entradas
digitales configurables como entradas y/o salidas que operan a 5
voltios. Cada contacto puede proporcionar o recibir como mximo 40
mA. Los contactos 3, 5, 6, 9, 10 y 11 pueden proporcionar una salida
PWM (Pulse Width Modulation). Si se conecta cualquier cosa a los
contactos 0 y 1, eso interferir con la comunicacin USB. Diecimila
tambin tiene 6 entradas analgicas que proporcionan una resolucin
de 10 bits. Por defecto, aceptan de 0 hasta 5 voltios (aunque es
posible cambiar el nivel ms alto utilizando el contacto Aref y algn
cdigo de bajo nivel).

Especificaciones[editar]
Las especificaciones de los distintos modelos de placas Arduino se
resumen en la siguiente tabla:
Volt
aje
Microcont
Modelo
de
rolador
entr
ada

Volt
Frecu
Entra
Interfa
aje
Entradas/
P
Mem
encia
das
UA
Cargad
de
del
salidas
W
oria
de
anal
RT
or
program
siste
digitales
M
flash
reloj
gicas
acin
ma

Arduino AT91SAM 584MH


3,3V
54*
Due
3X8E
12V
z

12

12 4

512K
Due
b

Nativa
USB

Arduino ATmega3 75V


Leonardo 2U4
12V

16MH
20*
z

12

32Kb

Leonard Nativa
o
USB

Arduino ATmega3 75V


Uno - R3 28
12V

16MH
14
z

32Kb

USB va
Optiboo
ATMega
t
6U2

RedBoar ATmega3 75V


d
28
15V

16MH
14
z

32Kb

Optiboo USB
t
va FTD

16MH 14

32Kb Optiboo USB va

Arduino

ATmega3 7-

5V

Uno SMD
(desconti 28
nuado)
Arduino
Uno ATmega3
(desconti 28
nuado)
Arduino
Duemilan
ATmega3
ove
28
(desconti
nuado)
Arduino
Bluetoot
ATmega3
h
28
(desconti
nuado)

75V
12V

16MH
14
z

32Kb

USB va
Optiboo
ATMega
t
U2

75V
12V

16MH
14
z

32Kb

Atmega USB va
BOOT FTDI

1,25V
5,5V

16MH
14
z

32Kb

Atmega Serial B
BOOT uetooth

Cabece
a
Atmega
32Kb
compati
BOOT
le con
FTDI

Cabece
a
Atmega
32Kb
compati
BOOT
le con
FTDI

Arduino
Pro
ATmega3 3,35
3,3V 8MHz 14
3.3V/8MH 28
-12V
z
Arduino
Pro
ATmega3 5 5V
5V/16MH 28
12V
z

16MH
14
z

ATMega
U2

12V

Ethernet
Pro
ATmega3 75V
(desconti 28
12V
nuado)

16MH
14
z

Cabece
a
Atmega
32Kb
compati
BOOT
le con
FTDI

Arduino
ATmega2 7Mega
5V
560
12V
2560 R3

16MH
54
z

16

14 4

USB va
256K STK500
ATMega
b
v2
6U2

75V
12V

16MH
54
z

16

14 4

USB va
256K STK500
ATMega
b
v2
U2

75V
12V

16MH
54
z

16

14 4

128K STK500 USB va


b
v2
FTDI

Arduino
Mega
ATmega2
2560
560
(desconti
nuado)
Arduino
Mega ATmega1
(desconti 280
nuado)

Mega Pro ATmega2 3,33,3V 8MHz 54


3.3V 560
12V

16

14 4

Cabece
a
256K STK500
compati
b
v2
le con
FTDI

Mega Pro
ATmega2 55V

16

14 4

256K STK500 Cabece

5V

16MH 54

560

12V

v2

a
compati
le con
FTDI

Arduino
Mini 04 ATmega3
7-9V 5V
(desconti 28
nuado)

16MH
14
z

32Kb

Atmega Cabece
BOOT a Serial

Arduino ATmega3
7-9V 5V
Mini 05 28

16MH
14
z

32Kb

Atmega Cabece
BOOT a Serial

Cabece
a
Atmega
32Kb
compati
BOOT
le con
FTDI

Cabece
a
Atmega
32Kb
compati
BOOT
le con
FTDI

Cabece
a
compati
Atmega le con
32Kb
BOOT FTDI o
inalmb
ca va
XBee1

16

14 4

Cabece
a
256K STK500
compati
b
v2
le con
FTDI

16MH
12
z

32Kb

DiskLoa Nativa
der
USB

3,35
3,3V 8MHz 12
-12V

32Kb

DiskLoa Nativa
der
USB

Cabece
a
Atmega
32Kb
compati
BOOT
le con
FTDI

Arduino
Pro Mini ATmega3 3,35
3,3V 8MHz 14
3.3V/8MH 28
-12V
z
Arduino
Pro Mini ATmega3 5 5V
5V/16MH 28
12V
z

16MH
14
z

Arduino ATmega3 3,35


3,3V 8MHz 14
Fio
28P
-12V

Mega Pro ATmega2 3,33,3V 8MHz 54


Mini 3.3V 560
12V
Pro Micro
ATmega3
5V/16MH
2U4
z
Pro Micro
ATmega3
3.3V/8MH
2U4
z

55V
12V

LilyPad
Arduino ATmega3 2,73,3V 8MHz 14
328 Main 28
5,5V
Board
LilyPad
ATmega3 2,7- 3,3V 8MHz 9
Arduino
28
5,5V
Simple
Board

02

32Kb Atmega Cabece


BOOT a
compati
le con

FTDI
Los modelos Arduino Diecimila, Arduino Duemilanove y Arduino Mega
estn basados en los microcontroladores ATmega168, ATmega328 y
ATmega1280
ATmega168

Voltaje
operativo

ATmega328

ATmega1280

5V

5V

5V

Voltaje de
entrada
recomendado

7-12 V

7-12 V

7-12 V

Voltaje de
entrada lmite

6-20 V

6-20 V

6-20 V

Entradas y
salidas
digitales

14 (6
proporcionan PWM)

14 (6
proporcionan PWM)

54 (14
proporcionan PWM)

Entradas
analgicas

16

Intensidad de
corriente

40 mA

40 mA

40 mA

Memoria Flash

16KB (2KB
reservados para el
bootloader)

32KB (2KB
reservados para el
bootloader)

128KB (4KB
reservados para el
bootloader)

1 KB

2 KB

8 KB

512 bytes

1 KB

4 KB

16 MHz

16 MHz

16 MHz

SRAM

EEPROM

Frecuencia de
reloj

Lenguaje de programacin Arduino[editar]

Este artculo o seccin contiene una gua o manual,


contenido no enciclopdico que debera estar
en Wikilibros [buscar en Wikilibros]

La plataforma Arduino se programa mediante el uso de un lenguaje


propio basado en el lenguaje de programacin de alto
nivel Processing que es similar a C++.

Funciones bsicas y operadores[editar]


Arduino est basado en C y soporta todas las funciones del estndar
C y algunas de C++.24 A continuacin se muestra un resumen con la
estructura y sintaxis del lenguaje Arduino:
Sintaxis bsica[editar]

Delimitadores:;, {}

Comentarios: //, /* */

Cabeceras: #define, #include

Operadores aritmticos: +, -, *, /, %

Asignacin: =

Operadores de comparacin: ==, !=, <, >, <=, >=

Operadores Booleanos: &&, ||, !

Operadores de acceso a punteros: *, &

Operadores de bits: &, |, ^, ~, <<, >>

Operadores compuestos:

Incremento y decremento de variables: ++, --

Asignacin y operacin: +=, -=, *=, /=, &=, |=

Estructuras de control[editar]

Condicionales: if, if...else, switch case

Bucles: for, while, do. while

Bifurcaciones y saltos: break, continue, return, goto

Variables[editar]
En cuanto al tratamiento de las variables tambin comparte un gran
parecido con el lenguaje C.
Constantes[editar]

HIGH/LOW: representan los niveles alto y bajo de las seales de


entrada y salida. Los niveles altos son aquellos de 3 voltios o
ms.

INPUT/OUTPUT: entrada o salida.

false (falso): Seal que representa al cero lgico. A diferencia de


las seales HIGH/LOW, su nombre se escribe en letra minscula.

true (verdadero): Seal cuya definicin es ms amplia que la


de false. Cualquier nmero entero diferente de cero es
"verdadero", segn el lgebra de Boole, como en el caso de -200,
-1 o 1. Si es cero, es "falso".

Tipos de datos[editar]

void, boolean, char, unsigned char, byte, int, unsigned int, word,
long, unsigned long, float, double, string, array.

Conversin entre tipos[editar]


Estas funciones reciben como argumento una variable de cualquier
tipo y devuelven una variable convertida en el tipo deseado.

char(), byte(), int(), word(), long(), float()

Cualificadores y mbito de las variables[editar]

static, volatile, const.

Utilidades[editar]

sizeof()

Funciones bsicas[editar]
E/S digital[editar]

pinMode(pin, modo).

digitalWrite(pin, valor).

int digitalRead(pin).

E/S analgica[editar]

analogReference(tipo)

int analogRead(pin)

analogWrite(pin, valor)

E/S avanzada[editar]

shiftOut(dataPin, clockPin, bitOrder, valor)

unsigned long pulseIn(pin, valor)

Tiempo[editar]

unsigned long millis()

unsigned long micros()

delay(ms)

delayMicroseconds(microsegundos)

Matemticas[editar]

min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow,


fromHigh, toLow, toHigh), pow(base, exponente), sqrt(x)

Trigonometra[editar]

sin(rad), cos(rad), tan(rad)

Nmeros aleatorios[editar]

randomSeed(semilla), long random(mx), long random(mn, mx)

Bits y Bytes[editar]

lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit()

Interrupciones externas[editar]

attachInterrupt(interrupcin, funcin, modo)

detachInterrupt(interrupcin)

Interrupciones[editar]

interrupts(), noInterrupts()

Comunicacin por puerto serie[editar]


Las funciones de manejo del puerto serie deben ir precedidas de la
palabra "Serial" aunque no necesitan ninguna declaracin en la
cabecera del programa. Por esto se consideran funciones base del
lenguaje.25 Estas son las funciones para transmisin serial:

begin(), available(), read(), flush(), print(), println(), write()

Manipulacin de puertos[editar]
Los registros de puertos permiten la manipulacin a ms bajo nivel y
de forma ms rpida de los contactos de entrada/salida del
microcontrolador de las placas Arduino.26 Los contactos elctricos de
las placas Arduino estn repartidos entre los registros B(0-7), C
(analgicos) y D(8-13). Mediante estas variables ser observado y
modificado su estado:

DDR[B/C/D]: Data Direction Register (o direccin del registro de


datos) del puerto B, C D. Es una variable de Lectura/Escritura
que sirve para especificar cuales contactos sern usados como
entrada y salida.

PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C


D. Es una variable de Lectura/Escritura.

PIN[B/C/D]: Input Pins Register (o registro de pines de entrada)


del puerto B, C D. Variable de slo lectura.

Por ejemplo, para especificar los contactos 9 a 13 como salidas y el 8


como entrada (puesto que el puerto D usa los pines de la placa
Arduino 8 al 13 digitales) bastara utilizar la siguiente asignacin:
DDRD = B11111110;

Como se ha podido comprobar, el conocimiento del lenguaje C,


permite la programacin en Arduino debido a la similitud entre este y
el lenguaje nativo del proyecto, lo que implica el aprendizaje de
algunas funciones especficas de que dispone el lenguaje del proyecto
para manejar los diferentes parmetros. Se pueden construir
aplicaciones de cierta complejidad sin necesidad de muchos
conceptos previos.

AVR Libc[editar]
Los programas compilados con Arduino (salvo en las placas con
CorteX M3) se enlazan contra AVR Libc24 por lo que tienen acceso a
algunas de sus funciones. AVR Libc es un proyecto de software libre
con el objetivo de proporcionar una biblioteca C de alta calidad para
utilizarse con el compilador GCC sobre microcontroladores Atmel
AVR. Se compone de 3 partes:

avr-binutils

avr-gcc

avr-libc

La mayora del lenguaje de programacin Arduino est escrita con


constantes y funciones de AVR y ciertas funcionalidades slo se
pueden obtener haciendo uso de AVR.27
Interrupciones[editar]
Las seales de interrupcin son las siguientes:

cli(): desactiva las interrupciones globales

sei(): activa las interrupciones

Esto afectar al temporizador y a la comunicacin serial. La funcin


delayMicroseconds() desactiva las interrupciones cuando se ejecuta.
Temporizadores[editar]
La funcin delayMicroseconds() crea el menor retardo posible del
lenguaje Arduino que ronda los 2s. Para retardos ms pequeos se
debe utilizar la llamada de ensamblador 'nop' (no operacin). Cada
sentencia 'nop' se ejecutar en un ciclo de mquina (16 MHz) de
aproximadamente 62,5ns.
Manipulacin de puertos[editar]

La manipulacin de puertos con cdigo AVR es ms rpida que utilizar


la funcin digitalWrite() de Arduino.
Establecer Bits en variables[editar]
cbi y sbi son mecanismos estndar (AVR) para establecer o limpiar
bits en PORT y otras variables.

Diferencias con Processing[editar]


La sintaxis del lenguaje de programacin Arduino es una versin
simplificada de C/C++ y tiene algunas diferencias respecto de
Processing.28 29 Debido a que Arduino est basado en C/C++ mientras
que Processing se basa en Java, existen varias diferencias en cuanto
a la sintaxis de ambos lenguajes y el modo en que se programa:
Arreglos[editar]
Arduino

Processing

int bar[8];

int[] bar = new int[8];

bar[0] = 1;

bar[0] = 1;

int foo[] = { 0, 1, 2 };
int foo[] = { 0, 1, 2 };

o bien
int[] foo = { 0, 1, 2 };

Impresin de cadenas[editar]
Arduino

Processing

Serial.println("hello world");

println("hello world");

int i = 5;

int i = 5;

Serial.println(i);

println(i);

int i = 5;
Serial.print("i = ");

int i="5";

Serial.print(i);

println("i =" + i);

Serial.println();

Ejemplo sencillo de programacin en Arduino[editar]

El primer paso antes de comprobar que la instalacin es correcta y


empezar a trabajar con Arduino, es usar ejemplos prcticos que
vienen disponibles con el dispositivo. Se recomienda abrir el ejemplo
led_blink el cual crea una intermitencia por segundo en un led
conectado en el pin 13.
El cdigo necesario es el siguiente:
# define LED_PIN 13
void setup () {
// Activado del contacto 13 para salida digital
pinMode (LED_PIN, OUTPUT);
}
// Bucle infinito
void loop () {
// Encendido del diodo LED enviando una seal alta
digitalWrite (LED_PIN, HIGH);
// Tiempo de espera de 1 segundo (1000 ms)
delay (1000);
// Apagado del diodo LED enviando una seal baja.
digitalWrite (LED_PIN, LOW);
// Tiempo de espera de 1 segundo
delay (1000);
}

Bibliotecas en Arduino[editar]
Las bibliotecas estndar que ofrece Arduino son las siguientes:30

Serial[editar]
Lectura y escritura por el puerto serie.

EEPROM[editar]
Lectura y escritura en el almacenamiento permanente. 31

read(), write()

Ethernet[editar]
Conexin a Internet mediante Arduino Ethernet Shield. Puede
funcionar como servidor que acepta peticiones remotas o como
cliente. Se permiten hasta cuatro conexiones simultneas.32 Los
comandos usados son los siguientes:

Servidor: Server(), begin(), available(), write(), print(), println()

Cliente: Client(), connected(), connect(), write(), print(), println(),


available(), read(), flush(), stop()

Firmata[editar]

Es una biblioteca de comunicacin con aplicaciones informticas


utilizando el protocolo estndar del puerto serie. 33

LiquidCrystal[editar]
Control de LCDs con chipset Hitachi HD44780 o compatibles.34 La
biblioteca soporta los modos de 4 y 8 bits.

Servo[editar]
Biblioteca para el control de servo motores.35 A partir de la versin
0017 de Arduino la biblioteca soporta hasta 12 motores en la mayora
de las placas Arduino y 48 en la Arduino Mega. Estos son los
comandos usados:

attach(), write(), writeMicroseconds(), read(), attached(), detach()

SoftwareSerial[editar]
Comunicacin serie en contactos digitales.36 Por defecto Arduino
incluye comunicacin slo en los contactos 0 y 1 pero gracias a esta
biblioteca puede realizarse esta comunicacin con los restantes.

Stepper[editar]
Control de motores paso a paso unipolares o bipolares.37

Stepper(steps, pin1, pin2), Stepper(steps, pin1, pin2, pin3, pin4),


setSpeed(rpm), step(steps)

Wire[editar]
Envo y recepcin de datos sobre una red de dispositivos o sensores
mediante Two Wire Interface (TWI/I2C).38
Las bibliotecas Matrix y Sprite de Wiring son totalmente compatibles
con Arduino y sirven para manejo de matrices de diodos LED.
Tambin se ofrece informacin sobre diversas bibliotecas
desarrolladas por diversos colaboradores que permiten realizar
muchas tareas.

Creacin de bibliotecas[editar]
Los usuarios de Arduino tienen la posibilidad de escribir sus propias
bibliotecas.39 Ello permite disponer de cdigo que puede reutilizarse
en otros proyectos, mantener el cdigo fuente principal separado de
las bibliotecas y la organizacin de los programas construidos es ms
clara.
Ejemplo de biblioteca[editar]
El siguiente ejemplo permite el envo de caracteres mediante
el cdigo Morse:
Se crea el archivo Morse.h que incluye la definicin de la clase Morse
que tiene 3 funciones: un constructor (Morse()), una funcin para
enviar 1 punto (dot()) y una funcin para enviar una raya (dash()). La
variable _pin permite indicar el contacto a usar.
/*
Morse.h - Biblioteca para el envo de Cdigo Morse.

Creado por David A. Mellis, el 2 de noviembre de


2007.
Liberado al dominio pblico.
*/
# ifndef Morse_h
# define Morse_h
# include "WProgram.h"
class Morse
{
public:
Morse(int pin);
void dot();
void dash();
private:
int _pin;
};
# endif

Debe ser creado el archivo Morse.cpp con el cdigo, es decir con la


implementacin de los mtodos declarados:
/*
Morse.cpp - Biblioteca para el envo de Cdigo
Morse.
Creado por David A. Mellis, el 2 de noviembre de
2007.
Liberado al dominio pblico.
*/
# include "WProgram.h"
# include "Morse.h"
Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}
void Morse::dot()

{
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}

La biblioteca creada as puede ser usada mediante el comando


#include. Si se desea enviar una peticin de auxilio SOSpor el
contacto 13 bastara con llamar a Morse(13) y ejecutar la siguiente
secuencia:
morse.dot(); morse.dot(); morse.dot();
morse.dash(); morse.dash(); morse.dash();
morse.dot(); morse.dot(); morse.dot();

Ejemplos de Cdigo[editar]
La pgina de Arduino cuenta con una serie de ejemplos para
comenzar a entender su funcionamiento, con componentes base tales
como Pantallas, LEDs, Potenciometros, etc.
Ejemplo de parpadeo de LED
/*
Blink
Turns on an LED on for one second, then off for one
second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:


void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH);

// turn the LED on (HIGH

is the voltage level)


delay(1000);

// wait for a second

digitalWrite(led, LOW);

// turn the LED off by

making the voltage LOW


delay(1000);

// wait for a second

Ejemplo de lectura de Potenciometro


/*
ReadAnalogVoltage
Reads an analog input on pin 0, converts it to
voltage, and prints the result to the serial monitor.
Attach the center pin of a potentiometer to pin A0,
and the outside pins to +5V and ground.
This example code is in the public domain.
*/
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per
second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// Convert the analog reading (which goes from 0 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);

// print out the value you read:


Serial.println(voltage);
}

ejemplo hacer contar un display de 7 segmentos de 1 a 3 cada 1


segundo, llamando a una funcin
void setup(){

// configuramos los pines de salida

donde conectaremos los pines con una resistencia en


serie al display de 7 segmentos
pinMode(34, OUTPUT);

// a

pinMode(36, OUTPUT);

// b

pinMode(38, OUTPUT);

// c

pinMode(40, OUTPUT);

// d

pinMode(42, OUTPUT);

//e

pinMode(44, OUTPUT);

//f

pinMode(46, OUTPUT);

//g

}
void display (int a, int b, int c, int d, int e, int
f, int g)// Funcin del display
{
digitalWrite (34,a);
digitalWrite (36,b);
digitalWrite (38,c);
digitalWrite (40,d);
digitalWrite (42,e);
digitalWrite (44,f);
digitalWrite (46,g);
}
void loop(){
display (0,1,1,0,0,0,0); //

mostrar 1 en el

display
delay(1000);
display (1,1,0,1,1,0,1); //

mostrar 2 en el display

delay(1000);
display (1,1,1,1,0,0,1); //
delay(1000);

mostrar 3 en el display

// por Laiolo Santiago

Instalacin en diferentes entornos[editar]

Interfaz del entorno de desarrollo Arduino en el Sistema Operativo


Windows.

Windows[editar]
Los pasos a seguir son los siguientes:

Descargar las versiones ms reciente de Java Runtime


Enviroment (J2RE) y del IDE Arduino.

Instalar los controladores FTDI USB, con la placa Arduino


conectada.

Ejecutar el IDE Arduino para abrir la interfaz y configurar el puerto


USB donde est conectada la placa.

GNU/Linux[editar]

Interfaz del entorno de desarrollo Arduino S.O. GNU/Linux.

Para instalar Arduino en un sistema GNU/Linux necesitamos los


siguientes programas para resolver las dependencias:

Sun java runtime, jre.

avr-gcc, compilador para la familia de microcontroladores avr de


atmel.

avr-libc, libc del compilador avr-gcc.

En algunas distribuciones conviene desinstalar, si no es necesario, el


programa "brltty" que permite el acceso al terminal a personas
invidentes. Para concluir, se descarga el framework de Arduino, se
descomprime y ejecuta.

Otras interfaces de programacin[editar]


Es posible comunicar una aplicacin que corra sobre Arduino con
otros dispositivos que corran otros lenguajes de programacin y
aplicaciones populares,40 debido a que Arduino usa la transmisin
serial de datos, la cul es soportada por la mayora de los lenguajes
que se mencionan a continuacin. Y para los que no soportan el
formato serie de forma nativa, es posible utilizar software
intermediario que traduzca los mensajes enviados por ambas partes
para permitir una comunicacin fluida. Algunos ejemplos de lenguajes
son:

3DVIA Virtools: aplicaciones interactivas y de tiempo real.

Adobe Director

BlitzMax (con acceso restringido)

C++ (mediante libSerial o en Windows)

C#

Cocoa/Objective-C (para Mac OS X)

Flash (mediante ActionScript)

Gambas

Isadora (Interactividad audiovisual en tiempo real)

Instant Reality (X3D)

Java

Liberlab (software de medicin y experimentacin)

Mathematica

Matlab

MaxMSP: Entorno grfico de programacin para aplicaciones


musicales, de audio y multimedia

Minibloq: Entorno grfico de programacin, corre tambin en las


computadoras OLPC

Perl

Php

Physical Etoys: Entorno grfico de programacin usado para


proyectos de robtica educativa

Processing

Pure Data

Python

Ruby

Scratch for Arduino (S4A): Entorno grfico de programacin,


modificacin del entorno para nios Scratch, del MIT

Squeak: Implementacin libre de Smalltalk

SuperCollider: Sntesis de audio en tiempo real

VBScript

Visual Basic .NET

VVVV: Sntesis de vdeo en tiempo real

Pduino[editar]

Patch Pduino.

Pduino nace de la fusin de los proyectos Pure Data y Arduino.


Ambos proyectos de fuente abierta permiten trabajar con interfaz
grfica. Cargando el firmware de Pure Data (PD) a la placa Arduino se
puede acceder a ella mediante el lenguaje de programacin grfico.

Minibloq[editar]

Pantalla de Minibloq.

Combinacin de una computadora de bajo costo OLPC, el software


Minibloq y una placa Arduino.

Minibloq es un entorno grfico de programacin que puede generar


cdigo nativo de Arduino y escribirlo directamente en la memoria flash
de la placa. Tiene un modo que permite visualizar el cdigo generado,
el cual tambin puede ser copiado y pegado en el Arduino-IDE, para
los usuarios que intentan hacer el pasaje de una herramienta grfica a
la programacin en sintaxis C/C++. Minibloq es de uso libre y sus
fuentes tambin estn disponibles gratuitamente. Una caracterstica
importante, es que puede correr tambin en la computadora
porttil OLPC, mediante el software Wine.

Physical Etoys[editar]
Artculo principal: Physical Etoys

Proyecto de un semforo realizado con Arduino y Physical Etoys.

Physical Etoys es una extensin libre y gratuita que permite que


diversos dispositivos electrnicos como Lego NXT, las placas Arduino,
Sphero, Kinect, Joystick Wiimote, entre otros, puedan ser
programados fcilmente y que interacten entre s gracias a su
sistema de bloques.
En el caso de Arduino, Physical Etoys ofrece dos modos de
programacin, el modo "directo" y el modo "compilado".
Modo directo
El modo "directo", en el cual los programas se ejecutan en la computadora del
usuario y las rdenes se transmiten inmediatamente a travs del puerto serie. El
modo "directo" permite modificar los programas y ver los cambios producidos de
manera inmediata en el comportamiento del robot, lo cual facilita la programacin,
sobre todo al usuario inexperto. Asimismo, permite ver constantemente los valores
de los sensores y utilizar el robot, por ejemplo, como para adquirir datos.
Modo compilado
El modo "compilado", en el cual los programas se traducen a C++ y se bajan a la
placa, para luego ejecutarse de manera independiente de la computadora. El modo
"compilado", por su parte, elimina el retardo que introduce la comunicacin con la
computadora, lo cual lo hace preferible para el desarrollo de tareas autnomas, en
las cuales la velocidad de respuesta del robot debe ser ptima.

Vase tambin[editar]

Lenguaje de programacin de Arduino,


estructura de un programa
Para programar un Arduino, el lenguaje estndar es C++, aunque es posible programarlo
en otros lenguajes. No es un C++ puro sino que es una adaptacin que proveniente de avrlibc que provee de una librera de C de alta calidad para usar con GCC en los
microcontroladores AVR de Atmel y muchas funciones especficas para los MCU AVR de
Atmel.
avr-binutils, avr-gcc y avr-libc son las herramientas necesarias para programar los
microcontroladores AVR de Atmel.
AVR-libc reference manual de
Atmel: http://www.atmel.com/webdoc/AVRLibcReferenceManual/index.html
Dispositivos
soportados: http://www.atmel.com/webdoc/AVRLibcReferenceManual/index_1supp_device
s.html
Webs del proyecto: http://www.nongnu.org/avrlibc/ y http://savannah.nongnu.org/projects/avr-libc/
Tratamiento de la memoria de la MCU por avrlibc: http://www.atmel.com/webdoc/AVRLibcReferenceManual/malloc_1malloc_intro.html
Mdulos de avr-libc: http://www.atmel.com/webdoc/AVRLibcReferenceManual/ch20.html
GNU C libc: http://www.gnu.org/software/libc/index.html
GCC es un conjunto de compiladores que se considera el estndar para los Sistemas
Operativos derivados de UNIX y requiere de un conjunto de aplicaciones conocidas como
binutils que son unas herramientas de programacin para la manipulacin de cdigo de
objeto.

Cuando GCC est construido para ejecutarse en un sistema como Linux, Windows o mac
OS y generar cdigo para un microcontrolador AVR, entonces se denomina avr-gcc
avr-gcc es el compilador que usa el IDE de arduino para convertir el sketch en C++ a un
fichero binario (.hex) que es el que se carga en la flash del MCU y que ejecuta.
Informacin sobre las
binutils: http://www.atmel.com/webdoc/AVRLibcReferenceManual/overview_1overview_bin
utils.html
Proyecto GCC: https://gcc.gnu.org/
Pero para programar proyectos de complejidad media, la mayora de los comandos que
necesitemos con Arduino los encontraremos en la referencia de programacin de Arduino
en el Arduino Reference, que es donde debemos recurrir para cualquier duda de
programacin que surja. Arduino provee de unas libreras que facilitan la programacin del
microcontrolador. http://arduino.cc/en/Reference/HomePage
El gran xito de Arduino en parte se debe a que nos permite programar un MCU sin tener
que saber todo lo anterior y nos da unas herramientas sencillas y especficas para
programar unos microcontroladores que suministra en sus placas.
Por ejemplo veamos las funciones que nos ofrece para comunicar por el puerto
serie: http://arduino.cc/en/Reference/Serial
El lenguaje de programacin usado por Arduino est basado en
Processing: http://www.gnu.org/software/libc/index.html, es un lenguaje de programacin y
entorno de desarrollo integrado de cdigo abierto basado en Java, de fcil utilizacin, y
que sirve como medio para la enseanza y produccin de proyectos multimedia e
interactivos de diseo digital.
Web del proyecto de Proccesing: https://processing.org/
Processing en github: https://github.com/processing/processing

Processing es til cuando queremos comunicar Arduino con un ordenador y mostrar datos
o guardar datos, pero tambin podemos usar otros lenguajes de programacin como
python, .NET o cualquier otro que conozcamos.
Arduino trae algunos ejemplos para trabajar con Processing en el apartado
communication, por ejemplo, para hacer una grfica de datos
en http://arduino.cc/en/Tutorial/Graph
Ver el reference y la librera Serial de processing para darnos cuenta en la similitud de los
lenguajes: https://processing.org/reference/ y https://processing.org/reference/libraries/seria
l/
Tambin disponemos de una librera de Arduino dentro de processing que nos permite
interactuar entre processing y arduino: http://playground.arduino.cc/interfacing/processing
Por supuesto Arduino se puede programar en otros lenguajes y desde otros entornos de
programacin, lo que va a hacer que el cdigo sea diferente. Cabe destacar scratch como
un lenguaje visual que hace innecesario saber programacin o Atmel Studio que es la
herramienta que proporciona Atmel.
Ms informacin en: https://aprendiendoarduino.wordpress.com/2014/11/20/tema-4conceptos-basicos-de-programacion/
Como ya hemos visto, la estructura bsica del lenguaje de programacin de Arduino es
bastante simple y se compone de al menos dos partes. Estas dos partes necesarias, o
funciones, encierran bloques que contienen declaraciones, estamentos o instrucciones.

setup() http://arduino.cc/en/Reference/Setup

loop() http://arduino.cc/en/Reference/Loop

digerencia entre pic y atmel


aya, cuntas preguntas y cuntas dudas. Aunque no se si responderte como a un aficionado,
un informtico, un electrnico, como cultura general o como un geek. En todo caso vamos a
hacerlo digerible para todos y al final te respondo en funcin a lo escrito.
Un microcontrolador (en adelante uC) es en esencia una computadora con un microprocesador
central (su velocidad/potencia depender del modelo), puertos de E/S, tiene memoria interna,
es programable y dependiendo del tipo/marca/modelo encontrars un sinnmero de elementos
adicionales todo integrado en un chip. La ventaja del uC es que es fabricado en un amplio
rango de tipos con caractersticas que permitan al desarrollador elegir aquel que tenga lo
mnimo necesario para su proyecto. De este modo no se incurrir en gastos adicionales ni se
desperdiciarn caractersticas que no se requieren. Adems, ocupar el espacio fsico

suficiente para lo que el electrnico quiere.


Pensando en ello, los fabricantes han enfocado los modelos de sus productos para cada
necesidad. Por ejemplo, si quieres hacer un juego de luces navideas podras utilizar un
econmico y antiguo PIC 16F84. No necesitaras ms e incluso podra ser demasiado (podras
utilizar un PIC "enano" 12C508), pero es un costo sumamente bajo. Por el contrario, si
quisieras manejar un telfono celular necesitaras un uC AVR mucho ms potente y con una
serie de caractersticas adicionales.
Suficientes comentarios generales. Te respondo:
- Se pueden programar con el mismo lenguaje? S y no.
No, si es que se quiere programar en lenguaje nativo porque su juego de instrucciones o
mnemnicos son diferentes, sus registros sin distintos. Son arquitecturas de hardware
diferentes.
Si se pueden programar si se utiliza un lenguaje de alto nivel (C, Pascal, Basic). Cabe aclarar
que lenguajes en versiones para PIC, no son los mismos compiladores tradicionales.
Es decir, para quien use lenguaje C habrn pocas diferencias entre un uC y otro.
- Pueden tener los mismos usos? Es posible que s. Se puede encontrar un uC Atmel
equivalente en funciones y caractersticas a un PIC. No obstante, ello no siginifica que se
pueda sustituir fsicamente el componente sin alterar el circuito electrnico ni el programa PIC
porque son incompatibles en esos dos niveles.
- Son controladores completamente diferentes, cada uno con sus propias aplicaciones? Un uC
8051 o compatible puede servir para hacer un juego de luces navideas, pero sera un
desperdicio de prestaciones. En ese sentido existen aplicaciones ms o menos determinadas
para cada modelo de uC. PIC fue y sigue siendo un uC muy comn en algunas reas, pero
esas mismas reas funcionales en otros lugares geogrficos prefieren utilizar uC Freescale que
tampoco son costosos. En este ltimo caso PIC y Freescale son diferentes, se programan de
modo diferente, pero tambin tienen modelos que son prcticamente equivalentes en cuanto a
sus funciones.
A ello agreguemos el hecho de que ciertos uC son ms bien un sector clase A tal como los
ARM y los propios AVR. Por lo general sus prestaciones son superiores. Aunque tambin
encontrars potentes PIC de 32 bits.
- Se pueden programar con el mismo hardware, o tiene cada uno un hardware especfico?
Cada uno se programa con un hardware especfico. Sin embargo, existen diversos circuitos
programadores universales que te permiten programar varias marcas/modelos con distinta
cantidad de pines sin hacer ningn cambio.
- Podra sustituir un controlador Atmel por un controlador PIC? Por sus funciones s. Pero no

puedes retirar un PIC y colocar un Atmel as de simple. El circuito es otro. El programa es otro a
pesar de que funcionalmente puedan ejecutar las mismas tareas.
B-)
"Yo dorma y so que la vida era alegra.
Me despert y vi que la vida era servicio.
Serv y comprend que el servicio era alegra"
(Rabindranath Tagore)

You might also like