+ All Categories
Home > Education > AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Date post: 16-Jul-2015
Category:
Upload: manicka-raja-pl
View: 187 times
Download: 2 times
Share this document with a friend
60
Embedded Systems Be Ready for Tomorrow… By, PL.Manicka Raja, Embedded & Robotics Engineer, ThinkLABS Techno Solutions Pvt Ltd, SINE, IIT-Bombay, Mumbai. [email protected]
Transcript
Page 1: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Embedded SystemsBe Ready for Tomorrow…

By,

PL.Manicka Raja,Embedded & Robotics Engineer,ThinkLABS Techno Solutions Pvt Ltd,SINE, IIT-Bombay, [email protected]

Page 2: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

What is Embedded Systems?

© 2013, www.thinklabs.in 2

Page 3: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 3

Page 4: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 4

Page 5: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 5

Page 6: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

About Microcontroller

ATmega64

AT - ???

Mega - ???

64 - ???

© 2013, www.thinklabs.in 6

Page 7: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

KEY Notes

REGISTERS…?

Types of Registers

General Purpose Registers

Special Registers

© 2013, www.thinklabs.in 7

Page 8: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

GENERAL PURPOSE – I/ODDRx …..

PORTx

PINx

Where X represents A,B,C,D….F,G.

© 2013, www.thinklabs.in 8

Page 9: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Special PurposeUART

TIMERS

ADC

SPI

I2C

EEPROM© 2013, www.thinklabs.in 9

Page 10: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

8 - BIT REGISTER ACCESSING

7 6 5 4 3 2 1 0

MSB…… …..LSB

© 2013, www.thinklabs.in 10

Page 11: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 11

Page 12: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Output Step 1 : Configuration or Initialization

DDRx = 1 – Output, 0 – input

Step 2 : Status

PORTx = 1 – Logic High ( 5 volts) 0 – Logic Low (0 volts)

Where X represents A,B,C,D….F,G.

© 2013, www.thinklabs.in 12

Page 13: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 13

Page 14: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 14

Page 15: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 15

Page 16: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 16

Page 17: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

BLINK LED - Program#include<avr/io.h>void main(){

DDRC=OxFF; // Configuration

PORTC=OxOO; // All LEDS - ON, Active Low

PORTC=OxFF; // All LEDS - OFF,

}

© 2013, www.thinklabs.in 17

Page 18: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

BLINK LED - Program#include<avr/io.h>

void main(){

DDRC=OxFF; // Configurationwhile(1) // super loop{PORTC=OxOO; // All LEDS - ON, Active Low

PORTC=OxFF; // All LEDS - OFF,

}}

© 2013, www.thinklabs.in 18

Page 19: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

BLINK LED - Program#include<avr/io.h>#include<util/delay.h>void main(){

DDRC=OxFF; // Configurationwhile(1) // super loop{PORTC=OxOO; // All LEDS - ON, Active Low_delay_ms(1000);PORTC=OxFF; // All LEDS - OFF,_delay_ms(1000);

}}

© 2013, www.thinklabs.in 19

Page 20: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

INPUT

© 2013, www.thinklabs.in 20

Page 21: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

INPUT

© 2013, www.thinklabs.in 21

Page 22: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

INPUT

© 2013, www.thinklabs.in

Vcc

22

Page 23: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

INPUT

© 2013, www.thinklabs.in

Vcc

23

Page 24: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

INPUT

© 2013, www.thinklabs.in

Vcc

24

Page 25: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 25

Page 26: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Functions of PORTx Register in GPIO

Output Input

DDRx 1 0

PORTx

1 0 1 0

Logic High Logic Low Enable Internal Pull-Up

Disable Internal Pull-Up

5 volts 0 volts Stable state - 1 Floating state ( 0 or 1)

© 2013, www.thinklabs.in 26

Page 27: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 27

Page 28: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Input Step 1 : Configuration or Initialization

DDRx =

Step 2 : Pull – Up

PORTx =

1 – Enable Pull – UP

0 – Disable Pull – UP

Step 3 : Checking

1 – Switch is not pressed

0 – Switch is pressed

Switches are Active Low, When pressed , it gives 0.© 2013, www.thinklabs.in 28

Page 29: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 29

Page 30: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 30

Page 31: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 31

Page 32: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 32

Page 33: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 33

Page 34: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 34

Page 35: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

MSB……….LSB = Big Endian.

© 2013, www.thinklabs.in

•7654 3210

•1010 1010

• (1<< position )

• (1<<4)

BIT WISE OPERATIONS

35

Page 36: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

BIT WISE OPERATIONSWhy we need BITWISE operations…?

To change only our desired bit without affecting any other Bits in the REGISTER.

When Individual Accessing is required

When the port is both Input & Output.

© 2013, www.thinklabs.in 36

Page 37: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 37

Page 38: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

BIT WISE OPERATIONS

SET BIT

To make the desired position as LOGIC 1 (ONE)

CLEAR BIT

To make the desired position as LOGIC 0 (ZERO)

CHECK BIT

To know whether the desired position is 0 or 1(Without affecting any other bits)

© 2013, www.thinklabs.in 38

Page 39: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

SET Bit - Explanation a = 0110 1010;

Desired Position is 4 So, OR function

0 1 1 O 1 0 1 0 is a0 0 0 1 0 0 0 0 is (1<<pos) ….(1<<4)-----------------------

0 1 1 1 1 0 1 0 is a= a|(1<<pos); x=x+5;

----------------------- a|=(1<<pos); x+=5;

Important Note : Rest of the BITS are not affected

© 2013, www.thinklabs.in 39

Page 40: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

One’s complement• 0001 0000 is (1<<4)

• One’s Complement…?

• 1110 1111 is one’s complement of (1<<4)

•~ is negation , used to produce one’s complement of a number.

• 11101111 is ~(1<<4)

© 2013, www.thinklabs.in 40

Page 41: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

CLEAR Bit - Explanation a = 0110 1010;

Desired Position is 5

So, AND function

0 1 1 0 1 0 1 0 is a

1 1 0 1 1 1 1 1 is ~(1<<pos) or ~(1<<5)

-----------------------

0 1 0 0 1 0 1 0 is a= a&~(1<<pos); x=x+5;

----------------------- a&=~(1<<pos); x+=5;

Important Note : Rest of the BITS are not affected

© 2013, www.thinklabs.in41

Page 42: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

SET BIT

REGISTER |= (1<<pos)

|= OR Equal to

© 2013, www.thinklabs.in 42

Page 43: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

CLEAR BIT

REGISTER &=~ (1<<pos)

&= ~AND equal to negation

© 2013, www.thinklabs.in 43

Page 44: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

CHECK BIT(REGISTER & (1<<pos))== ?

& AND is only for checking, not for assingning EQUAL ‘=’ is for assigning, BUT here we don’t assign

anything, Just checking the Status of the BIT

© 2013, www.thinklabs.in 44

Page 45: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Multiple SET BITREGISTER |= ( refer below)

|= ((1<<7) | (1<<5) | (1<<2))

© 2013, www.thinklabs.in 45

Page 46: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Multiple CLEAR BITREGISTER &=~ ( refer below)

&=~ ((1<<7) | (1<<5) | (1<<2))

© 2013, www.thinklabs.in 46

Page 47: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Switch Program#include<avr/io.h>#include<util/delay.h>void main(){

DDRC=OxFF; // ConfigurationDDRD&=~(1<<6); // PORTD 6th pin is SW1PORTD|=(1<<6); //PULL – UP resistorwhile(1) // super loop{

if( (PIND & (1<<6)) == O ){PORTC=OxOO; // All LEDS - ON, Active Low_delay_ms(1000);}

}} © 2013, www.thinklabs.in 47

Page 48: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Switch Program#include<avr/io.h>#include<util/delay.h>#define SW1 (PIND & (1<<6)) // macro for SW1

void main(){

DDRC=OxFF; // ConfigurationDDRD&=~(1<<PD6); // PD6 is already #defined as 6 @ avr/ io.hPORTD|=(1<<PD6); //PULL – UP resistorwhile(1) // super loop{

if( SW1 == O ){PORTC=OxOO; // All LEDS - ON, Active Low_delay_ms(1000);}

© 2013, www.thinklabs.in 48

Page 49: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 49

Page 50: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Direct OPERATION for REGISTERS 7..4 – o/p

3...0 – i/pDDRC = 0b11110000;

(or)

DDRC = 0xF0;

0 – input

1- output

© 2013, www.thinklabs.in 50

Page 51: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Bitwise OPERATION for REGISTERS 7..4 – o/p

3...0 – i/pDDRC |=

((1<<7)|(1<<6)|(1<<5)|(1<<4));

(and also)

DDRC &=~((1<<3)|(1<<2)|(1<<1)|(1<<0));

© 2013, www.thinklabs.in 51

Page 52: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Key Notes for An Embedded Developer

What is a Compiler?

What is a Cross–Compiler..?

Diff B/W uC & uP

CISC & RISC…?

Architecture…?

= Program memory & Data Memory

© 2013, www.thinklabs.in 52

Page 53: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Compiler The process of converting high level language to the

machine level language

For the SAME processor.

Example : Turbo C, Dev C

Programs are compiled &

Output is viewed on the SAME System

© 2013, www.thinklabs.in 53

Page 54: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Cross -Compiler The process of converting high level language to the

machine level language

For the TARGET processor.

Example : winAVR, KeilC, AVR Studio

Programs are compiled in a system &

Output is viewed on ANOTHER System

© 2013, www.thinklabs.in 54

Page 55: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

5 Golden Rules for Programming also called as Cross Compilation

1. Make New Separate folder for Each & Every Program

2. Only Makefile and .c (dot C) file…?

3. ‘M ‘of Makefile should be in Capital.

4. Target name in Makefile & some changes

5. Those three Switches in your uNiBoard

© 2013, www.thinklabs.in 55

Page 56: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

© 2013, www.thinklabs.in 56

Page 57: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

Tools to Remember

To Compile

Tools Make All

To Program

Tools Make Program

© 2013, www.thinklabs.in 57

Page 58: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

ReCap X= 6;

Right to Left Operation in C.

So, We are passing the value 6 to X,

Similarly,

DDRx=OxFF, and PORTx=OxFF;

So, We are (passing) Writing an 8 bit Value to REGISTER

But, in PINx , we are just only reading from it.

PINx & (1<< pos )

© 2013, www.thinklabs.in 58

Page 59: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

R/W - Registers

DDRx - Write Only

PORTx - Write Only

PINx - Read Only

© 2013, www.thinklabs.in 59

Page 60: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq

THANK U…

Contact

[email protected]

www.linkedin.com/in/maaniq

www.facebook.com/maaniq

© 2

01

3, w

ww

.thin

kla

bs.in

60


Recommended