La finalidad del proyecto consta en el desarrollo de un contador binario ascendente de 14 bits, con un regulador de velocidad de contador, se utilizo la tarjeta Arduino UNO con ATmega328P para el proyecto.
CONTADOR BINARIO ASCENDENTE DE 14 BITS CON ARDUINO
1. Ing. Fernando Marcos Marcos
1
CONTADOR BINARIO ASCENDENTE DE 14 BITS CON ARDUINO
Marcos Marcos Fernando
e-mail: fmarcos@uabc.edu.mx
RESUMEN: La finalidad del proyecto consta en el
desarrollo de un contador binario de 14 bits ascendente,
con un regulador de velocidad de contador.
1 INTRODUCCIÓN
El desarrollo de sistemas automáticos se ha
tornado aún más sencillo con el uso de
microcontroladores ya que la cantidad de funciones y
aplicaciones que se les puede dar son en verdad
extensas,se puede simplemente jugar con un led (Blink)
hasta hacer sistemas más complejos como una mano
robótica,un carrito, un cuadricoptero pero de hecho esto
también se vuelve más sencillo con el uso de
complementos que se adaptan de manera sencilla al
microcontrolador, se puede decir que los limites en los
usos y/o aplicaciones de los micros están en nuestra
imaginación.
Arduino es una herramienta para hacer que los
ordenadores puedan sentir y controlar el mundo físico a
través de tu ordenador personal. Es una plataforma de
desarrollo de computación física (physical computing) de
código abierto, basada en una placa con un sencillo
microcontrolador y un entorno de desarrollo para crear
software (programas) para la placa.
Arduino puede ser utilizado para crear objetos
interactivos, leyendo datos de una gran variedad de
interruptores y sensores y controlar multitud de tipos de
luces,motores y otros actuadores físicos. Los proyectos
de Arduino pueden ser autónomos o comunicarse con
un programa (software) que se ejecute en tu ordenador
(ej. Flash, Processing, MaxMSP).La placa puedes
montarla tu mismo o comprarla ya lista para usar, y el
software de desarrollo es abierto y lo puedes descargar
gratis.
El lenguaje de programación de Arduino es una
implementación de Wiring, una plataforma de
computación física parecida, que a su vez se basa en
Processing, un entorno de programación multimedia.
2 TEORIA
Contadores
Todos los sistemas digitales complejos contienen
varios contadores. Las misiones de un contador son,
además de la obvia de contar sucesos o periodos de
tiempo o poner en orden secuencial acontecimientos,
otras no tan obvias como dividir una frecuencia,
direccionar y servir como unidades de memoria.
Existen muchos microcontroladores y plataformas
con microcontroladores disponibles para la computación
física. Parallax Basic Stamp, BX-24 de Netmedia,
Phidgets, Handyboard del MIT, y muchos otros ofrecen
funcionalidades similares. Todas estas herramientas
organizan el complicado trabajo de programar un
microcontrolador en paquetes fáciles de usar. Arduino,
además de simplificar el proceso de trabajar con
microcontroladores, ofrece algunas ventajas respecto a
otros sistemas a profesores, estudiantes y amateurs.
Las placas Arduino son más accesibles
comparadas con otras plataformas de
microcontroladores.
Multi-Plataforma
El software de Arduino funciona en los sistemas
operativos Windows, Macintosh OSX y Linux. La
mayoría de los entornos para microcontroladores están
limitados a Windows.
Entorno de programación simple y directo
El entorno de programación de Arduino es fácil de
usar para principiantes ylo suficientemente flexible para
los usuarios avanzados. Pensando en los profesores,
Arduino está basado en el entorno de programación de
Procesing con lo que el estudiante que aprenda a
programar en este entorno se sentirá familiarizado con el
entorno de desarrollo Arduino.
Software ampliable y de código abierto
El software Arduino esta publicado bajo una
licencia libre y preparado para ser ampliado por
programadores experimentados. El lenguaje puede
ampliarse a través de librerías de C++, y si se está
interesado en profundizar en los detalles técnicos, se
puede dar el salto a la programación en el lenguaje AVR
C en el que está basado.De igual modo se puede añadir
directamente código en AVR C en tus programas si así
lo deseas.
Hardware ampliable y de Código abierto
Arduino está basado en los microcontroladores
ATMEGA168, ATMEGA328y ATMEGA1280.
Los planos de los módulos están publicados bajo
licencia Creative Commons, por lo que diseñadores de
circuitos con experiencia pueden hacer su propia versión
del módulo, ampliándolo u optimizándolo. Incluso
usuarios relativamente inexpertos pueden construir la
versión para placa de desarrollo para entender cómo
funciona y ahorrar algo de dinero.
3 DESARROLLO
Lo materiales y/o equipo necesarios para el
proyecto son:
- 1 Potenciómetro de 10kΩ (No importa el valor
de este componente)
- 14 Leds
- 14 Resistencias de 220kΩ
- Computadora
- Plataforma de desarrollo
- Arduinino μc ATmega328P
- Protoboard
- Cable y pinzas peladoras
- Cable USB Arduino
2. Ing. Fernando Marcos Marcos
2
- Fuente de Voltaje
- 2 pares de cable banana – caimán
El circuito que se armo para el proyecto es el
mostrado en la figura 1. Se utilizaron todas las
entradas/salidas digitales de la tarjeta Arduino.
Figura 1. Circuito
Las conexiones realizadas en la figura 1 son muy
sencillas, cada puerto digital va conectada a una
resistencia de 220 Ohms, las cuales a su vez van
conectadas al cátodo de los leds,los ánodos de los leds
están conectadas directamente a tierra. Para el caso del
potenciómetro, un extremo está conectado a tierra
(GND) y el otro a Vcc (5 V), no importa el orden, y la
terminal central variable va conectada al puerto
analógico A0 de la tarjeta Arduino, la cual se
determinara como entrada o lectura, y permitirá el
control de velocidad de conteo.
El contador binario consta de 14 bits, por lo tanto el
número máximo a contar es 11 1111 1111 1111 y el
mínimo es 00 0000 0000 0000, lo que es decimal se
refiere a contar a un máximo de 16,383 y un mínimo de
cero.
Las E/S Digitales están divididas en dos grupos de
registros diferente, lo cual limita a cada registro a un
contador de 8 bits para el caso del PortD y un contador
de 6 bits para el caso del PortB, pero mediante una
conexión en cascada de ambos registros es posible
tener un registro resultante de 14 E/S. Ambos registros
ordenan los bits de derecha a izquierda, donde el
extremo derecho corresponde al bit de menor nivel,
mientras que el bitdel extremo izquierdo corresponde al
bit de mayor nivel.
Para determinar la función de los puertos digitales
ya sea como salidas se utiliza el numero 1 y para el caso
de usarlos como entradas se utiliza el numero 0. A
continuación se muestra un ejemplo sencillo de ambos
registros de puertos (Para el caso de Arduino Uno con
ATmega328P).
Ejemplo 1 para PortD. El siguiente código
determina que los puertos digitales de 1 al 7 se
manejaran como salidas y el puerto digital 0 se manejara
como entrada.
DDRD=B11111110;
Ejemplo 2 para PortB. El siguiente código
determina que los puertos digitales de 13 al 10 se
manejaran como salidas y los puertos digitales 9 y 8 se
manejara como entradas.
DDRB=B111100;
Para el desarrollo de la práctica todos los puertos
digitales se utilizaran como salidas.
Para fines prácticos del proyecto teóricamente hay
un solo registro,es cual es resultante de la conexión en
cascada de los dos registros (PortD y PortB), por lo tanto
el puerto digital 0 corresponde al bit de menor nivel y el
puerto digital 13 corresponde al bitde mayor nivel. En el
diagrama 1 se pueden observar dos contadores,
Contador1 y Contador2 los cuales representan a los
contadores de los Registros PortD y PortB
respectivamente, el contador del Registro PortD
controlara el contador del registro PortB, para ello se han
conectado en cascada
De manera general la lógica utilizada para la
programación se muestra en el diagrama 1.
Diagrama 1. Lógica del contador representado en un
diagrama de flujo.
3. Ing. Fernando Marcos Marcos
3
La programación desarrollada es la siguiente:
void setup(){
DDRD=B11111111; /*Configurando como salida los
puertos D del arduino (pines 0 – 7)*/
DDRB=B111111;} /*Configurando como salida los
puertos B del arduino (pines 8-13)*/
void loop(){
for(int contador2=0;contador2<64;contador2++){
for(int contador1=0;contador1<256;contador1++){
PORTD=byte(contador1);
PORTB=byte(contador2);
delay(map(analogRead(A0),0,1023,0,1000)); }}
}
El control de velocidad se ha programado usando
la función map,la cual nos permite mapear un rango de
valores a otro, en el caso de las lecturas analógicas por
defaultsiempre nos arrojara una lectura del rango del 0
al 1023, pero para el caso práctico, se han mapeado
estos valores al rango de 0 milisegundo a 1000
milisegundos.
El resultado obtenido se muestra en la figura 2.
Figura 2. Circuito mostrando el número decimal 9,319
en binario.
4 ANALISIS DE RESULTADOS
4.1 Discusión de la precisión y exactitud de
los resultados.
El resultado obtenido fue lo que se esperaba.
4.2 Análisis de los posibles errores en los
resultados.
Sin error alguno.
4.3 Descripción de cualquier resultado
anormal.
La velocidad del contador puede variar debido a
que un potenciómetro no es totalmente preciso, pero
para rangos grandes de mapeo resulta ser muy
funcional, como lo fue en este caso.
5 CONCLUSION
El uso de funciones y de registros permite un
ahorro de memoria, tiempo de procesamiento y
recursos, además de agilizar la programación y su
asimilación.
El uso de registros hace posible facilitar el manejo
de las E/S digitales y analógicas, y el dividir los puertos
en tres grupos diferentes de registros afecta de alguna
manera en la complejidad del programa de la práctica,
pero con conocimientos básicos de electrónica digital el
ajuste llega a ser sencillo.
El diseño de este programa desgraciadamente está
limitado a tarjetas arduino con ATmega328P o aquellas
tarjetas que manejen un microcontrolador con una
estructura similar al ATmega328P, ya que los registros
cambian de un microcontrolador a otro (en algunos
casos), para lo cual el usuario tendrá que conocer la
estructura de su tarjeta y sus componentes de hardware
para realizar los cambios pertinentes en el programa, de
lo contrario la programación no será funcional.
6 BIBLIOGRAFIA
Link del diseño electrónico ysimulación
https://www.tinkercad.com/things/1ngBzhbGeNf
http://arduino.cc
http://platea.pntic.mec.es/~lmarti2/arduino/introardu
/index.htm