You are on page 1of 22

El Registro PORT (Puerto) en

Arduino
febrero 27, 2014 Jos Villalaz Arduino, Arduino para principiantes, Programacin

En este post veremos qu son los PORT y cmo se utilizan. Al


final lograremos manipular en bajo nivel y de manera ms
rpida los contactos de entrada/salida del microcontrolador de
las placas Arduino.
Los

pines

usados

en

la

placa

Arduino

(el ATmega8 y

el ATmega168) poseen tres puertos (El ATmega328 (Arduino


Uno) usa la misma configuracin de pines que el ATmega168):
o

B (pines digitales del 8 al 13)

C (entradas analgicas)

D (pines digitales del 0 al 7)

Puertos que posee el Arduino ATmega328


Para ms detalles sobre cmo estn mapeados los nmeros de
los pines de Arduino a los puertos y los bits observa la siguiente
imagen:

Nmeros de los pines de Arduino a los puertos y los bits.

El Arduino Mega presenta varios puertos B,C,D,E,F, etc.


Cada puerto es controlado por tres registros, los cuales tambin estn
definidos como variables en el lenguaje del Arduino.
o

El registro DDR, determina si el pin es una entrada o una

salida.
o
El registro PORT controla si el pin est en nivel alto o en
nivel bajo.
o
El registro PIN permite leer el estado de un pin que se ha
configurado con entrada usando la funcin pinMode().
Los registros DDR y PORT pueden ser ambos, escritos y ledos.
El registro PIN corresponde al estado de las entradas as que
solo puede ser ledo.El PORTD mapea los pines digitales del 0 al 7

DDRD El registro de configuracin del modo de los pines

del puerto D lectura/escritura


o
PORTD Registro de datos del puerto D lectura/escritura
o

PIND Registro de pines de entrada solo lectura


El PORTB mapea los pines digitales del 8 al 13. Se debe recordar
que Los bits altos (6 & 7) estn mapeados a los pines del
cristal de cuarzo y no pueden ser usados. Estos son solamente

accesibles en el Arduino Mini.


o
DDRB El registro de configuracin del modo de los pines
del puerto B lectura/escritura
o
PORTB Registro de datos del puerto D lectura/escritura
o

PINB Registro de pines de entrada solo lectura


El PORTC mapea los pines de entrada analgica del 0 al 5.

DDRC El registro de configuracin del modo de los pines

del puerto B lectura/escritura


o
PORTC Registro de datos del puerto D lectura/escritura
o

PINC Registro de pines de entrada solo lectura


Cada bit de estos registros corresponden con un solo pin; por ejemplo el
bit menos significativo de los registros DDRB, PORTB, y PINB hace
referencia al pin PB0 (pin digital 8)
Normalmente antes para declarar un pin lo hacamos de
la siguiente manera:
1 void setup(){
2 Serial.begin(9600);
3 pinMode(2,INPUT);
4 pinMode(3,OUTPUT);
5}

Entonces si quisiramos declarar 7 pines (desde el digital 0 al digital 7),


tendramos

que

repetir pinMode 7

veces.

Al

igual

que

escribir

tendramos que poner digitalWrite(pin,estado) pin 0 estado alto, pin 1


estado bajo, etc.
Al utilizar Registros PORT (Puerto) tenemos la ventaja de que con
solo una instruccin podemos declarar el pin como entrada o salida y
tambin podemos escribir, si lo queremos, como estado HIGH o LOW.
Para controlar cualquiera de los tres puertos, debemos
usar dos instrucciones.
o
Primera
instruccin:

se

debe

declarar

en

la

estructura void setup() y nos sirve para declarar si el pin se va


a usar como INPUT o como OUTPUT.
Dato Importante:
Los pines 0 y 1

son la transmisin serial (RX y TX

respectivamente). Si utilizas Serial.begin en alguno de esos 2


puertos; no tendrs comunicacin serial. Cuidado con eso.
Ejemplo:
1 = OUTPUT

0 = INPUT

DDRX = B11111110;
donde X es la letra del puerto a usar (BCD). Sin embargo si queremos
tener comunicacin Serial tendramos que hacer esto:
DDRX = DDRX | B11111100;
Esta manera es ms segura ya que configura los pines del 2 al 7 como
salidas sin cambiar los pines 0 y 1, que como mencionamos son RX y TX
Para tener ms referencia de los operadores bit a bit tipo AND, visita el
siguiente post de Arduino:
o

Tutorial de operaciones con bits.


Tenemos el siguiente cdigo:

B11111110;

Colocamos B, porque el nmero a marcar es Binario. Para ampliar


ms sobre los tipos de datos en Arduino visitemos el
siguiente blog:
o
Tipos de Datos en Arduino.
Para saber el estado que le daremos al pin siempre lo pondremos
escribiendo de derecha a izquierda.

Nmero
a

marcar

Ubicaci
n del
pin en
Arduino
.
Segunda instruccin: es la escritura del puerto (esta

variar en funcin del programa que estemos desarrollando). Lo


localizamos en la funcinvoid loop().
Ejemplo:
1 =HIGH

0 = LOW

PORTX= B11111110;
En este ejemplo los pines del 1 al 7 permanecern encendidos (HIGH) y
el

pin

conceptos:

LOW. Veamos

un

ejemplo

aplicando

estos

En este ejemplo lograremos que durante dos segundos todos los leds
enciendan, durante dos segundos ms alumbren los impares y durante
dos ms todos se apaguen. Veamos:
Configuracin Utilizada:

Configuracin Utilizada para este proyecto.

Abrimos Arduino IDE y escribimos el siguiente cdigo:


int contador=0;//declaramos la variable interna como contador.
void setup(){
DDRD= B11111100;//Utilizamos D porque es del 0 al 7 y B porque es
Binario.
//En este ejemplo no utilic los pines 0 y 1 del Arduino.
/*Esta instruccin es lo mismo que hacer esto:
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);

pinMode(6,OUTPUT);
pinMode(7,OUTPUT); */
}
void loop(){
for (contador=0; contador <3; contador ++){//establecemos contador
menor que 3 porque solo son 3 casos.
switch(contador){
case 0:
PORTD= B11111111;//aqu encenderemos todos los leds
delay(2000);
case 1:
PORTD= B10101010;//aqu encenderemos solo los impares.
delay(2000);
case 2:
PORTD= B00000000;//aqu los apagaremos todos.
delay(2000);
}
}
}

Para ver otro ejemplo utilizando Registro PORT (Puerto), visitemos


el siguiente post:
o

Control

de

Display

Segmentos

mediante

Pulsadores.

Ventajas y Desventajas que nos ofrece al utilizar el


Registro PORT (Puerto):
Desventajas:
o

El cdigo

es

mucho

ms

difcil

de

depurar

mantener, y es mucho ms difcil de entender para la gente.


Solo lleva algunos microsegundos al procesador ejecutar cdigo,
pero podra llevarte horas descubrir por qu no funciona y
arreglarlo.
o
Es mucho ms fcil causar mal funcionamiento no
intencionado usando el acceso directo a un puerto. Observa

como la lnea DDRD = B11111110, de arriba, menciona que el


pin 0 se debe dejar como una entrada. El pin 0 la lnea de
recepcin (RX) en el puerto serial.Podra ser muy fcil causar
que tu puerto serial deje de funcionar por cambiar el pin 0 a una
salida.
Ventajas:
o

Puede que puedas cambiar los pines de estado muy


rpido,

en

fracciones

de

microsegundos.

Las

funciones

digitalRead() y digitalWrite() son cada una cerca de una docena


de lneas de cdigo, lo cual al ser compilado se convierte en
unas cuantas instrucciones mquina.
Cada instruccin maquina necesita un ciclo de reloj a 16MHz, lo cual
puede sumar mucho tiempo en aplicaciones muy dependientes del
tiempo. ElRegistro PORT (Puerto) puede hacer el mismo trabajo en
muchos menos ciclos de trabajo.
o

Algunas veces necesitamos configurar muchos pines


exactamente al mismo tiempo. Por lo que usar las funciones
digitalWrite

(10,HIGH),

seguida

de

la

funcin

digitalWrite

(11,HIGH), causar que el pin 10 se ponga en nivel alto varios


microsegundos despus que el pin 11, lo cual puede confundir
circuitos digitales conectados al Arduino, cuyo funcionamiento
dependa del tiempo preciso del cambio de esos bits.
o
Si te ests quedando sin memoria para tu aplicacin,
puedes usar estos trucos para hacer que tu cdigo sea ms
pequeo. Usando este mtodo se necesitan muchos menos
bytes de cdigo compilado que si se hace un bucle para que se
vaya cambiando cada pin uno por uno.

Espero que la informacin suministrada sea de su comprensin y utilidad.


Recuerda seguir visitando nuestros post.
Saludos.

ESCRITO POR ALVARO SABURIDO, EL 20 MAYO, 2014

Hola jousss, hoy los quiero introducir en el fascinante mundo de la electrnica y el


uso de una plataforma Open Source llamada Arduino con la que he estado
desarrollando proyectos en los ltimos meses no slo para ampliar mi
conocimiento en plataformas de desarrollo sino tambin nutrir a Modulo 0 de
nuevos proyectos y cursos relacionados con esta maravilla italiana. Antes de
empezar a hablar de Arduino tenemos que saber un par de cosas:

Exactamente.. Qu es Arduino?
Arduino es una plataforma de electrnica abierta para la creacin de prototipos
basada en software y hardware flexibles y fciles de usar. Se cre para artistas,
diseadores, aficionados y cualquiera interesado en crear entornos u objetos
interactivos.
Las placas Arduino pueden medir valores ambientales al recibir informacin de
variedad de sensores y afectar sus alrededores controlando luces, motores y otros
actuadores
Las tarjetas pueden ser fabricadas caseramente o comprar una tarjeta
preesamblada y probada, el software puede ser descargado gratuitamente. Los
diseos de referencia estn disponibles bajo una licencia de cdigo abierto, as
que cualquiera es libre de adaptar el diseo a sus necesidades.
Los fundadores de Arduino son: Massimo Banzi, David Cuartielles, Tom Igoe,
Gianluca Martino y David Mellis.

10 Razones para usar Arduino


10.- Open Source

Arduino es una plataforma de cdigo y hardware abierto, es decir, puedes acceder


a todo aspecto del funcionamiento circuital y algortmico de las placas, y mucho
mejor que eso, te dan todos los archivos Eagle, diagramas y componentes para
que tu mismo crees tu versin de Arduino. Por razones de mercadeo, y licencias
propias de la organizacin Open Source Initiative (ISO) esta prohibido usar el
nombre de la empresa Arduino para las placas independientes, por eso es
importante separar las tarjetas de otras empresas o clones (FreeDuino,
Protoduino, Crowdino) de falsificaciones ilegales que tienen el nombre de la
empresa.

9.- Fcil de programar

Hay quienes dicen que para programar Arduino, no es necesario saber nada de
electrnica, y en parte es cierto por que Arduino te ofrece un entorno de desarrollo
integrado (IDE) con funciones preestablecidas que reducen la lgica a lectura de

entradas, control de tiempos y salidas de una manera semntica e intuitiva. Por


eso lo convierte en una herramienta perfecta para los que quieran iniciarse en el
mundo de la electrnica y luego, probar cosas mas
difciles.

Arduino tiene la ventaja que no necesita ningun tipo de tarjeta de programacin


como pasa con los microcontroladores sino que la misma placa se conecta va
serial a la computadora usando un cable USB y se pueden cargar los programas
totalmente en vivo, sin riesgo de daar la tarjeta debido a su proteccin adicional.

El cdigo es sumamente amigable y posee su propio lenguaje de alto nivel


llamado Processing. Cosa que no limita a que Arduino pueda programarse en
cualquier tipo de lenguaje, un ejemplo del cdigo se muestra a continuacin:
[code lang=arduino light=true]
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
}
[/code]
8.- Documentacin y tutoriales en exceso

Si algo tiene Arduino es que Internet esta plagado literalmente de documentacin


sobre esta plataforma, as que decir que no se encuentran tutoriales para aprender
no es una excusa vlida para este caso. Desde la misma pgina de la empresa, el
IDE que tambin viene con multitud de ejemplos y los incontables tutoriales en
Youtube y la red sobre esta plataforma la hacen una de las ms fciles de
desarrollar.

7.- Libreras

Una de las ventajas mas grandes que tiene Arduino es que poseen libreras para
prcticamente cualquier componente externo que se le quiera acoplar (hablaremos
de esto en la siguiente seccin de Shields y complementos) haciendo innecesario
aprenderse el datasheet del componente y desarrollar el software necesario para

adquirir los valores de un sensor de temperatura digital por ejemplo, estamos


99.9% seguros que ya existe una librera con funciones predefinidas para el uso
ptimos de los perifricos, si bien es super necesario saber como funcionan por
cuestiones de ingeniera y resolucin de problemas, el no reinventar la rueda es
esencial.
Varias libreras con las que cuenta Arduino:

EEPROM: librera con funciones de escritura y lectura de la memoria EEPROM del


dispositivo

Ethernet: librera para el uso de este protocolo en presencia del Shield Arduino
Ethernet.

GSM: librera para la transmisin/recepcin y procesamiento de GSM.

Servo: librera exclusiva para el uso de servo motores, muy til en robtica.

Wi-fi: librera para el uso del shield de Wifi.

6.- Diferentes placas.

Si en algo se diferencia Arduino de otras plataformas de desarrollo, es la multitud


de placas con distintas prestaciones que ofrecen al mercado. Dependiendo de las
necesidades del desarrollador se optarn por placas diferentes que poseen
atributos variables de memoria, capacidad, cantidad de puertos I/O,
microcontrolador entre otros. A continuacin les presentamos algunas de estas
placas:

Arduino Uno R3: La placa bsica que ofrece Arduino. Esta basada en un
microcontrolador ATmega328. Posee 14 I/O digitales (6 de ellos soportan PWM), 6

entradas analogicas, coenxin USB y opera a 5 V.

Arduino DUE: Arduino DUE se presenta como una de las placas mas robustas al
ser la primera con un microcontrolador basado en un ncleo ARM de 32-bit. Posee
54 entradas/salidas digitales (12 PWM), 12 entradas analgicas, 4 UARTS, 2 DAC,
y slo funciona con alimentacin de 3.3V Lo cual la hace suceptible a voltajes de
5V (Pueden daar la
placa).

Arduino YN: Sin duda una de las mas interesantes y personalmente mi prxima
adquisicin. Su atractivo recae en su doble procesador, de parte de Arduino un
ATmega32u4 y un Atheros AR9331 que soporta distribuciones Linux basads en
OpenWRT. La placa provee de soporte Ethernet, Wifi, USB y Micro SD, 20 I/O

terminales digitales (7 PWM) 12 entradas analgicas.

Arduino MEGA ADK: Esta es la placa que yo adquir de primero, super robusta,
basada en un microcontrolador ATmega2560 con una interfaz USB que permite
conectar cn telefonos Android directamente. Posee 54 pines digitales (15 se
pueden utilizar para PWM), 16 entradas Analgicas y 4 UARTS.

Arduino NANO y Mini: estas placa estan pensadas para una coenxin fcil de
prototipado y para proyectos de robtica que requieran muy poco espacio, tienen
el mismo procesador que la placa UNO pero viene super compacto con muchos

menos puertos.

5.- Shields y perifricos:

Arduino tambin ofrece una gran gama de Shields o placas extras que cumplen
funcionalidades especificas como Ethernet, GSM, Control de Reles, Wi-fi y pueden
ser acopladas a las tarjetas de forma sencilla, aumentando considerablemente el
rango de aplicaciones disponibles. Para completar la faena Arduino tambin es
compatible con infinidad de perifricos de otras marcas como Xbee, Teclados,
LCD, sensores digitales, dispositivos de Sparkfun, serial, 1-Wire, SD-Card entre
muchos otros.

4.- Precio

El precio es uno de los elementos mas atractivos de Arduino, desde placas en 21$
hasta placas de 71$ como el Arduino Yn, mucho menos de lo que habra que
invertir en desarrollo de Raspberry Pi y Microcontroladores de Microchip. Sin
embargo, resulta an mas econmico hacer nuestro propio Arduino en casa.

3.- Infinidad de aplicaciones.

Gracias a su versatilidad, Arduino se ha convertido en la placa de desarrollo con la


que prcticamente se puede hacer de todo, desde domotizar tu hogar u oficina,
aplicaciones en robtica como cerebro de un robot has ser utilizado como nodos
de tecnologas WSN (Redes de sensores inalambricos). Entre sus aplicaciones
mas conocidas estn:

Control y monitoreo de sensores.

Efectos con leds.

Transponders (Transmisores/receptores)

Educacin.

Monitoreo ambiental.

Biomedicina.

Telemedicina.

Domtica.

Robtica.

2.- Es cool

Qu mas podriamos pedir, es fcil, se programa rpido, permite combinar


perifericos de todo tipo, es barato, y aparte es atractivo visualmente, sino me
creen solo vean como es la caja donde viene el Arduino Uno: