Ir a contenido
Tienda de electrónica en México. Llámanos: 33 27 37 64 13 - Whatsapp. 33 26 13 22 69. Atención de Lunes a Viernes de 10:00am a 6:30pm.
Tienda de electrónica en México. Llámanos: 33 27 37 64 13 - Whatsapp. 33 26 13 22 69. Atención de Lunes a Viernes de 10:00am a 6:30pm.
Manipular pines directamente con PORT

Manipular pines directamente con PORT

Introducción:

El ATmega328p que es el microcontrolador montado en la tarjeta arduino UNO/NANO y como cualquier otro microcontrolador tiene registros, algunos de estos registros están conectados con los puertos de entrada/salida, cada puerto tiene un nombre específico
Los pines usados en la placa Arduino poseen tres puertos y son los siguientes:

  • B (pines digitales del 8 al 13)
  • C (entradas analógicas)
  • D (pines digitales del 0 al 7)

Tipos de registros:

  • El registro DDR, determina si el pin es una entrada o una salida.
  • El registro PORT controla si el pin está en nivel alto o en nivel bajo.
  • El registro PIN permite leer el estado de un pin que se ha configurado con entrada usando la función pinMode().

Operaciones con bits

OPERADOR DESCRIPCIÓN EJEMPLO RESULTADO
~ Complemento a uno a = ~b b = 5 a = -5
<< Desplazamiento a la izquierda a = b << 2 b = 11110011 a = 11001100
>> Desplazamiento a la derecha a = b >> 2 b = 11110011 a = 00011110
& Y lógico para manejo de bits c = a & b a = 11100011
b = 11001100
c = 11000000
| O lógico para manejo de bits c = a | b a = 11100011
b = 11001100
c = 11101111
^ EXOR lógico para manejo de bits c = a ^ b a = 11100011
b = 11001100
c = 00101111

Ejemplo:

Manejo del puerto B y operaciones con bits, puede descargar el código en la sección material de apoyo que se encuentra hasta el final del tutorial.

Diagrama de conexión

 

Desventajas:

  • 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.
  • 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:

  • 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. El Registro PORT (Puerto) puede hacer el mismo trabajo en muchos menos ciclos de trabajo.

  • 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.
  • 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.

Material de apoyo

Código, diagramas, datasheet

https://www.arduino.cc/en/Reference/PortManipulation

¿Como descargar el código?

Artículo anterior Sensor de presencia RCWL-0516

Dejar un comentario

Los comentarios deben ser aprobados antes de aparecer

* Campos requeridos