Lab # 02 Introduction to AVR Microcontroller Hardware Circuitry and Digital I/O Ports

 


COMSATS UNIVERSITY ISLAMABAD


MICROPROCESSOR SYSTEMS AND INTERFACING

                        LAB REPORT 2

SUBMITTED TO:

SIR KHIYAM IFTIKHAR

SUBMITTED BY:

JUNAID AHMAD

Ibrar ahmad

Jarrar malik

REGISTRATION NO:

CIIT/FA19-BEE-089/ISB

CIIT/fa19-bee-083/isb

CIIT/fa19-bee-087/isb

DATE:

01-10-2021

Introduction to AVR Microcontroller Hardware Circuitry and Digital I/O Ports

Objectives:

      Understand the minimal circuit required to start using a microcontroller 

      Learn to program (download code to program memory of) a microcontroller using Arduino board.

      To understand and use digital I/O ports of AVR microcontroller

Required Tools:

Software Tools:

      Microchip Studio (Version 7) or AVR Studio (Version 4)

      Proteus ISIS

      Arduino IDE

      AVRDUDESS

 

PRE-LAB:

Task 1:

Enlist 5 peripherals (Devices) that can be interfaced with Atmega328P Microcontroller.

1.      LCD display

2.      Keypad

3.      Control motor

4.      It can be used to control for IOT things

5.      Analog input to digital output

 

 

In Lab:

Task 1:

 

Write and test following program in AVR Studio/Atmel Studio. Also, simulate it on Proteus.

 

/*This code will configure Port B for output and then toggle

 Port B pin 3 with a delay of 1000ms*/

#include <avr/io.h>        /*This header file includes the apropriate

                           I/O definitions for the device */ 

#define F_CPU 16000000UL   //XTAL Frequency =16MHz

#include <util/delay.h>    /*This header file is required for                             generating delays*/ int main()

 {  // Write your code here

   DDRB = 0b11111111;  //Configure Port B as Output    while(1)            //This loop will run forever

   {

    PORTB = 0b00001000;  /*Send 1 on Port B Pin 3,                        rest of the pins are zero*/       _delay_ms(1000);     //Delay of 1000ms

      PORTB = 0b00000000;  //Send 0 on Port B Pin 3

      _delay_ms(1000);     //Delay of 1000ms

   } }

 


Hex file to ATMega328P:


 

Burning .Hex file to ATMega328P:




Task 2:

 

Switches are connected to one port of ATmega328p for input and LEDs are connected to another port for output. Using these, perform a task assigned by your lab instructor. Students should write the code for given task, simulate it on proteus and then implement it on hardware.


/*

 * LAB2 TASK2.c

 *

 * Created: 12/12/2021 3:25:38 PM

 * Author : AEGON

 */

 

#ifndef F_CPU

#define F_CPU 16000000UL // telling controller crystal frequency (16 MHz AVR ATMega328P)

#endif

 

#include <avr/io.h> //header to enable data flow control over pins. Defines pins, ports, etc.

#include <util/delay.h> //header to enable delay function in program

 

#define BUTTON1 1 // button switch connected to port B pin 1

 

#define LED1 0 // Led1 connected to port B pin 0

#define LED2 1 // Led2 connected to port C pin 1

#define LED3 2 // Led3 connected to port D pin 2

 

#define DEBOUNCE_TIME 25 // time to wait while "de-bouncing" button

#define LOCK_INPUT_TIME 300 // time to wait after a button press

 

void init_ports_mcu()

{

       DDRB=0xFF; // Set all pins of the PORTB as output.

       DDRB &= ~(1<<BUTTON1);//Makes first pin of PORTB as Input

       PORTB = 0xFF;  // Set all pins of the PORTB as HIGH. Led is turn on, also the internal Pull Up resistor of first pin PORTB is enable.

 

      

       DDRC=0xFF; // Set all pins of the PORTC as output.

       PORTC=0x00; // Set all pins of PORTC low which turns it off.

 

       DDRD=0xFF; // Set all pins of the PORTD as output.

       PORTD=0x00; // Set all pins of PORTD low which turns it off.

}

 

unsigned char button_state()

{

       /* the button is pressed when BUTTON1 bit is clear */

       if (!(PINB & (1<<BUTTON1)))

       {

              _delay_ms(DEBOUNCE_TIME);

              if (!(PINB & (1<<BUTTON1))) return 1;

       }

       return 0;

}

 

int main (void)

{

       unsigned char n_led = 1; // LED number is on now

       init_ports_mcu();

       while (1)

       {

              if (button_state()) // If the button is pressed, toggle the LED's state and delay for 300ms (#define LOCK_INPUT_TIME)

              {

 

                     switch(n_led){

                           case 1:

                           PORTB ^= (1<<LED1); // toggling the current state of the pin LED1. LED1 is turn off.

                           PORTC ^= (1<<LED2); // toggling the current state of the pin LED2. LED2 is turn on.

                           break;

                           case 2:

                           PORTC ^= (1<<LED2); // toggling the current state of the pin LED2. LED2 is turn off.

                           PORTD ^= (1<<LED3); // toggling the current state of the pin LED3. LED3 is turn on.

                           break;

                           case 3:

                           PORTD ^= (1<<LED3); // toggling the current state of the pin LED3. LED3 is turn off.

                           PORTB ^= (1<<LED1); // toggling the current state of the pin LED1. LED1 is turn on.

                           n_led=0; // reset LED number

                           break;

                     }

                     n_led++; // next LED is turn on

                     _delay_ms(LOCK_INPUT_TIME);

              }

       }

       return (0);

}

CRITICAL ANALYSIS:

In this lab we got to know about AVR Microcontroller. we also understood ARDUINO UNO characteristics of Reset Switch Button, TX, Rx, USB Port, and its pinout configuration. Moreover, ATMega328P has 23 I/O pins to interact with outside world in the form of logic values. Each of the I/O port is associated with three I/O registers i.e. DDRx, PORTx, PINx where x is the port B,C or D. AVRDUDESS was used to upload the hex file generated by software programming in AVR microcontroller. Firstly, we built the program given in the lab manual on AVR Studio and simulated it on proteus to check the functioning of LED according to the given code. The LED started blinking with a certain delay of 1msec given in the code The settings (baud rate, COM port etc) were modified in the device manager window. After clicking the program button, the program got burned into ATMega328p memory and we could see the LED blinking with a certain time delay.



SORUCE FILE :-https://github.com/hiibrarahmad/Lab-02-Introduction-to-AVR-Microcontroller-Hardware-Circuitry-and-Digital-I-O-Ports

Post a Comment

Post a Comment (0)

Previous Post Next Post