INTRODUCCIÓN
El atmega328P es un CI (circuito integrado) de alto rendimiento que esta basado en un microcontrolador RISC (computador conjunto de instrucciones reducidas), con una memoria de 32KB flash con capacidad de leer entradas mientras esté ejecutando alguna acción en la parte de las salidas. Este dispositivo es uno de los microcontroladores básicos más completos que existe en la actualidad, ya que este posee una memoria EEPROM de 1KB, una memoria SRAM de 2KB, varios periféricos de comunicación (USART), (ICSP), (I2C), Entradas digitales, Entradas analógicas, Salidas digitales, Salidas PWM.
Este dispositivo usualmente se puede encontrar en las placas de ARDUINO, el cual cuenta con su propio software de programación (Arduino IDE) y, es muy usual ver muchos proyectos que está basado en este entorno de programación.
FUNCIONAMIENTO DE TODOS LOS PINES
En esta oportunidad estudiaremos exclusivamente las funciones de cada uno de los pines externos que tiene este µC.
DESCARGAR DATASHEET completo
VCC & GND
Estos pines son propiamente de alimentación, donde GND es (0V), y VCC puede ser 3.3 – 5V, esta alimentación depende mucho del tipo de empaquetado que se usa (DIP), (QFP), (QFN).
CONTROL (RESET)
Este pin cumple la función de reiniciar todo el proceso desde cero. Para este efecto se necesita obligatoria mente realizar las siguientes conexiones.
PUERTO (PB, PC, PD)
Casi todos los pines de los µC están divididos en grupos o en puertos (PuertoB, puertoC, puertoD). En algunos software de programación es necesario saber al pie de la letra estos puertos ya que éste es la dirección física de los pines externos, en el caso del IDE de arduino no es necesario ya que estos puertos están denominados con un número específico.
ARDUINO IDE
int Q0_0=12; // 12 Pertenece a PUERTO PB4 int Q0_1=13; // 13 Pertenece a PUERTO PB5 int Q0_2=14; // 14 Pertenece a PUERTO PC0 int Q0_3=15; // 15 Pertenece a PUERTO PC1 int Q0_4=16; // 16 Pertenece a PUERTO PC2 int Q0_5=17; // 17 Pertenece a PUERTO PC3 int Q0_6=18; // 18 Pertenece a PUERTO PC4 int Q0_7=19; // 19 Pertenece a PUERTO PC5
FUNCIÓN
-
- INT0, INT1; Estas funciones son interruptores, cuya función es interrumpir una acción o un proceso que se está ejecutando en el momento, es decir, si se tiene un cambio de estado en una de estas entradas (previamente designadas en la parte de la programación), el procese que se esta ejecutando dejará de hacer lo que esta haciendo, y dará prioridad a la acción relacionada con los interruptores.ARDUINO IDE
void setup() { attachInterrupt(digitalPinToInterrupt(2),velocidadMenos,RISING); //Habilitando la función INT0 attachInterrupt(digitalPinToInterrupt(3),velocidadMas ,RISING); //Habilitando la función INT1 } void velocidadMenos(){ //ACCIÓN A EJECUTAR } void velocidadMas(){ //ACCIÓN A EJECUTAR }
- XTAL1, XTAL2; estas funciones son para colocar los osciladores o los crytals. Para usar en con el software de arduino usualmente se usa de 16Mhz y va conectado con unos capacitores de 22pF en cada pin asi como se muestra en la siguiente imagen.
- INT0, INT1; Estas funciones son interruptores, cuya función es interrumpir una acción o un proceso que se está ejecutando en el momento, es decir, si se tiene un cambio de estado en una de estas entradas (previamente designadas en la parte de la programación), el procese que se esta ejecutando dejará de hacer lo que esta haciendo, y dará prioridad a la acción relacionada con los interruptores.ARDUINO IDE
PINES DE ENTRADAS ANALÓGICAS (A0 -A5)
Como su nombre lo indica estos puertos son propiamente para las entradas analógicas que tienen una resolución de 10 Bits C/U, lo que en números decimales sería 0 – 1023, con estos valores se trabajará en la parte de la programación.
if(tecla){ digitalWrite (al,HIGH); if(analogRead(A2)<250){ digitalWrite(lamp,HIGH); } if(analogRead(A2)>250){ digitalWrite(lamp,LOW); } } if (buttonState==HIGH){ digitalWrite(lamp,LOW); digitalWrite (al,LOW); }
PINES DE SALIDAS PWM
En este dispositivo contaremos con 6 salidas PWM (modulación por ancho de pulso), que tienen una resolución de 8 Bits, lo que en números decimales serían 0 a 255, con lo cual se trabajará en la parte de la programación. A continuación se muestra un ejemplo de control de un motor DC, donde 0 es la velocidad mínima y 255 es la velocidad máxima.
int Motor = 6; // declaramos las variables de tipo entero int entrada_analogica= A0; void setup() { pinMode (Motor, OUTPUT); // designamos los pines como pines de salida y entrada pinMode (entrada_analogica, INPUT); // entrada } void loop() { //entramos a un siclo repetitivo int valor_entrada_analogica =0; // declaramos las variables de tipo entero int valor_salida_pwm=0; // declaramos la variable de tipo entero para la ulizacion de la modulacion por ancho de pulso // ojo ( estos pines tienes que ser pines de (PWM) valor_entrada_analogica = analogRead(entrada_analogica); // Guardamos la lectura analogica en la variable (valor_entrada_analógica) valor_salida_pwm =map(valor_entrada_analogica,0, 1023,0,255); // guardamos el mapeo en la variable (valor salida) analogWrite(Motor, valor_salida_pwm); // manifestamos en el led la lectura analogica que hemos reducido de( 0 - 255) // donde 0 es 0 voltios y 255 viene ser 5 voltios }