Presentation is loading. Please wait.

Presentation is loading. Please wait.

AVR Programming in C Chapter 7

Similar presentations


Presentation on theme: "AVR Programming in C Chapter 7"— Presentation transcript:

1 AVR Programming in C Chapter 7
Sepehr Naimi

2 Topics Data Types Time Delays IO Programming in C Logic Operation in C
Data serialization in C

3 Languages High Level Languages C Language Low Level Languages
Easy to develop and update C Language Acceptable performance Portable Low Level Languages High performance Not portable High Level Languages (like VB) C Language Machine Language

4 A simple C program Write a program that calculate the sum of {1,3,…,13,15} int main () { unsigned int sum; for (int i = 1; i <= 15; i+=2) sum += i; while (1); return 0; }

5 Accessing I/O registers
Example 1: Write an AVR C program to send value 0xAA to PORTD. #include <avr/io.h> int main () { DDRD = 0xFF; PORTD = 0xAA; while (1); return 0; }

6 Accessing I/O registers
Example 2: Write an AVR C program to calculate PINB + PINC and send the result to PORTD. #include <avr/io.h> int main () { DDRB = 0x00; DDRC = 0x00; DDRD = 0xFF; while (1) PORTD = PINB + PINC; return 0; }

7 What is happening in machine language?
int Fibonnaci (int n); int main () { unsigned int sum = 0; for(int j = 0; j < 11; j++) sum += Fibonnaci (j); } while(1); return 0; int Fibonnaci (int n) { int a1 = 1; int a2 = 1; int i; int temp; if(n == 0) return 0; else if(n <= 2) return 1; else{ for(i = 2; i < n; i++) temp = a2; a2 = a1 + a2; a1 = temp; } return a2;

8 Data Types unsigned char instead of unsigned int if you can
Use unsigned whenever you can unsigned char instead of unsigned int if you can

9 What is the difference between int and unsigned int?
Data types (cont.) c char c; int a1; long lng; unsigned int a; lng a1 a What is the difference between int and unsigned int?

10 int vs. unsigned int int a1 = 5; int a2 = 3; int a3 = 9;
b = (a1 * a2) + a3; AVR is an 8-bit. How could we multiply 16-bit numbers?

11 Multiplications of Big Numbers
23 ab *49 *cd 27 b*d 18 ad+bc 27 ac 8

12 Choosing optimized data type
unsigned int sum; for (int i = 1; i <= 15; i+=2) sum += i; unsigned char sum; for (char i = 1; i <= 15; i+=2) sum += i;

13 Accessing I/O registers
#include <avr/io.h> int main () { DDRD = 0xFF; while(1) for (unsigned char i = 0; i <= 9; i++) PORTD = i; } return 0;

14 Time Delays in C You can use for to make time delay
void delay(void) { volatile unsigned int i; for(i = 0; i < 42150; i++) { } } If you use for loop The clock frequency can change your delay duration ! The compiler has direct effect on delay duration!

15 Time Delays in C You can use predefined functions of compilers to make time delays In Atmel Studio: First you should include: #define F_CPU UL #include <util/delay.h> and then you can use _delay_us(200); //200 microseconds _delay_ms(100); //100 milliseconds It is compiler dependant

16 I/O programming in C Byte size I/O programming in C
DDRB = 0xFF; while (1) { PORTB = 0xFF; _delay_ms(500); PORTB = 0x55; } Different compilers have different syntax for bit manipulations! It is better to use Bit-wise logical operators

17 Bit-wise logical operators
& | ~

18 Shift operations in C data >> number of bits to be shifted right
data << number of bits to be shifted left >> 3 <<2

19 Setting a bit in a Byte to 1
We can use | operator to set a bit of a byte to 1 xxxx xxxx | xxx1 xxxx xxxx xxxx | 1 << 4 xxx1 xxxx OR PORTB |= (1<<4); //set bit 4 (5th bit) of PORTB

20 Clearing a bit in a Byte to 0
We can use | operator to set a bit of a byte to 1 xxxx xxxx & xxx0 xxxx xxxx xxxx & ~(1 << 4) xxx0 xxxx OR PORTB &= ~(1<<4); //clear bit 4 (5th bit) of PORTB

21 if( ((PINC & (1<<5)) != 0) //check bit 5 (6th bit)
Checking a bit in a Byte We can use & operator to see if a bit in a byte is 1 or 0 xxxx xxxx & x 0000 xxxx xxxx & (1 << 4) x0 0000 OR if( ((PINC & (1<<5)) != 0) //check bit 5 (6th bit)

22 Memory Types In AVR Flash Memory EEPROM RAM
Not deleted when power is off Big in size Suitable for codes, tables and fixed data EEPROM Not deleted when power is off Not very big in size Suitable for small data that may be modified but should not be lost when power is off RAM deleted when power is off Suitable for storing the data we want to manipulate because we have fast access to read or modify them.

23 Accessing Flash #include <avr/pgmspace.h>
const unsigned char PROGMEM lookup[] ={5,6,7,4}; ourData = pgm_read_byte(&lookup[i]); #include <avr/pgmspace.h> const unsigned char PROGMEM lookup[] ={5,6,7,4}; int main(void) { unsigned char a; a = pgm_read_byte(&lookup[i]); while (1); }

24 Accessing EEPROM #include <avr/io.h>
#include <avr/eeprom.h> unsigned char EEMEM myVar; //reserve a location in EEPROM int main(void) { DDRC = 0xFF; if((PINB&(1<<0)) != 0) //if PB0 is HIGH eeprom_write_byte(&myVar,'G'); //read from EEPROM else PORTC = eeprom_read_byte(&myVar); //write to EEPROM while (1); }


Download ppt "AVR Programming in C Chapter 7"

Similar presentations


Ads by Google