EMSLabManual DevanshRamdurgekar 0801EC221025
EMSLabManual DevanshRamdurgekar 0801EC221025
LABORATORY JOURNAL
Certificate
This is to certify that Ms./Mr.
Roll No. studying in
Year of this institute has completed a practical course based
on the syllabus and given a satisfactory account of it in the notebook containing a
record of the laboratory work.
Date: Signature
Grade: Professor in charge
2
INDEX
Experiment submission
To blink multiple LEDs on a single port using AVR
1. 8/01/25 ATmega32 Microcontroller. 13/01/25
AIM : To blink multiple LEDs on a single port using AVR ATmega32 Microcontroller.
Code :
start:
ldi r16, 0xff
out ddrd, r16
ldi r17, 0xff
hi : out portd,r17
call delay
ldi r20, 0xaa
out portd, r20
call delay
ldi r21, 0x55
out portd,r21
call delay
ldi r18,0x00
out portd,r18
call delay
rjmp hi
delay:
ldi r19,240
l3 : ldi r20,240
l2 : dec r20
brne l2
dec r19
brne l3
ret
4
OUTPUT :
5
EXPERIMENT - 2
AIM : To blink multiple LEDs with corresponding Switches using AVR ATmega32
Microcontroller
Components Used : LEDs, Switches, AVR ATmega32 Microcontroller IC and connecting wires.
Code :
start:
ldi r16, 0xff
ldi r17, 0x00
out ddrd, r16
out ddrb, r15
hi: in r20, 0x16
out portd, r20
call delay
rjmp hi
delay:
ldi r19,240
l3 : ldi r20,240
l2 : dec r20
brne l2
dec r19
brne l3
ret
6
OUTPUT :
7
EXPERIMENT - 3
Components Used : LEDs, Switches, AVR ATmega32 Microcontroller IC and connecting wires.
Code :
8
OUTPUT :
9
EXPERIMENT - 4
AIM : To control two Stepper Motors using ULN2003A motor drivers and AVR ATmega32
Microcontroller
Components Used : Stepper Motors, Motor Drivers, Switches, AVR ATmega32 Microcontroller
IC and connecting wires.
Code :
#include <xc.h>
#include <avr/io.h>
#include <util/delay.h>
#define step_angle 1.8
#define step_delay 5000
#define F_CPU 80000000
int main(void)
{
DDRC = 0xff;
DDRA = 0x00;
int steps = 90/ step_angle;
void clock_anticlock(){
for (int i =0 ; i < steps/4;i++){
PORTC = 0x18; _delay_ms(step_delay);
PORTC = 0x24; _delay_ms(step_delay);
PORTC = 0x42; _delay_ms(step_delay);
PORTC = 0x81; _delay_ms(step_delay);
}
}
void anticlock_clock(){
for (int i =0 ; i < steps/4;i++){
PORTC = 0x81; _delay_ms(step_delay);
PORTC = 0x42; _delay_ms(step_delay);
PORTC = 0x24; _delay_ms(step_delay);
PORTC = 0x18; _delay_ms(step_delay);
}
}
void clock_clock(){
for (int i =0 ; i < steps/4;i++){
PORTC = 0x88; _delay_ms(step_delay);
PORTC = 0x44; _delay_ms(step_delay);
10
PORTC = 0x22; _delay_ms(step_delay);
PORTC = 0x11; _delay_ms(step_delay);
}
}
void anticlock_anticlock(){
for (int i =0 ; i < steps/4;i++){
PORTC = 0x11; _delay_ms(step_delay);
PORTC = 0x22; _delay_ms(step_delay);
PORTC = 0x44; _delay_ms(step_delay);
PORTC = 0x88; _delay_ms(step_delay);
}
}
if(PINA==0x00) { clock_clock(); }
if(PINA==0x01) { clock_anticlock(); }
if(PINA==0x10) { anticlock_clock(); }
if(PINA==0x11) { anticlock_anticlock(); }
while(1);
}
OUTPUT :
11
EXPERIMENT - 5
AIM : To control single Stepper Motor using ULN2003A motor driver and AVR ATmega32
Microcontroller
Components Used : Stepper Motor, Motor Driver, AVR ATmega32 Microcontroller IC and
connecting wires.
Code :
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
DDRC = 0x0F; // Configure only lower 4 bits of PORTC as output (for one stepper motor)
12
OUTPUT :
13
EXPERIMENT - 6
Components Used : A 16x2 LCD Screen, Resistor, AVR ATmega32 Microcontroller IC and
connecting wires.
Code :
#ifndef F_CPU
#define F_CPU 16000000UL // Clock speed is 16 MHz
#endif
#include <avr/io.h>
#include <util/delay.h>
14
PORTB &= ~(1 << LCD_EN); // EN = 0
_delay_ms(2);
}
int main(void) {
LCD_Init(); // Initialize the LCD
while (1) {
LCD_Command(0x80); // Move cursor to first line
LCD_String("Hello, World!");
return 0;
}
15
OUTPUT :
16
EXPERIMENT - 7
AIM : To design counters on Seven Segment Display using AVR ATmega32 Microcontroller
Code 1 :
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1000000UL
void init_ports() {
DDRC = 0xFF; // Set PORTC as output
PORTC = 0x00; // Initialize PORTC to 0
DDRB = 0xFF; // Set PORTC as output
PORTB = 0x00; // Initialize PORTC to 0
DDRD = 0xFF; // Set PORTC as output
PORTD = 0x00; // Initialize PORTC to 0
}
int main(void) {
unsigned char i,j,k;
init_ports();
while (1) {
17
PORTB = 0X00;
PORTC = 0X00;
PORTD = 0X00;
for (i=0;i<=9;i++)
{
PORTC=seg_digit[i];
for (j=0;j<=9;j++)
{
PORTB=seg_digit[j];
for (k=0;k<=9;k++)
{
PORTD=seg_digit[k];
_delay_ms(200);
}
_delay_ms(200);
}
}
}
return 0;
}
OUTPUT 1 :
18
Code 2 :
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1000000UL
void init_ports() {
DDRC = 0xFF; // Set PORTC as output
PORTC = 0x00; // Initialize PORTC to 0
DDRB = 0xFF; // Set PORTB as output
PORTB = 0x00; // Initialize PORTB to 0
}
int main(void) {
unsigned char i, j;
init_ports();
while (1) {
PORTB = 0X00;
PORTC = 0X00;
for (i = 0; i <= 9; i++) {
PORTC = seg_digit[i];
for (j = 0; j <= 9; j++) {
PORTB = seg_digit[j];
_delay_ms(200);
}
}
}
return 0;
}
19
Output 2 :
Code 3 :
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1000000UL
void init_ports() {
DDRC = 0xFF; // Set PORTC as output
20
PORTC = 0x00; // Initialize PORTC to 0
}
int main(void) {
unsigned char i;
init_ports();
while (1) {
PORTC = 0X00;
for (i = 0; i <= 9; i++) {
PORTC = seg_digit[i];
_delay_ms(200);
}
}
return 0;
}
Output 3 :
21
EXPERIMENT - 8
AIM : To generate square waveform with 50% dutycycle using AVR ATmega32 microcontroller.
start:
ldi r16, 0xff
ldi r17, 0x00
out ddrd, r16
out ddrb, r15
hi: in r20, 0x16
out portd, r20
call delay
rjmp hi
delay:
ldi r19,240
l3 : ldi r20,240
l2 : dec r20
brne l2
dec r19
brne l3
ret
; Define constants
.equ F_CPU = 1000000 ; 1 MHz clock
.equ PRESCALER = 1024 ; Prescaler value
.equ OCR_VALUE = (F_CPU / PRESCALER / 2) - 1 ; 50% Duty Cycle Calculation
.org 0x00
rjmp main ; Reset vector
; Configure Timer0
ldi r16, (1 << WGM01) ; Set CTC mode (Clear Timer on Compare Match)
22
out TCCR0, r16 ; Apply setting to TCCR0
loop:
sbis TIFR, OCF0 ; Check if Timer0 Compare Match flag is set
rjmp loop ; If not, keep checking
.end
.org 0x00
rjmp main ; Reset vector
loop:
sbis TIFR, TOV0 ; Check Timer Overflow flag
rjmp loop ; Wait for overflow
23
sbi PINB, PB0 ; Toggle PB0 (LED)
sbi TIFR, TOV0 ; Clear Overflow flag
ldi r16, TIMER_COUNT ; Reload timer value
out TCNT0, r16
.end
Output :
24
25
EXPERIMENT - 9
Code :
#include <xc.h>
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRC = 0xff;
while(1)
{
PORTC=0xff;
_delay_ms(2000);
PORTC=0x00;
_delay_ms(2000);
}
}
Output :
26
STM CIRCUITS
EXPERIMENT - 10
Code :
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,1);
HAL_Delay(500); // 500ms delay
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,0);
HAL_Delay(500); //
Pinout :
27
Output :
28
EXPERIMENT - 11
Code :
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9,1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9,1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6,1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6,1); // PC9,PB8,,PA5,PA6,pA7,pb6,pc7,pa9
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7,1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,1);
HAL_Delay(500); // 500ms delay
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9,0);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,0);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9,0);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,0);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6,0);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,0);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6,0);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7,0);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,0);
HAL_Delay(500); //
Pinout :
29
Output :
30
EXPERIMENT - 12
Code :
#include "stm32f4xx.h"
#include "stm32f4xx_hal.h"
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE(); // Enable GPIOA clock
LCD_Init();
LCD_SetCursor(0, 0);
LCD_String("STM32 LC.D");
LCD_SetCursor(1, 0);
LCD_String("Code with Eddie");
31
ER CODE END WHILE */
LCD_SetCursor(0, 0);
LCD_String("Welcome To SGSITS");
LCD_SetCursor(1, 0);
LCD_String("College Indore");
HAL_Delay(4000);
LCD_Clear();
LCD_SetCursor(0, 0);
LCD_String("Department of ");
LCD_SetCursor(1, 0);
LCD_String("E & TC");
HAL_Delay(4000);
LCD_Clear();
32
HAL_GPIO_WritePin(LCD_PORT, LCD_D6, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(LCD_PORT, LCD_D6, GPIO_PIN_RESET);
/* LCD Initialization */
void LCD_Init(void) {
HAL_Delay(20); // Wait for LCD to power up
LCD_Command(0x02); // 4-bit mode
LCD_Command(0x28); // 2-line, 5x7 font
LCD_Command(0x0C); // Display ON, Cursor OFF
LCD_Command(0x06); // Auto increment cursor
LCD_Command(0x01); // Clear display
HAL_Delay(2);
}
33
{
uint8_t pos[] = {0x80, 0xC0}; // First row: 0x80, Second row: 0xC0
LCD_Command(pos[row] + col);
}
/* Function to Clear the Lcd */
void LCD_Clear(void) {
LCD_Command(0x01); // Send command to clear display
HAL_Delay(2); // LCD needs time to process the command
}
Pinout :
34
Output :
35
EXPERIMENT - 13
AIM : To Blink LEDs ON & OFF and display it on LCD using STM32 microcontroller.
Code :
while (1)
{
LCD_SetCursor(0, 0);
LCD_String("LEDs ON");
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0,1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1,1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3,1);
HAL_Delay(1000);
LCD_Clear();
LCD_SetCursor(0, 0);
LCD_String("LEDs OFF");
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0,0);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1,0);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,0);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3,0);
HAL_Delay(1000);
LCD_Clear();
36
Pinout :
Output :
37
EXPERIMENT - 14
AIM : To Read Temperature from LM35 and Display on LCD using STM32 microcontroller.
Components Used : LM35 IC, LCD, STM32F401RE Microcontroller IC and connecting wires.
Code :
while (1)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
adc_value = HAL_ADC_GetValue(&hadc1)
HAL_ADC_Stop(&hadc1);
voltage = (adc_value*3.3)/4096;
temp = voltage*100;
sprintf(temp_str,"%d\n", temp);
LCD_SetCursor(0, 0);
LCD_String("Temperature: ");
LCD_SetCursor(1, 0);
LCD_String(temp);
LCD_SetCursor(1, 2);
LCD_Command(0xDF);
LCD_SetCursor(1, 3);
LCD_Command('C');
HAL_Delay(1000);
LCD_Command(0x01);
}
38
Pinout :
Output :
39
EXPERIMENT - 15
AIM : To Blink LED with the help of Switch using STM32 microcontroller.
Code :
while(1){
Pinout :
40
Output :
EXPERIMENT - 16
41
AIM : To Interface DC Motor using STM32 microcontroller.
Code :
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // IN4
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // IN4
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); // IN4
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // IN4
HAL_Delay(1000);
Pinout :
42
Output :
43
EXPERIMENT - 17
AIM : To Interface Two DC Motors with Two Switches using STM32 microcontroller.
Code :
while (1){
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_11) == 1) // if Button pressed
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // IN4
HAL_Delay(100);
}
else{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // IN4
}
else{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // IN1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // IN3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // IN4}}
44
Pinout :
Output :
45
MSP430 CIRCUITS
EXPERIMENT - 18
Code :
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR=0x00;
while(1)
{
P1OUT=0x00;
delay(25000);
P1OUT=0x01;
delay(25000);
}
}
46
Output :
47
EXPERIMENT - 19
Code :
#include <msp430.h>
#define sw BIT3
#define LED BIT7
void main(void)
{
int i;
WDTCTL = WDTPW | WDTHOLD;// stop watchdog timer
P1DIR |= LED;
P1DIR &= ~sw;
while(1)
{
if(!(P1IN & sw))
{
while(!(P1IN & sw));
for(i=0;i<100;i++);
P1OUT ^= LED;
}
}
}
48
Output :
49
EXPERIMENT - 20
Code :
#include <msp430.h>
void switch_input()
{
50
}
void register_settings_for_GPIO()
{
P1DIR |= LED; //P1.7 is set as Output
P1DIR &=~ (SW1 + SW2 + SW3); //P1.3, P1.4, P1.5 are set as Input
}
void register_settings_for_VLO()
{
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
do{
IFG1 &= ~OFIFG; // Clear oscillator fault flag
for (i = 50000; i; i--); // Delay
} while (IFG1 & OFIFG); // Test osc fault flag
int main(void)
{
while(1)
{
switch_input(); //Switch Input
51
}
}
Output :
52