P05 Introduccion A Arduino
P05 Introduccion A Arduino
P05 Introduccion A Arduino
Especificaciones técnicas
Microcontrolador Primario ATmega328
Microcontrolador Secundario ATmega16
Voltaje de operación +5 V
Entrada de voltaje externo 6-20 V
Entradas/Salidas Digitales 14 (de las cuales 6 son Salidas
PWM)
Entradas Analógicas 6
Corriente DC para cada pin E/S 40 mA
Memoria de Código Flash ROM 32 KByte
Memoria de Datos SRAM 2 KByte
Memoria de Datos EEPROM 1 Kbyte
Conector ICSP 1
Frecuencia de Reloj 16 MHz
Microcontrolador Primario
El microcontrolador que lleva la placa Arduino UNO es el modelo ATmega328 de la marca Atmel que
tiene una arquitectura de tipo AVR, arquitectura desarrollada por Atmel y en cierta medida
“competencia” de otras arquitecturas como por ejemplo la PIC del fabricante Microchip. Más
concretamente, el ATmega328P pertenece a la subfamilia de microcontroladores “megaAVR”.
La figura muestra el patillaje del ATmega328P, que muestra qué pin es el que recibe la alimentación
eléctrica (“VCC”), qué dos pines están conectados a tierra (“GND”), qué pines son los de E/S (señalados
como PBx, PCx o PDx) y la existencia de otros pines más específicos como el AVCC (alimentación para el
convertidor analógico-digital) o el AREF (referencia analógica). También se puede observar que junto al
nombre de los pines de E/S se indica entre paréntesis las funciones especializadas que cada uno de ellos
tiene en particular (además de su función genérica de entrada/salida).
Patillaje ATMEGA328
Nota: Los números de pin del ATMEGA328 NO representan los números de pin en la Placa Arduino
Microcontrolador Secundario
La conexión USB de la placa Arduino, además de servir como alimentación eléctrica, sobre todo es un
medio para poder transmitir datos entre el computador y la placa, y viceversa. Este tráfico de
información que se realiza entre ambos aparatos se logra a través del uso del protocolo USB, un
protocolo de tipo serie que el computador es capaz de entender y manejar.
No obstante, el protocolo USB es demasiado complejo para que el microcontrolador ATmega328 pueda
manejarlo por sí mismo. La placa Arduino UNO R3 dispone de un chip que realiza esta función de
“traductor” del protocolo USB a un protocolo Serie RS-232 más sencillo (y viceversa). Ese chip es el
ATmega16U2. El ATmega16U2 es un microcontrolador en sí mismo con su propia CPU, con su propia
memoria (16 Kilobytes de memoria ROM Flash) cuya única función es traducir entre USB y RS-232.
Pines de alimentación (Power Pins)
VIN: se trata de la fuente tensión de entrada que contendrá la tensión a la que se alimenta a la
tarjeta Arduino mediante la fuente externa.
5V: fuente de tensión regulada de +5V, esta tensión puede venir ya sea del pin VIN a través de
un regulador interno, o se suministra a través de USB o de otra fuente de +5V regulada.
3.3V: fuente de 3.3 voltios generados por el regulador interno con un consumo máximo de
corriente de 50mA.
GND: pines de tierra.
Entradas/Salidas Digitales
Cada uno de los 14 pines digitales se puede utilizar como una entrada o salida. Cada pin puede
proporcionar o recibir un máximo de 40mA. Además, algunos pines tienen funciones especializadas
como:
Pin 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y la transmisión (TX) de datos serie TTL.
Pin 2 y 3. Interrupciones externas. Se trata de pines encargados de interrumpir el programa
secuencial establecido por el usuario.
Pin 3, 5, 6, 9, 10 y 11. PWM (modulación por ancho de pulso). Constituyen bits de salida PWM
con la función analogWrite().
Pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines son de apoyo a la comunicación SPI.
Pin 13. LED. Hay un LED incorporado y conectado al pin digital 13. Cuando el pin es de alto
valor, el LED está encendido, cuando el valor está bajo, esta pagado.
Entradas Analógicas
El Arduino posee 6 entradas analógicas, etiquetadas desde la A0 a A5, cada una de las cuales ofrecen 10
bits de resolución (es decir, 1024 estados). Por defecto, se tiene una tensión de +5V, pero se puede
cambiar este rango utilizando el pin de AREF y utilizando la función analogReference(), donde se
introduce una señal externa de voltaje continuo que se usará como referencia.
Memoria Flash
Memoria persistente donde se almacena permanentemente el programa que ejecuta el
microcontrolador (hasta una nueva reescritura si se da el caso). En el caso del ATmega328P tiene una
capacidad de 32KB.
En los microcontroladores que vienen incluidos en la placa Arduino no se puede usar toda la capacidad
de la memoria Flash porque existen 512 bytes (el llamado “bootloader block”) ya ocupados por un código
pre-programado de fábrica (el llamado “bootloader” o “gestor de arranque”), el cual permite usar la
placa Arduino de una forma sencilla y cómoda sin tener que conocer las interioridades electrónicas más
avanzadas del microcontrolador.
Memoria SRAM
Memoria volátil donde se alojan los datos que en ese instante el programa necesita crear o manipular
para su correcto funcionamiento. Estos datos suelen tener un contenido variable a lo largo del tiempo
de ejecución del programa y cada uno es de un tipo concreto (es decir, un dato puede contener un valor
numérico entero, otro un número decimal, otro un valor de tipo carácter, también pueden ser cadenas
de texto fijas u otros tipos de datos más especiales). Independientemente del tipo de dato, su valor
siempre será eliminado cuando se deje de alimentar eléctricamente al microcontrolador. En el caso del
ATmega328P esta memoria tiene una capacidad de 2KB.
Memoria EEPROM
Memoria persistente donde se almacenan datos que se desea que permanezcan grabados una vez
apagado el microcontrolador para poderlos usar posteriormente en siguientes reinicios. En el caso del
ATmega328P esta memoria tiene una capacidad de 1 KB, por lo que se puede entender como una tabla
de 1024 posiciones de un byte cada una.
El conector ICSP
La sigla ICSP (“In Circuit Serial Programming”) se refiere a un método para programar directamente
microcontroladores de tipo AVR y PIC. Se sabe que la función de un bootloader es permitir cargar
nuestros programas al microcontrolador conectando la placa a nuestro computador mediante un simple
cable USB estándar, pero si ese microcontrolador no tiene grabado ningún bootloader, la escritura de su
memoria no se puede realizar de esta forma tan sencilla y debemos utilizar otros métodos, como el ICSP.
Esta situación se puede encontrar cuando, por ejemplo, se desea reemplazar el microcontrolador DIP de
una placa Arduino UNO por otro que hayamos adquirido por separado sin bootloader incorporado. En
este caso se puede optar por usar el método ICSP para grabar un bootloader (para así volver a poderlo
programar vía USB directamente; de hecho, así es como se han grabado precisamente los bootloaders
en los microcontroladores de las placas Arduino que vienen de fábrica) o también para grabar
directamente siempre los programas sin tener que usar ningún bootloader nunca (con la ventaja de
disponer entonces de más espacio libre en la memoria Flash del microcontrolador –el que ocuparía el
bootloader si estuviera– y de poder ejecutar nuestros programas inmediatamente después de que la
placa reciba alimentación eléctrica sin tener que esperar a la ejecución de un bootloader inexistente).
Otra situación en la que nos puede interesar utilizar el método ICSP es cuando se quiere sobrescribir el
bootloader existente por otro, porque el original se haya corrompido, por ejemplo.
Para poder programar un microcontrolador adherido a alguna placa Arduino mediante el método ICSP
se necesita un aparato hardware específico, el “programador ISP”. Existen varias formas y modelos, pero
hoy en día la versión más extendida de programador ISP es la de un dispositivo que consta por un lado
de un conector USB para conectar al computador, por otro de un conector ICSP listo para acoplar a la
tarjeta Arduino.
El reloj
Para marcar el ritmo de:
la ejecución de las instrucciones en el microcontrolador
la lectura y escritura de los datos en su(s) memoria(s)
adquisición de datos en los pines de entrada
envío de datos hacia los pines de salidas
Y en general, para controlar la frecuencia de trabajo del microcontrolador, la placa Arduino posee un
reloj, el cual funciona a una frecuencia de 16 millones de hercios (16MHz). Esto quiere decir que
(aproximadamente) el microprocesador es capaz de realizar 16 millones de instrucciones en cada
segundo.
Descripción
Por el puerto PD del ATMEGA328 se obtiene un valor en binario a través de 8 interruptores.
Este valor me muestra en el dispclay LCD en base Decimal y Hexadecimal
*** El archivo .hex generado por Mikroc será subido (uploaded) a la tarjeta Arduino usando el software
XLOADER
Diagrama esquemático
Código fuente MikroC Pro for AVR