Icono del sitio ELECTROALL

Funcionamiento de todos los pines del microcontrolador ATMEGA328P

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.

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.
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

}
Salir de la versión móvil