You are on page 1of 4

1

FUNDAMENTOS DE PROGRAMACIN DE
MICROCONTROLADORES

Resumen En este trabajo se comprendieron y aplicaron los


conceptos de registro de puertos, lectura de pines, y escritura de los
mismos mediante el uso de compuertas lgicas programadas en el
IDE de Arduino e implementadas en el microcontrolador Arduino
Uno basado en ATmega328, con el fin de ser utilizados para censar
un estado (accin real) y emitir una respuesta tal como encender y
apagar un LED, modular el parpadeo del mismo mediante el uso de
un potencimetro.

Palabras clave Registros, microcontrolador, conversor A/D,


Arduino

I. MARCO TERICO
II. DESARROLLO ACTIVIDAD DE CONSULTA
Las variables analgicas requieren una transformacin a 1. Investigar cmo es la secuencia de configuracin del
digital para ser tratadas. conversor ADC del microcontrolador utilizado. Identificar
Cada valor de la seal tiene que estar representada los registros y las funciones de los bits a utilizar.
por un cdigo diferente
Conversin Analgico-Digital (A/D) Un microcontrolador solo entiende seales digitales (1s y
0s), La tarjeta Arduino utiliza un conversor A/D de 10-bits,
Convertidor ADC as que: Resolucin = Vref/1024 Mapear los valores de
Un conversor analgico-digital es un dispositivo electrnico voltaje de entrada, entre 0 y Vref, a valores enteros
capaz de convertir una seal analgica en un valor binario, en comprendidos entre 0 y 1023 (2^n-1). Con otras palabras,
otras palabras, ste se encarga de transformar seales esto quiere decir que nuestros sensores analgicos estn
analgicas a digitales (0 y 1). Los convertidores A/D son caracterizados con un valor comprendido entre 0 y 1023. [2]
dispositivos electrnicos que establecen una relacin
biunvoca entre el valor de la seal en su entrada y la palabra Los registros de puertos permiten una manipulacin de menor
digital obtenida en su salida. La relacin se establece en la nivel y ms rpida de los pines de entrada / salida del
mayora de los casos, con la ayuda de una tensin de microcontrolador en una placa Arduino. Los chips utilizados
referencia. en la placa Arduino (ATmega8 y ATmega168) tienen tres
El dispositivo establece una relacin entre su entrada (seal puertos:
analgica) y su salida (digital) dependiendo de su resolucin.
La resolucin determina la precisin con la que se reproduce B (pin digital 8 a 13)
la seal original. C (clavijas de entrada analgicas)
Un cdigo de entrada es transformado en una tensin o D (pines numricos 0 a 7)
corriente determinada
Correspondencia entre 2^n cdigos de entrada y 2^n Cada puerto est controlado por tres registros, que tambin
tensiones discretas de salida, a partir de una son variables definidas en el lenguaje arduino. El registro
referencia de tensin [1] DDR, determina si el pin es un INPUT u OUTPUT. El
registro PORT controla si el pin es HIGH o LOW, y el registro
Tipos de convertidores A/D PIN lee el estado de los pins INPUT establecidos para la
entrada con pinMode (). Los registros DDR y PORT se
pueden escribir y leer. Los registros PIN corresponden al
estado de las entradas y slo se pueden leer.

DDRx (Data Direction Register): DDRx es un registro que


nos permite indicar el modo de operacin de cada pin del
puerto, la x es para indicar el puerto, si comparamos con el
entorno Arduino DDRx es similar a PinMode en el cual se
debe indicar el nmero de pin y la modalidad de trabajo, en
DDRx debes indicar en una instruccin ambas cosas.
Determina si el pin es una entrada o una salida (1 salida, 0

entrada).
2

El valor de dicho prescalar est definido por los bits ADPS2,


ADPS1 Y ADPS0 es decir los bits 2,1 y 0 de ADCSRA -
Registro de control y estado A.

Estos bits determinan el factor de divisin entre la frecuencia


de reloj del sistema y el reloj de entrada al ADC, de esta
manera dependiendo del valor introducido en cada uno de
Fig 1. Registro DDRx ellos variar el factor de divisin de la frecuencia de reloj
como se observa en la siguiente tabla.
PORTx (Pin Output Register): Este registro se encarga de
escribir el estado de cada uno de los puertos al cual est
controlando, PORTx se encarga por ahora de los pines que
fueron configurados como salida "1", o en Arduino
pinMode(3, OUTPUT); para luego decir
digitalWrite(3,HIGH);. Controla si el pin est en nivel alto (1)
o en nivel bajo (0).

Para una frecuencia de muestreo cercana a 200kHz el


prescalar deber ser 64 por lo tanto los bits ADPS2, ADPS1 y
ADPS0 debern ser escritos como 1 1 0 respectivamente
puesto que:

Fig 2. Registro PORTx

PINx (Pin Input Register): Permite obtener el estado del


puerto en general como tambin de un pin en especfico. Es el
registro donde se cargarn los datos de los pines que se hayan 3. Por medio de un diagrama de flujo describir como es el
configurado como entradas. Permite activar o desactivar los proceso de lectura de un canal ADC en el
pines configurados como salida (para enviar un 1 o un 0) y en microcontrolador.
el caso de las entradas, si ponemos un 1, conectar la entrada
a una resistencia pull-up y si ponemos un 0, dejar la entrada
sin conectar ninguna resistencia. [3]

2. Consultar cual es la velocidad del conversor ADC


programada por defecto en Arduino y determinar que bits
y que valor deberan tener para obtener una frecuencia de
muestreo lo mas cercana a 200 kHz. Fig 3. Conversor A/D

Para el conversor ADC ATmega328/P embebido en nuestra


placa Arduino Uno, el reloj del ADC est configurado a 16 El diagrama de bloques de la Fig.3 muestra la secuencia
MHz sobre un prescalar que por defecto es 128 por lo tanto: desde que la variable fsica entra al sistema hasta que es
transformada a seal digital (cdigo binario). Para dicha
seal ingrese al convertidor anlogo - digital, sta debe ser
muestreada, es decir, se toman valores discretos en instantes
de tiempo de la seal anloga, lo que recibe el nombre de
sampling. Matemticamente es el equivalente a multiplicar la
Debido a que cada conversin en AVR toma 13 ciclos de reloj seal anloga por una secuencia de impulsos de periodo
ADC: constante. Como resultado se obtiene un tren de impulsos con
amplitudes limitadas por la envolvente de la seal analgica.

La velocidad real a la que el Arduino uno muestrea es


aproximadamente 9615 Hz.
3

III. DIAGRAMA ELECTRNICO DEL MONTAJE los pines como salida podemos alternar el envo de
informacin que en este caso se expresa como el encendido y
apagado continuo del LED.

2. Control LED con pulsador

IV. RESULTADOS Y ANLISIS


1. LED Intermitente

int a=0;
int b=0;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
DDRD=4;
PORTD=8;
}

void loop() {
// put your main code here, to run repeatedly:
b=(PIND&8);
if((b==0)&&(b!=a)){
void setup() {
delay(20);
// put your setup code here, to run once:
PIND=4;
DDRD=4;
}
}
Serial.println(b);
a=b;
void loop() {
}
// put your main code here, to run repeatedly:
PIND |=4;
Este cdigo lo que hace es en primer lugar declarar dos
delay (500);
variables de tipo entero, seguido a esto se declara el DDRD en
}
4 porque corresponde al bit 2, y 2^2 es 4 en dicho bit se
conect la salida que corresponde al LED y se lee el PORTD
Se construy un algoritmo que permitiera el parpadeo en la posicin ocho esto debido a que en esta posicin se
continuo de un led, el cual se conect al pin 2 correspondiente encuentra el pulsador que nos dar el estado de 1 o 0. Luego
al bit 2 del puerto D, teniendo en cuenta esto se utiliz la dentro del ciclo infinito lo que se realiza es leer el puerto D
instruccin DDRD igual a 4 puesto que 2^2 es 4, en el ciclo en la posicin tres que como fue mencionado antes
infinito se emple una compuerta or con el fin de que enviara corresponde a la entrada de valores que nos dir si esta en
voltaje a este pin cada 500 ms. qu fue lo declarado en el alto o en bajo y dentro de un if se realiza una comparacin de
delay. que si este es igual a cero y es diferente al valor anterior,
El uso de PIND fue fundamental para el desarrollo de este escribir en el PIND la salida que lo que har es:
proceso adems de posibilitarnos disminuir el nmero de Si se encuentra en alto ejecutar otro ciclo infinito que
instrucciones, puesto que al permitirnos activar o desactivar encender el led debido a que el pulsador gnero el
4

estado en alto, hasta que dicho estado alto pase a // put your setup code here, to run once:
estado bajo nuevamente al abrir el circuito, momento DDRD=4;
en que se sale del ciclo. PORTD=8;
Si no se cumplen las condiciones anteriores no se }
enciende ningn led.
En la construccin de este algoritmo fue necesario entender void loop() {
cmo leer un estado en tiempo real Posicin del interruptor y // put your main code here, to run repeatedly:
emitir una accin, Encendido o apagado del LED, adems de poten=analogRead(A0);
configurarlo de tal manera que el estado del led no cambiara PIND |=8;
apenas se soltaba el pulsador, para ello se compararon los delay(pot);
estados de manera continua. }

3. Control de parpadeo LED con potencimetro V. CONCLUSIONES

El sistema consiste en la implementacin de un circuito que


sea capaz de controlar la velocidad con que parpadea un LED Los sistemas DAC son necesarios cuando se realiza
al ajustar un potencimetro de manera manual. El sistema procesamiento digital de seales, permiten el nexo
est basado en el uso de un microcontrolador al cual se le entre ambos espacios, del mundo real y el digital.
define la configuracin respectiva para que lleve a cabo dicha Durante el desarrollo de la prctica se adquieron las
funcin mediante su programacin. En el sistema se utilizan herramientas necesarias para la programacin,
dos componentes electrnicos (LED y potencimetro), los montaje y puesta en marcha del microcontrolador
cuales, cada componente es asignado al pin correspondiente Atmega168. Se pueden apreciar los diferentes
del Arduino previamente definido. Una vez definido los pines, algoritmos y formas que se tienen para llegar a las
se realiza la configuracin necesaria para que el pin, al cual soluciones de los problemas desde un punto de vista
est conectado el potencimetro, funcione como pin de integral ya que primero se programa, y finalmente se
entrada; este pin ser analgico, de modo que permita la ejecutan las acciones que principalmente se enfocan
lectura del valor analgico presente al variar el valor resistivo en la reaccin ya que al presionar un switch o al
del potencimetro. Posteriormente, este valor es guardado en girar el potencimetro se realiza una accin, lo que
una variable asignada en la programacin que definir un puede resultar muy til en la industria,
tiempo de espera (delay) en el Arduino; del cual el pin de representando al sensado de algn parmetro
salida asignado al LED esperar el tiempo correspondiente al especfico relevante dentro de algn proceso.
delay para encender o apagar el LED. En otras palabras, el Esta prctica nos brind una aproximacin a cmo
valor analgico tomado del potencimetro definir el tiempo funcionan los sistemas de control y/o monitoreo de
de delay del Arduino (detencin del programa) y, de este variables ya que nos mostr cmo mediante el
modo, permitir el control de la velocidad de parpadeo del muestreo continuo de un estado que es procesado se
LED. emite una respuesta digital que se implementara de
forma analogica en el sistema a tratar.

REFERENCIAS
[1] Malpica, N., Borromeo, S. and Vaquero, J. (n.d.). Conversin A/D - D/A.
[online] Universidad Rey Juan Carlos. Available at:
http://www.cartagena99.com/recursos/electronica/apuntes/Electronica_conversio
n_AD_DA.pdf [Accessed 19 Aug. 2017].
[2]"Conversor Analgico-Digital (A/D)", Arduino Playground. [Online].
Available:
https://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix6.
[Accessed: 20- Aug- 2017].
[3]A. Garca and I. Perez, "Sistemas basados en microprocesador". [Online].
Available: http://riubu.ubu.es/bitstream/10259/3562/1/P%C3%A9rez-Garc
%C3%ADa.pdf. [Accessed: 20- Aug- 2017].
[4] ATMEL 8-BIT MICROCONTROLLER WITH 4/8/16/32KBYTESIN-
SYSTEM PROGRAMMABLE FLASH DATASHEET at
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-
ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf

int poten=0;
void setup() {

You might also like