programming a robot using

Post on 07-May-2015

3.695 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

This is the presentation covers many concepts about programming the microcontrollers.

TRANSCRIPT

PROGRAMMING A ROBOT USING

ICC AVR Ver 7.5

ICC AVR ver 7.5

ICC AVR is a tool used to program Atmel microcontrollers.

It uses a C compiler to compile the high level code into a low level code.

ICC AVR then converts this low level code into HEX code.

It also has built in tools to program the flash memory of the microcontroller.

HOW TO INSTALL ICC AVR ver 7.5

ICC AVR ver 7.5 is not a freeware and thus you have to purchase it.

But 45 days trial versions are available on the net and they give almost the same features.

Thus download the setup of the trial version from the site : http://www.imagecraft.com/

Run the setup and install ICC AVR ver 7.5

HOW TO USE ICC AVR ver 7.5

H BRIDGE PIN-OUT

ATMEGA 16

PC2

PC3

PC4

PC5

PC6

PC7

L293D

IN1

IN2

EN1

IN3

IN 4

EN2

OUT1

OUT2

OUT3

OUT4

IMPORTANT STUFF….

Input Output PORTS

• Four, 8 bit I/O ports- PORT A,B,C,D• All I/O ports pins are bidirectional and can beconfigured individually• Input pins can be configured to utilizeinternal pullups.

• Data Direction Register , DDRn

• Port Driver Register, PORTn

• Port Pin Register, PINn

Data Direction Register, DDRn

• Determines the direction of individual pins ofports• If the bit of the DDR is set the corresponding pinof the port is configured as output pin• If the bit of the DDR is cleared thecorresponding pin of the port is configured asinput pin

• DDRA = 0xF0;• 4 MSB pins of PORTA are output pins• 4 LSB pins of PORTA are input pins

Port Pin Register, PINn

• Reading the input pins of port is done byreading PIN register• Temp = PINA;• Read the PORTA input and store in temp variable

Port Drive Register, PORTn

• For pins configured as input(DDRn[x] = 0) microcontroller connects ainternal pull up register if thecorresponding bit of PORTn is set• If the PORTn bit is cleared, pin is Tristated

• DDRA = 0x00;• PORTA = 0xF0

Buzzer On / OFF

• PORT B pin 7• Pin is configured as output• DDRB= 0x80;• To turn on the buzzer output high• PORTB = 0x80;• To turn off the buzzer output low• PORTB = 0x00;

Buzzer Function

void Buzzer_ON(void){PORTB = 0x80;}void Buzzer_OFF(void){PORTB = PORTB & 0x7F;}

LED DISPLAY

8 bit LED display is connected to PORTD.

To display any bit combination on the LED display, we use…

PORTD=0xXX;

CODE FOR LED DISPLAY

void main(void){ init_devices();

while(1) { PORTD=0xFF; }}

Analog To Digital Converter• 10 bit resolution• 8 channels• PORTA(0 – 7)• Disable internal pull up• ADCH & ADCL – Data Register• ADMUX- Channel Select Register• ADCSR – Control & Status Register

unsigned char ADC_conversion (unsigned char ADC_channel_number) { unsigned int i = 0; ADCH = 0x00; i = ADC_channel_number & 0x0F; // keeping the loweat nibbel ADMUX = i | 0x20; //upper nibbel of 0x20 indicates the result is left adjusted (8 bit ADC conversion) ADCSR |= 0x40; for (i = 1; i < 255; i++); //delay of 93.2 uS

i = ADCH; return (i);}

void main(void){ unsigned char I, value[3];; for(i=0;i<3;i++) { value[i]=ADC_conversion(i); }}

HOW TO COMPILE AND BUILD YOUR CODE

After you program your robot, it is ready to run the code written onto the microcontroller.

So just power on the microcontroller and it will start the execution of the code.

MOTION CONTROL AND LINE FOLLOWING

PORT CONFIGURATION

PORTA is ADC port. 3 white line sensors are connected to

pin1, pin2, pin 3 of PORTA.

PORTC is connected to the H-bridge.

CODE FOR MOTION

void delay(int time) { int i,j;

for(i=0;i<time;i++) for(j=0;j<500;j++);}

void backward(void) // subroutine for backward motion{ PORTC=0xB4; delay(100);}

void right(void) // subroutine for right motion{ PORTC=0xB8; delay(100);}

void left(void) // subroutine for left motion{ PORTC=0xD4; delay(100);}

void forward(void) // subroutine for forward motion{ PORTC=0xD8; delay(100);}

void stop(void) // subroutine for stop motion{ PORTC=0xFF; delay(100);}

//void main(void){ init_devices(); //insert your functional code here...

forward(); delay(1000); left(); delay(100); forward(); delay(1000); right(); delay(100); backward(); delay(1000); stop(); delay(100);

}

CODE FOR LINE FOLLOWER

unsigned int ADC_conversion (unsigned int ADC_channel_number) { unsigned int i = 0; ADCH = 0x00; i = ADC_channel_number & 0x0F; // keeping the loweat nibbel ADMUX = i | 0x20; ADCSR |= 0x40; for (i = 1; i < 255; i++); //delay of 93.2 uS

i = ADCH; return (i);}

void forward(void){ PORTC=0xD8;}

void left(void){ PORTC=0xB8;}

void right(void){ PORTC=0xD4;}

void backward(void){ PORTC=0xB4;}

//void main(void){unsigned char value[3];unsigned char i; init_devices(); while(1) { for(i=0;i<3;i++) { value[i]=ADC_conversion(i); }

if (value[1] < 50) { forward(); } else { if(value[2] > 90) { left(); } else { if (value[0] > 90) { right(); } else { backward(); }} } } }

THANK YOU…

top related