Challenge

Project 1 - Controlling a DC motor using PWM and monitoring its Running status

code:

#include avr //preprocessor directive
#define F_CPU 16000000ul
#include "avr/interrupt.h"//Preprocessor directive of an avr interrupt
#include
#define sw_dir (PIND&(1<<1))
#define sw_spd (PIND&(1<<2))
#define pw (PINC&(1<<3))
#define lcd_port PORTB
#define RS_high PORTD|=(1<<5)
#define RS_low PORTD|=(1<<5)
#define EN_high PORTD|=(1<<6)
#define EN_low PORTD|=(1<<6)
unsigned char i;
void lcd_cmd(char cmd)
{
lcd_port=(cmd&0xf0); //Masking 4 bits for 4 bit LCD mode//
RS_low;//reset
EN_low;//enable
_delay_ms(1);
EN_high;//enable high
lcd_port=((cmd<<4)&(0xf0));
RS_low;
EN_low;
_delay_ms(1);
EN_high;

}
void lcd_data(char data)//void of lcd delay
{
lcd_port=(data &0xf0); //masking 4 bits for bit LCD mode//
RS_high;//reset high
EN_low;//enable low
_delay_ms(1);
EN_high;
lcd_port=((data<<4)&(0xf0));
RS_high;
EN_low;
_delay_ms(1);
EN_high;
}
void lcd_init()
{
lcd_cmd(0x02);_delay_ms(5); //return the cursor to home//
lcd_cmd(0x01);_delay_ms(5); //clear screen //
lcd_cmd(0x0C);_delay_ms(5); //display ON cursor OFF//
lcd_cmd(0x06);_delay_ms(5); //increment cursor//
lcd_cmd(0x80);_delay_ms(5); //force cursor to begin 1st line //
lcd_cmd(0x28);_delay_ms(5); //used for 4 bits lcd mode //

}
void lcd_out(char x, char y, char *str)
{
cursorpos(x,y);//cursor pay of x,y
while (*str)//while string pointer
{
lcd_data(*str);
str++;
}
}
void cursorpos(char x, char y)
{
if ((x<1||x>2)||(y>16)||(y<1))//execution of if loop
{
x=1;//initialising x=1
y=1;//initialising y=1
}
if (x==1)
{
lcd_cmd(0x7f+y);
}
else
{
lcd_cmd(0xBF+y);
}
}
int main()//execution of main function
{
DDRB=0xFF;//datadirective register Bb is enabled
DDRA|=((1<<0)|(1<<1));port 0 and 1 is enabled
DDRD&=~(1<<1);//port D1 is reest
DDRD&=~(1<<2);
DDRD|=(1<<5);
DDRD|=(1<<6);
DDRC&=~(1<<3);
PORTD|=(1<<2);
PORTC|=(1<<3);
i=64;
TCCR0=0X61;
GICR=(1<<int0);
MCUCR=0X02;
sei();
lcd_init();
while (1)
{
while(pw==0)
{
if (sw_dir==0)
{
PORTA=0b00000001;
lcd_out(1,1,"Motor is Running");
lcd_out(2,3,"clockwise");
}
else
{
PORTA=0b00000010;
lcd_out(1,1,"Motor is Running");
lcd_out(2,3,"anticlockwise");
}
OCR0=i;
}
PORTA=0X00;//port a is enabled
lcd_out(1,1," Motor is OFF");
lcd_out(2,3,"CAUTION !!!");
}
}
ISR(INT0_vect)//interupt service routine 0
{
i=i+20;
}</int0);

OUTPUT:

Expected Outcomes/REPORTS:

  • Implement a system on simulator to control a DC motor using PMW.
  • Monitoring the running status of the DC motor using L293 motor driver which allows the DC motor to drive on any direction.
  • Running status i.e. on which direction the DC motor is running is to be displayed on the LCD screen.
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.