¿Qué Son los Registros de Configuración? (Programando Microcontroladores)

Por este tiempo, la electrónica digital se ha vuelto una parte casi indispensable de nuestro entorno, computadoras, teléfonos inteligentes, electrodomésticos inteligentes,el auge de la domótica, etc. Por esta razón se hace absolutamente necesario que quien se dedique al diseño electrónico, o incluso quien lo tome como hobby, tenga buenas bases en lo que tiene que ver con la programación y el uso de microcontroladores, hoy iniciamos una serie de artículos/tutoriales para mostrar un poco sobre este apasionante mundo y dar las bases necesarias para comprender y desarrollar proyectos de mayor índole, que finalmente seguirán en cierto modo los mismos aspectos que trataremos aquí.

¿Qué es un microcontrolador?

A grandes rasgos vamos a definir un microcontrolador como un circuito integrado que es capaz de ejecutar las ordenes que han sido cargadas en su memoria después de un proceso de programación, este tipo de circuito es muy particular dada su versatilidad y funcionalidad, la característica principal de los microcontroladores, es que a diferencia de los microprocesadores, los primeros se encuentran en aquel circuito integrado (pastilla de silicio, por ejemplo) donde además de poseer una unidad central de procesamiento (CPU o microprocesador) contiene unidades de memoria y periféricos de entrada y salida de datos, por lo tanto son 3 los elementos principales que componen un microcontrolador, evidentemente esto es básico y microcontroladores de más alta gama pueden presentar funcionalidades mayores.

Microcontrolador Atmel de montaje superficial SMD.

Microcontrolador Atmel de montaje superficial SMD.

¿Entonces que son los registros de configuración?

Como ya hemos mencionado, debido a que el microcontrolador contiene internamente diferentes módulos por ejemplo de lectura y escritura de puerto (o pines), módulo conversor de señales analógicas a digitales (ADC), temporizadores, etc. Se hace necesario configurar cada uno de los módulos que vayamos a usar para que el microcontrolador entienda que proceso debe realizar, cómo y para qué.

Es en este punto donde aparecen como primera instancia los registros de configuración, estos ‘registros‘ nos van a permitir (cómo su nombre lo indica), configurar cada una de las opciones que necesitemos para nuestra aplicación en específico. Normalmente los registros de configuración son un conjunto de 8 bits (dependiendo del microcontrolador utilizado) y en el cual, cada uno de esos bits activa o desactiva alguna configuración en específico, es este comportamiento el que nos permite realizar una configuración adecuada de un sistema microcontrolado.

A modo de ejemplo vamos a ver el registro de configuración más básico cuando queremos hacer nuestro primer programa (aquí solo trabajaremos con microcontroladores de Atmel, aunque la teoría es extensible a otras plataformas), el registro del que hablamos es el DDRx donde ‘X‘ representa la letra que identifica al puerto del microcontrolador que vamos a usar, aquí vamos a hacer un paréntesis para mostrarte en la siguiente figura a que nos referimos cuando hablamos de un puerto del microcontrolador, en este caso, vamos a ver el microcontrolador AtMega16A y sus 4 puertos A, B, C y D.

Puertos de un microntrolador (en este caso el AtMega16A)

Puertos de un microntrolador (en este caso el AtMega16A)

Como se puede notar, los puertos de un microcontrolador hacen referencia a un conjunto o grupo de pines que pueden representar bits (1s y 0s que salen a través de ellos), entonces lo que se hace con el registro que mencionábamos anteriormente (registro DDRx) es indicarle al microcontrolador cuales pines del puerto ‘X’ queremos que se comporten como entrada o salida (esto lo veremos mejor en otro artículo), por lo tanto un registro de configuración tiene la siguiente forma (normalmente los registros son de 8 bits) tal como se muestra en la siguiente figura.

Representación típica de un registro de 8 bits genérico.

Representación típica de un registro de 8 bits genérico.

Continuando con el ejemplo del registro de configuración DDR, cada bit de este registro (0,1,2,3,4…) va a representar el comportamiento como entrada o como salida de cada uno de los pines de ese determinado puerto ‘X’, por lo tanto, teniendo en cuenta que si se pone un ‘1’ significa que el pin se comportará como salida y un ‘0’ (cero) significa que el pin se comportará como entrada, entonces si queremos decir que todos los pines del ‘puerto A’ se comportan como salidas, el registro de configuración del puerto A (DDRA) tendrá el siguiente aspecto.
Valores en el registro DDRA con todos los pines del puerto A como salida.

Valores en el registro DDRA con todos los pines del puerto A como salida.

De esta forma de ahora en adelante todos los pines del puerto A se comportarán como salida, es decir, que solo habrán valores de 0 y 5 voltios y no se realizará a través de ellos ninguna lectura, un ejemplo más es, si por algún motivo quiero que de los 8 pines del puerto B de mi microcontrolador, 4 se comporten como entrada y 4 como salida, (esto te lo dejamos de tarea, para saber que valores hay que poner, revisa lo que escribimos anteriormente).

¿Cómo Modificar los Registros y Configurar el Microcontrolador?

Ahora ya hemos entendido, para que sirven los registros de configuración, su comportamiento principal es ser modificados y decir entonces como van a operar ciertos módulos, puertos, etc. A continuación vamos a ver un par de notaciones que se utilizan a la hora de escribir en un registro, para esto vamos a tener que recordar algo sobre los números en base 16 o números en representación hexadecimal.

  • Los números hexadecimales van del 0 a la F, donde F=15
  •  Cada valor hexadecimal está representado por 4 bits (valores en binario)

Teniendo lo anterior en cuenta recomendamos recordar lo básico sobre número binarios y hexadecimales, así se te hará la vida más fácil y comprenderás los próximos artículos rápidamente.

Entonces la representación en binario del número F0 sería la siguiente:

Representación en binario del número hexadecimal F0.

Representación en binario del número hexadecimal F0.

Luego, vamos a tener en cuenta que para escribir un número en base 16 (un número hexadecimal) en un microcontrolador o en lenguajeC‘ en general, hay que iniciar con un 0x y luego el número (por ejemplo 0xF0) sería la representación del número de la figura anterior dentro de nuestro programa, finalmente sabiendo todo lo anterior, la conclusión es obvia, ¿que debo hacer si quiero hacer que 4 pines de mi puerto B (por ejemplo) se comporten como salida y los otros 4 como entrada?, simple, solo tienes que escribir en el registro correspondiente DDRB el número en hexadecimal que escriba los 1s y 0s donde quieras, para resolver esta pregunta, lo que hay que hacer es una asignación o igualación simple como en la siguiente figura.

escribir en un registro DDR avr

Al hacer la operación anterior, nuestro registro de configuración del puerto B queda con los siguientes valores:

Valores en el registro DDRB al escribir el número hexadecimal 0xF0.

Valores en el registro DDRB al escribir el número hexadecimal 0xF0.

Entonces la anterior es una de las formas de manipular los registros de configuración, mediante la notación hexadecimal, sin embargo con respecto a esto, hay una buena flexibilidad, entonces sino recuerdas bien lo que tiene que ver con los valores hexadecimales (tenerlos presentes sería lo más apropiado) entonces podemos indicar donde poner unos y ceros explícitamente con la notación binaria, de esta forma podemos usar una ‘fila’ de 8 valores de unos y ceros, por ejemplo otra forma de configurar el registro DDRB que veíamos anteriormente es:

Otra forma de escribir en los registros, con notación binaria indicada con 0b.

Otra forma de escribir en los registros, con notación binaria indicada con 0b.

En este caso, tal como pasaba con el prefijo ‘0x’ para indicar que el valor era hexadecimal, se debe anteponer ahora el prefijo ‘ob’ para indicar que el valor siguiente está dado en notación binaria, así, la notación anterior escribirá cada cero o uno en la correspondiente posición de bit en el registro DDRB, por esta razón el valor contiene 8 números.

Por último, la siguiente forma de modificar los valores de los registros es con la notación de desplazamiento de bits o como la llamo yo, la forma de “poner bits”,  y esta denominación, porque se trata simplemente de eso, de poner bits en una posición específica, aquí hay que introducir un nuevo concepto y es que en los microcontroladores, cada bit de un registro de configuración tiene un nombre específico, que generalmente hacen referencia a la función que desempeña dicho bit, por ejemplo al hablar de los pines de cada puerto, el registro DDRB tiene los siguientes nombres:

Nombre de cada uno de los bits del registro DDRB corresponeidnte al comportamiento individual de cada pin.

Nombre de cada uno de los bits del registro DDRB corresponeidnte al comportamiento individual de cada pin.

Esto no ocurre solo con el registro DDRx, sino con todos y cada uno de los registros que existen para cada uno de los módulos del microcontrolador, en el caso del DDR, dado que existen varios puertos, solo cambiará la letra de en medio, la cual indica el nombre del puerto, por lo tanto si vemos el caso del los nombres de los bits para el puerto ‘D’ estos serían PD7, PD6, PD5…PD0, y así para los de,más puertos.

Entonces la forma en que escribiríamos un 1 o 0 en cada uno de los bits individuales para configurar los pines del puerto B por ejemplo, sería:

accediendo a los bits individuales de un registro

En este tipo de notación, se coloca el símbolo | (barra) dado que es un operador a nivel de bits (operador OR) y por lo tanto al hacer uso de él, no alteramos los valores anteriores presentes en el registro en cuestión, esto se irá aprendiendo con la práctica.

Este último tipo de notación no es tan común cuando vamos a configurar el comportamiento de los pines (con los registros DDRx) pero si resulta bastante útil cuando vamos a realizar la configuración de diferentes módulo como TIMERS, ADC, USART, etc. los cuales requieren modificar bits específicos para que cumplan con el funcionamiento que nosotros queremos.

¡Bien!, hasta aquí este artículo introductorio con este importante tema, de ahora en adelante, si comprendes para que sirven los registros de configuración, cuales son las notaciones comúnmente usadas a la hora de trabajar con ellos y como acceder y modificar los mismos individualmente, ya tienes un gran terreno ganado en este gran mundo de los microcontroladores, en las próximas entregas de esta serie veremos ejemplos y aplicaciones prácticas, así que paciencia y muchos éxitos.

Espero que esta información te haya resultado útil, si crees que puede ser útil para alguien más, ayúdanos a compartirla para llegue a más personas.

Saludos.

Autor: Julio César E. Marulanda.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s