Challenge

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

#include<avr/io.h>
#define<util/delay.h>
#include "avr/interrupt.h"
#define lcdport PORTB
#define rs_high PORT |=(1<<0);
#define en_low PORTD &=~(1<<0);
#define en)low PORTD &=~(1<<1);
int a;
void lcd_command(unsigned char cmd);
void led_data(unsigned char data);
void lcd_init();
void cursorpos(char x, char y);
void lcd_out(char x, char y);
int main(void)
{
DDRB=0XFF;
DDRD |=(1<<5);
DDRC |=(1<<0)|(1<<1);
sei();
GICR=(1<<7)|(1<<6);
unsigned int B=0;
PORTD=(1<<2)|(1<<3);
lcd_init();
TCCR1A=0x81;
TCCR1B=0x01;
TCNT1L=0;
TCNT1H=0;
while(1)
{
if(a==1)
{
lcd_out(1,1,"motor clockwise");
0CR1AL=0x3F;
}
else
{
0CR1AL=0x7F;
lcd_out(1,1"motor anticlockwise");
}
}
}
ISR(INTO_Vect)
{
PORTC |=(1<<0);
}
PORTC &=~(1<<1);
a=1
lcd_cmd(0x01);_delay_ms(5);

ISR(INT1_Vect)
{

PORTC |=(1<<1);
PORTC &=~(1<<0);
a=2;
lcd_cmd(0x01);_delay_ms(5);
}
void lcd_cmd(unsigned char cmd)
{
lcdport=cmd;
rs_low;
en_low;
_delay_ms(1);
en_high;
}
void lcd_data(unsigned char data)
{
lcdport=data;
rs_high;
en_low;
_delay_ms(1);
en_high;
}
void lcd_init()
{
lcd_cmd(0x38);_delay_ms(5);
lcd_cmd(0x02);_delay_ms(5);
lcd_cmd(0x01);_delay_ms(5);
lcd_cmd(0x0c);_delay_ms(5);
lcd_cmd(0x06);_delay_ms(5);
lcd_cmd(0x80);_delay_ms(5);
lcd_cmd(0xc0);_delay_ms(5);
}
void cursorpos(char x, char y)
{
if((x<1||y>2)||(y<1||y>16))
{
x=1;
y=1;
}
if(x==1)
lcd_cmd(0xbf+y);
}
void lcd_out(char x,char y,char*str)
{
cursorpos(x,y);
while(*str)
{
lcd_data(*str);
str++;
}

}

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.