El Registro PORT
-
Upload
juan-djezuz-suarez-ibanez -
Category
Documents
-
view
44 -
download
1
description
Transcript of El Registro PORT
El Registro PORT (Puerto) en Arduino febrero 27, 2014 José Villalaz Arduino, Arduino para principiantes, Programación
En este post veremos qué son los PORT y cómo se utilizan. Al
final lograremos manipular en bajo nivel y de manera más
rápida 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 configuración de pines que el ATmega168):
o B (pines digitales del 8 al 13)
o C (entradas analógicas)
o D (pines digitales del 0 al 7)
Puertos que posee el Arduino ATmega328
Para más detalles sobre cómo están mapeados los números de
los pines de Arduino a los puertos y los bits observa la siguiente
imagen:
Números 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 también están
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 función pinMode().
“Los registros DDR y PORT pueden ser ambos, escritos y leídos.
El registro PIN corresponde al estado de las entradas así que
solo puede ser leído.”El PORTD mapea los pines digitales del 0 al 7
o DDRD – El registro de configuración 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) están 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 configuración 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 analógica del 0 al 5.
o DDRC – El registro de configuración 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 hacíamos de
la siguiente manera:
12345
void setup(){Serial.begin(9600);pinMode(2,INPUT);pinMode(3,OUTPUT);}
Entonces si quisiéramos declarar 7 pines (desde el digital 0 al digital 7),
tendríamos que repetir pinMode 7 veces. Al igual que escribir
tendríamos 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 instrucción podemos declarar el pin como entrada o salida y
también podemos escribir, si lo queremos, como estado HIGH o LOW.
Para controlar cualquiera de los tres puertos, debemos
usar dos instrucciones.
o Primera instrucción: 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 transmisión serial (RX y TX
respectivamente). Si utilizas “Serial.begin” en alguno de esos 2
puertos; no tendrás comunicación 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 comunicación Serial tendríamos que hacer esto:
DDRX = DDRX | B11111100;
Esta manera es más 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 más referencia de los operadores bit a bit tipo AND, visita el
siguiente post de Arduino:
o Tutorial de operaciones con bits.
Tenemos el siguiente código:
B11111110;
Colocamos B, porque el número a marcar es Binario. Para ampliar
más 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.
Número
a
marcar
1 1 1 1 1 1 1 0
Ubicaci
ón del
pin en
Arduino
.
7 6 5 4 3 2 1 0
o Segunda instrucción: es la escritura del puerto (esta variará
en función del programa que estemos desarrollando). Lo
localizamos en la funciónvoid loop().
Ejemplo:
1 =HIGH 0 = LOW
PORTX= B11111110;
En este ejemplo los pines del 1 al 7 permanecerán encendidos (HIGH) y
el pin 0 LOW. Veamos un ejemplo aplicando estos
conceptos:
En este ejemplo lograremos que durante dos segundos todos los leds
enciendan, durante dos segundos más alumbren los impares y durante
dos más todos se apaguen. Veamos:
Configuración Utilizada:
Configuración Utilizada para este proyecto.
Abrimos Arduino IDE y escribimos el siguiente código:
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 instrucción 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 7 Segmentos mediante Pulsadores.Ventajas y Desventajas que nos ofrece al utilizar el Registro PORT (Puerto):Desventajas:
o El código es mucho más difícil de depurar y mantener, y
es mucho más difícil de entender para la gente. Solo lleva
algunos microsegundos al procesador ejecutar código, pero
podría llevarte horas descubrir por qué no funciona y arreglarlo.
o Es mucho más fácil causar mal funcionamiento no
intencionado usando el acceso directo a un puerto. Observa
como la línea DDRD = B11111110, de arriba, menciona que el
pin 0 se debe dejar como una entrada. El pin 0 la línea de
recepción (RX) en el puerto serial.Podría ser muy fácil 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 rápido,
en fracciones de microsegundos. Las funciones digitalRead() y
digitalWrite() son cada una cerca de una docena de líneas de
código, lo cual al ser compilado se convierte en unas cuantas
instrucciones máquina.
Cada instrucción 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 función digitalWrite
(11,HIGH), causará que el pin 10 se ponga en nivel alto varios
microsegundos después 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 estás quedando sin memoria para tu aplicación, puedes
usar estos trucos para hacer que tu código sea más pequeño.
Usando este método se necesitan muchos menos bytes de
código compilado que si se hace un bucle para que se vaya
cambiando cada pin uno por uno.
Espero que la información suministrada sea de su comprensión 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 electrónica y el
uso de una plataforma Open Source llamada Arduino con la que he estado
desarrollando proyectos en los últimos meses no sólo para ampliar mi
conocimiento en plataformas de desarrollo sino también 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 electrónica abierta para la creación de prototipos
basada en software y hardware flexibles y fáciles de usar. Se creó para artistas,
diseñadores, aficionados y cualquiera interesado en crear entornos u objetos
interactivos.
Las placas Arduino pueden medir valores ambientales al recibir información 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
diseños de referencia están disponibles bajo una licencia de código abierto, así
que cualquiera es libre de adaptar el diseño a sus necesidades.
Los fundadores de Arduino son: Massimo Banzi, David Cuartielles, Tom Igoe,
Gianluca Martino y David Mellis.
10 Razones para usar Arduino10.- Open Source
Arduino es una plataforma de código y hardware abierto, es decir, puedes acceder
a todo aspecto del funcionamiento circuital y algorítmico de las placas, y mucho
mejor que eso, te dan todos los archivos Eagle, diagramas y componentes para
que tu mismo crees tu versión de Arduino. Por razones de mercadeo, y licencias
propias de la organización 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.- Fácil de programar
Hay quienes dicen que para programar Arduino, no es necesario saber nada de
electrónica, y en parte es cierto por que Arduino te ofrece un entorno de desarrollo
integrado (IDE) con funciones preestablecidas que reducen la lógica a lectura de
entradas, control de tiempos y salidas de una manera semántica e intuitiva. Por
eso lo convierte en una herramienta perfecta para los que quieran iniciarse en el
mundo de la electrónica y luego, probar cosas mas
difíciles.
Arduino tiene la ventaja que no necesita ningun tipo de tarjeta de programación
como pasa con los microcontroladores sino que la misma placa se conecta vía
serial a la computadora usando un cable USB y se pueden cargar los programas
totalmente en vivo, sin riesgo de dañar la tarjeta debido a su protección adicional.
El código 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 código se muestra a continuación:
[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.- Documentación y tutoriales en exceso
Si algo tiene Arduino es que Internet esta plagado literalmente de documentación
sobre esta plataforma, así que decir que no se encuentran tutoriales para aprender
no es una excusa válida para este caso. Desde la misma página de la empresa, el
IDE que también viene con multitud de ejemplos y los incontables tutoriales en
Youtube y la red sobre esta plataforma la hacen una de las más fáciles de
desarrollar.
7.- Librerías
Una de las ventajas mas grandes que tiene Arduino es que poseen librerías para
prácticamente cualquier componente externo que se le quiera acoplar (hablaremos
de esto en la siguiente sección 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 librería con funciones predefinidas para el uso
óptimos de los periféricos, si bien es super necesario saber como funcionan por
cuestiones de ingeniería y resolución de problemas, el no reinventar la rueda es
esencial.
Varias librerías con las que cuenta Arduino:
EEPROM: librería con funciones de escritura y lectura de la memoria EEPROM del
dispositivo
Ethernet: librería para el uso de este protocolo en presencia del Shield Arduino
Ethernet.
GSM: librería para la transmisión/recepción y procesamiento de GSM.
Servo: librería exclusiva para el uso de servo motores, muy útil en robótica.
Wi-fi: librería 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 optarán por placas diferentes que poseen
atributos variables de memoria, capacidad, cantidad de puertos I/O,
microcontrolador entre otros. A continuación les presentamos algunas de estas
placas:
Arduino Uno R3: La placa básica que ofrece Arduino. Esta basada en un
microcontrolador ATmega328. Posee 14 I/O digitales (6 de ellos soportan PWM), 6
entradas analogicas, coenxión 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 núcleo ARM de 32-bit. Posee
54 entradas/salidas digitales (12 PWM), 12 entradas analógicas, 4 UARTS, 2 DAC,
y sólo funciona con alimentación de 3.3V Lo cual la hace suceptible a voltajes de
5V (Pueden dañar la
placa).
Arduino YÚN: Sin duda una de las mas interesantes y personalmente mi próxima
adquisición. 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 analógicas.
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 Analógicas y 4 UARTS.
Arduino NANO y Mini: estas placa estan pensadas para una coenxión fácil de
prototipado y para proyectos de robótica que requieran muy poco espacio, tienen
el mismo procesador que la placa UNO pero viene super compacto con muchos
menos puertos.
5.- Shields y periféricos:
Arduino también 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 también es
compatible con infinidad de periféricos 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 Yún, mucho menos de lo que habría que
invertir en desarrollo de Raspberry Pi y Microcontroladores de Microchip. Sin
embargo, resulta aún mas económico 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 prácticamente se puede hacer de todo, desde domotizar tu hogar u oficina,
aplicaciones en robótica como cerebro de un robot has ser utilizado como nodos
de tecnologías WSN (Redes de sensores inalambricos). Entre sus aplicaciones
mas conocidas están:
Control y monitoreo de sensores.
Efectos con leds.
Transponders (Transmisores/receptores)
Educación.
Monitoreo ambiental.
Biomedicina.
Telemedicina.
Domótica.
Robótica.
2.- Es cool
Qué mas podriamos pedir, es fácil, se programa rápido, 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: