116
Firsrt Session

AVR Microcontrollers

  • Upload
    rachel

  • View
    67

  • Download
    4

Embed Size (px)

DESCRIPTION

AVR Microcontrollers. Firsrt Session. منابع : منابع موجود در www.atmel.com مرجع كامل ميكروكنترلرهاي AVR - انتشارات نص - محمد مهدي پرتوي فر و .. ميكروكنترلرهاي AVR و كاربردهاي آنها - انتشارات نص - امير ره افروز نرم افزارها : CodeVisionAVR Proteus AVR Studio. ميان ترم : 5 نمره - PowerPoint PPT Presentation

Citation preview

Page 1: AVR Microcontrollers

Firsrt Session

Page 2: AVR Microcontrollers

: منابع منابع موجود درwww.atmel.com مرجع كامل ميكروكنترلرهايAVR انتشارات نص - محمد -

مهدي پرتوي فر و .. ميكروكنترلرهايAVR و كاربردهاي آنها - انتشارات نص - امير

ره افروز : نرم افزارها

CodeVisionAVRProteusAVR Studio

Page 3: AVR Microcontrollers

نمره5: ميان ترم نمره3 : تمرين نمره3 : پروژه نمره10: پايان ترم

Page 4: AVR Microcontrollers

IntroductionATMEL 8 bit MicrocontrollerFamilies

Tiny90S (CLASSIC)MegaLCD AVR

Execute One Instruction Per Cycle (MIPS)

Page 5: AVR Microcontrollers

جایگزینی تراشه های قدیمیتراشه قدیمی جایگزین مناسب

AT90S2313AT90S2323AT90S4433AT90S8515ATMEGA103ATMEGA161ATMEGA163ATMEGA323

ATTINY2313ATTINY25ATMEGA8ATMEGA8515ATMEGA128ATMEGA162ATMEGA16ATMEGA32

Page 6: AVR Microcontrollers

نام میکروکنترلر از دو یا سه قسمت تشکیل شده است

ATMEGA 16ATMEGA 8ATTINY 28LATTINY 28 V

flashقسمت اول نوع و سری میکرو و قسمت دوم حافظه را بیان می کند.

very low powerو low powerقسمت سوم مخفف است. که در جدول زیر شرح داده شده است:

Page 7: AVR Microcontrollers

فرکانس قابل قبول کریستال

محدوده ولتاژ تغذیه

نام میکروکنترلر

0-16 MHZ0-8 MHZ0-4 MHZ

4-5.5 v2.7-5.5 v1.8-5.5 v

بدون AVRمیکروکنترلر پسوند

با AVRمیکروکنترلر Lپسوند

با AVRمیکروکنترلر Vپسوند

Page 8: AVR Microcontrollers

PDIP-Package – Mega32

Page 9: AVR Microcontrollers

TQFP/MLF Package – Mega32

Page 10: AVR Microcontrollers
Page 11: AVR Microcontrollers

ArchitectureRISC: Reduced Instruction Set

Computer ==> AVR

CISC: Complex Instruction Set Computer

Page 12: AVR Microcontrollers
Page 13: AVR Microcontrollers
Page 14: AVR Microcontrollers

Memory TypesData

SRAM (Static Random Access Memory)EEPROM (Electrically Erasable Programmable Read

Only Memo)

ProgramFlash

Page 15: AVR Microcontrollers

Program MemoryFlash (for mega32)

32K Bytes of In-System Self-Programmable Flash Endurance: 10,000 Write/Erase Cycles

Page 16: AVR Microcontrollers

Data MemoriesSRAM (for mega32)

2K Byte Internal SRAM- Register file, I/O Register, Data Address.

EEPROM (for mega32)1024 Bytes EEPROM Endurance: 100,000 Write/Erase

Cycles

Page 17: AVR Microcontrollers

Program Counter (PC)Instruction Register (IR)

Instruction Decoder (ID)

Page 18: AVR Microcontrollers
Page 19: AVR Microcontrollers
Page 20: AVR Microcontrollers

X-Y-Z Registers

Page 21: AVR Microcontrollers
Page 22: AVR Microcontrollers

ALU

Page 23: AVR Microcontrollers

فیوز بیت هاقسمتی از حافظه میکرو کنترلر ها هستند که امکاناتی

را در اختیار کاربر قرار می دهند و با پاک شدن حافظه میکرو تنظیمات آنها از بین نمی رود

Page 24: AVR Microcontrollers

Clock Source

Page 25: AVR Microcontrollers

Clock Sources

Page 26: AVR Microcontrollers

PDIP-Package – Mega32

Page 27: AVR Microcontrollers

External Crystal Oscillator

Page 28: AVR Microcontrollers

Low Frequency Crystal Oscillator

Page 29: AVR Microcontrollers

External RC Oscillator

Page 30: AVR Microcontrollers

Calibrated Internal RC Oscillator

Page 31: AVR Microcontrollers

External Clock

Page 32: AVR Microcontrollers

Timer/Counter Oscillator

For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal is connected directly between the pins. No external capacitors are needed. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock source to TOSC1 is not recommended.

Page 33: AVR Microcontrollers

Clock Distribution

Page 34: AVR Microcontrollers
Page 35: AVR Microcontrollers
Page 36: AVR Microcontrollers

Second Session

Page 37: AVR Microcontrollers

SRAM Management

Page 38: AVR Microcontrollers

SRAM Data Memory (mega32)

Page 39: AVR Microcontrollers

Programming WithCodevisionAVR

Page 40: AVR Microcontrollers

Prototype #include <mega32.h> global definition main() {

local variable; statements;

} function1() {

local variable; Statements;

} function2() {

local variable; Statements;

}

Page 41: AVR Microcontrollers

Prototype mainچون میکرو همیشه باید در حال فعالیت باشد، درون تابع

یک حلقه دائم قرار داده می شود. #include <mega32.h>

global definitionmain(){

local variable;دستوراتی که باید یک بار اجرا شوندWhile (1){دستورات و کدهای اصلی برنامه که دائما اجرا می شوند}

}

Page 42: AVR Microcontrollers

نکاتی در مورد برنامه نویسیخط اول همیشه دستور فراخوانی فایل های حاوی توابع

headerاست

در انتهای هر عبارت یک سمی کالن قرار داده می شود

{ و } در ابتدا و انتهای هر حلقه، عبارت شرطی و یا بلوک قرار داده می شود

از // یا ) /* و */( برای نوشتن توضیح در برنامه استفاده می شود

Page 43: AVR Microcontrollers

Data Type Type Size (Bits) Range bit 1 0 , 1 char 8 -128 to 127 unsigned char 8 0 to 255 signed char 8 -128 to 127 int 16 -32768 to 32767 short int 16 -32768 to 32767 unsigned int 16 0 to 65535 signed int 16 -32768 to 32767 long int 32 -2147483648 to 2147483647 unsigned long int 32 0 to 4294967295 signed long int 32 -2147483648 to 2147483647 float 32 ±1.175e-38 to ±3.402e38 double 32 ±1.175e-38 to ±3.402e38

Page 44: AVR Microcontrollers

متغیر ها و ثابت ها ابتدا باید معرفی شوند

نام متغیر نوع متغیر حافظه مورد نیاز برای متغیر

eeprom int temp;

flash int temp=10;

eeprom char str;

float a;

int b=30;

نام متغیر ها می تواند ترکیبی از حروف و اعداد باشد، فقط نام متغیر .نباید با عدد شروع شود

Page 45: AVR Microcontrollers

Constantsflash int x=123;const char y=‘a’;#define C 100;

Page 46: AVR Microcontrollers

آرایه هاتعدادی متغیر دلخواه از یک نوع و یک نام که با اندیس های

شماره دار از هم جدا هستند

int str[10];int i[3]= {2,5,6}

:(stringرشته)به آرایه هایی که حروف اسکی را درون خود نگه می دارند،

رشته می گوییم.Char t[5]= “temp;”

Page 47: AVR Microcontrollers

bit Data typebit x,y;x=1;from R2.0 to R14.7 max=104Set in following menu:Project/Configure/C Compiler/Code Generation/Bit

Variable size

Page 48: AVR Microcontrollers

Operators + - * / % ++ -- = == ~ ! != < > <= >= & && | || ^ ? << >> -= += /= %= &= *= ^= |= >>= <<=

Page 49: AVR Microcontrollers
Page 50: AVR Microcontrollers
Page 51: AVR Microcontrollers
Page 52: AVR Microcontrollers
Page 53: AVR Microcontrollers

3th Session

Page 54: AVR Microcontrollers

Decision and loopsif –elsewhiledo-whileforSwitch - case

Page 55: AVR Microcontrollers
Page 56: AVR Microcontrollers
Page 57: AVR Microcontrollers
Page 58: AVR Microcontrollers
Page 59: AVR Microcontrollers
Page 60: AVR Microcontrollers
Page 61: AVR Microcontrollers
Page 62: AVR Microcontrollers
Page 63: AVR Microcontrollers

توابع و فرم تابع نویسی)نام تابع نوع داده خروجی )داده های ورودی{تعریف متغیر های محلیدستوراتبازگرداندن مقدار خروجی در صورت وجود}

Page 64: AVR Microcontrollers

مثال:برنامه ای بنویسید که عدد ورودی را به

برساند3توان long int func( int x){long int s;s=x*x*x;return s;}

Page 65: AVR Microcontrollers

جایگاه نوشتن توابع:توابع را در دو جا می توان نوشت

main- قبل از تابع 1- در زیر کل برنامه2

#include<header>Void func(void){دستورات{

Void main)({دستورات

{

Page 66: AVR Microcontrollers

#include<header>Void func(void);Void main(void){دستوراتWhile(1){دستورات}}

Void func)({دستورات}

Page 67: AVR Microcontrollers

Libraries math.hstdio.hdelay.hMega16.hAnd …

Page 68: AVR Microcontrollers

PORTS

Page 69: AVR Microcontrollers

Input= 0 Output=1DDRA.0=0; // PA.0 inputDDRA.5=1; // PA.5 outputDDRC=0xff ; // PORTC

Direction

Page 70: AVR Microcontrollers

Output Latch

Page 71: AVR Microcontrollers

Input register

Page 72: AVR Microcontrollers

Example-1 پورت روی بر که بنویسد ای را 0x28مقدار Bبرنامه

بنویسد.#include <mega32.h>

void main(void)

{

DDRB=0xFF;

while (1)

{

PORTB=0x28;

};

}

Page 73: AVR Microcontrollers

Example-2 تابعي بنويسيد كه يك چراغ راهنمايي را بصورت زير پياده

سازي كند:ثانيه15 : سبزثانيه3: زردثانيه15: قرمز

-------------------------------------------------------------------trafficsignalنام تابع :

ورودي : نداردخروجي : ندارد

PORTA.2 : قرمز PORTA.1 :زرد PORTA.0 : سبز

Page 74: AVR Microcontrollers

Example-2Header file : delay.h

void delay_us(unsigned int n);

void delay_ms(unsigned int n);

ميكروثانيه ==100مثال : تاخير <

delay_us(100)

ثانيه == 5مثال : تاخير < delay_ms(5000)

Page 75: AVR Microcontrollers

Example-2#include <mega32.h>#include <delay.h>void traficsignal(void);void main(void){DDRA=0x07;while (1) { traficsignal(); };}void traficsignal(void){PORTA.0=1;PORTA.1=0;PORTA.2=0; delay_ms(15000);PORTA.0=0;PORTA.1=1;PORTA.2=0;delay_ms(3000); PORTA.0=0;PORTA.1=0;PORTA.2=1;delay_ms(15000);}

Page 76: AVR Microcontrollers

Exercise-11 تابعي بنويسد كه يك چراغ راهنمايي را با دريافت -

تاخيرها توسط برنامه زير، راه اندازي كند.سبز : Gdelayثانيه زرد :Ydelayثانيه قرمز :Rdelayثانيه

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

Page 77: AVR Microcontrollers

Exercise-1#include <mega32.h>void traficsignal(int gdelay,int ydeay,int rdelay);void main(void){DDRA=0x07;while (1) {traficsignal(x,y,z); };}void traficsignal(int gdelay, int ydelay, int rdelay){PORTA.0=1;PORTA.1=0;PORTA.2=0; delay_ms(gdelay);PORTA.0=0;PORTA.1=1;PORTA.2=0;delay_ms(ydelay); PORTA.0=0;PORTA.1=0;PORTA.2=1;delay_ms(rdelay);}

Page 78: AVR Microcontrollers

Example-3 تابعی بنویسید که یک عدد بی عالمت را از پورتA

نشان دهد.Bخوانده و بر روی پورت #include <mega32.h>void in_out_port(void);void main(void){DDRA=0x00;DDRB=0xff;while (1) { in_out_port(); };} void in_out_port(void){ unsigned char x; x=PINA; PORTB=x;

}

Page 79: AVR Microcontrollers

7segment

Page 80: AVR Microcontrollers

Common Anode

Page 81: AVR Microcontrollers

Common Cathode

Page 82: AVR Microcontrollers

Example-4 دادxاع کxه بنویسxید ای تxا 0برنامxه روي 9 بxر را

7segment. آند مشترك به فاصله يك ثانيه نشان دهد #include <mega32.h>#include <delay.h>unsigned char seven_seg_code(unsigned char num);void main(void){unsigned char i;DDRA=0xff;while (1) { for (i=0;i<10;i++) { PORTA=seven_seg_code(i); delay_ms(1000); } };}

Page 83: AVR Microcontrollers

Codingnum h g f e d c b a code

0 1 1 0 0 0 0 0 00xC0

1 1 1 1 1 1 0 0 10xF9

2 1 0 1 0 0 1 0 00xA4

3 1 0 1 1 0 0 0 00xB0

4 1 0 0 1 1 0 0 10x99

5 1 0 0 1 0 0 1 00x92

6 1 0 0 0 0 0 1 10x83

7 1 1 1 1 1 0 0 00xF8

8 1 0 0 0 0 0 0 00x80

9 1 0 0 1 1 0 0 00x98

Page 84: AVR Microcontrollers

Example-4unsigned char seven_seg_code(unsigned char num)

{

unsigned char out;

switch(num)

{

case 0:out=0xc0;break;

case 1:out=0xf9;break;

case 2:out=0xa4;break;

case 3:out=0xb0;break;

case 4:out=0x99;break;

case 5:out=0x92;break;

case 6:out=0x83;break;

case 7:out=0xf8;break;

case 8:out=0x80;break;

case 9:out=0x98;break;

}

return out;

}

Page 85: AVR Microcontrollers

Exercise2 7- مثال قبل را براي يكseg كاتد مشترك پياده سازي

كنيد.3 مثال قبل را با استفاده از -IC مبدل BCD به

7segment ، 7447.پياده سازي كنيد 4 7- با استفاده ازsegment كاتد مشترك و IC ، 7448 يك

ثانيه بسازيد.1 با فاصله زماني 9 تا 0شمارنده 5 برنامه اي بنويسيد كه عددي را از پورت -B خوانده و

نمايش دهد.7segبرروي 6 ثانيه بسازيد1 با فاصله زماني 99 تا 0- يك شمارنده

Page 86: AVR Microcontrollers

Double 7Segment

Page 87: AVR Microcontrollers

4th Session

Page 88: AVR Microcontrollers

LCD

Page 89: AVR Microcontrollers
Page 90: AVR Microcontrollers

شماره پین نشانه نام توصیف

1 VSS Power supply 0V (GND)

2 VDD Power supply Power supply for logic circuit and LCD (+4. 5V~+5. 5V)

3 VEE LCD Supply Voltage Bias voltage level for LCD driving

4 RS Register selectRegister select input

When RS= “High”, data register is selected .When RS= “Low”, instruction register is selected .

5 RW Read/WriteRead/Write selection input .

When RW= “High”, read operation .When RW= “Low”, write operation .

6 E Read Write enable Start enable signal to read or write the data

789

10

DB0DB1DB2DB3

Data bus 0-7DB0-DB3, in 8-bit bus mode, used as low order bi-directional data

bus .

During 4-bit bus mode, open these pins

11121314

DB4DB5DB6DB7

DB4-DB7, in 8-bit bus mode, used as high order bi-directional data bus. In case of 4-bit bus mode, used as both high and low

order .

DB7 used for Busy Flag output

15 A back-light anode

16 K back-light cathode

Page 91: AVR Microcontrollers
Page 92: AVR Microcontrollers

Initialization/* the LCD module is connected to PORTC */

#asm

. equ __lcd_port=0x15

#endasm

/* now you can include the LCD Functions */

#include <lcd. h>

Lcd_init(20);

Page 93: AVR Microcontrollers

PORT ADDRESS

Page 94: AVR Microcontrollers

LCD Configuration With CodeWizard

Page 95: AVR Microcontrollers

lcd.h – High Levelunsigned char lcd_init(unsigned char lcd_columns)

void lcd_clear(void)

void lcd_gotoxy(unsigned char x, unsigned char y)

void lcd_putchar(char c)

void lcd_puts(char *str)

void lcd_putsf(char flash *str)

Page 96: AVR Microcontrollers

unsigned char lcd_init(unsigned char lcd_columns)

Example:

lcd_init(16)

Page 97: AVR Microcontrollers

void lcd_clear(void)

صفحه ال سی دی را پاک می کند

void lcd_gotoxy(unsigned char x, unsigned char y)

مکان نما را به سطر و ستون دلخواه می بردLcd_gotoxy(4,2)

Page 98: AVR Microcontrollers

void lcd_putchar(char c)

Example :

lcd_putchar('a');

void lcd_putsf(char flash *str)

lcd_putsf(”Hello World");

Page 99: AVR Microcontrollers

void lcd_puts(char *str)

Example:

sprintf(buffer, “tempreture= %d”, temp);

lcd_puts(buffer);

Page 100: AVR Microcontrollers

Example - 7 اراكترxتون پنجم كxطر اول سxدر س ‘a’ تون اولxطر دوم سxو در س

x عبارت“CodeVisionAVR” ي يكxرا بر رو LCD 2x16.نمايش دهيد #include <mega16.h>

#asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> void main(void) {

lcd_init(16);

while (1) { lcd_clear(); lcd_gotoxy(5,0); lcd_putchar('a'); lcd_gotoxy(0,1); lcd_putsf("CodeVisionAVR"); delay_ms(200); }; }

Page 101: AVR Microcontrollers

Example-8 هxكلم روان بصxورت كxه بنويسxيد روي CodeVisionتابعي بxر را LCD

نمايش دهد. #include <mega16.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> void main(void) { int i; lcd_init(16);

while (1) { for (i=0;i<7;i++) { lcd_clear(); lcd_gotoxy(i,0); lcd_putsf("CodeVision"); delay_ms(400); } }; }

Page 102: AVR Microcontrollers

PULL UP

Page 103: AVR Microcontrollers

example5 برنامه اي بنويسيد كه پين پنجم پورتA را pull up كرده و ورودي آن را بخواند

را روشن نمايد.ledچنانچه ورودي صفر شد يك #include <mega32.h> void main(void) { bit x; DDRA.5=0; PORTA.5=1; DDRA.0=1; PORTA.0=0; SFIOR=0x00;

while (1) { x=PINA.5; if (x==0) PORTA.0=1; else PORTA.0=0; }; }

Page 104: AVR Microcontrollers

Keypad

Page 105: AVR Microcontrollers
Page 106: AVR Microcontrollers
Page 107: AVR Microcontrollers
Page 108: AVR Microcontrollers
Page 109: AVR Microcontrollers

Initializationvoid initial_keypad_port()

{

SFIOR=SFIOR&0xFB;

}

Page 110: AVR Microcontrollers

unsigned char key, butnum; int s;

unsigned char keytbl[16]={0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77};

DDRC = 0x0f; PORTC = 0xf0; delay_us(5); key = PINC; DDRC = 0xf0; PORTC = 0x0f; delay_us(5); key = key | PINC;

Page 111: AVR Microcontrollers

if (key != 0xff) { for (butnum=0; butnum<16; butnum++) { if (keytbl[butnum]==key) break; }

Page 112: AVR Microcontrollers

�Example-9 از را عددي كه بنويسيد اي برروي keypadبرنامه خوانده

7seg. دهد نمايش

Page 113: AVR Microcontrollers

#include<mega16.h> #include<delay.h>int key();display(int x);int a;main(){ DDRB=0xff;a=key();display(a);}

Page 114: AVR Microcontrollers

int key(){ unsigned char key, butnum; int s;unsigned char keytbl[16]={0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e,

0x7d, 0x7b, 0x77}; DDRC = 0x0f; PORTC = 0xf0; delay_us(5); key = PINC;

DDRC = 0xf0; PORTC = 0x0f; delay_us(5); key = key | PINC;

if (key != 0xff) { for (butnum=0; butnum<16; butnum++) { if (keytbl[butnum]==key) break; } s=butnum; } else s=17; return s; }

Page 115: AVR Microcontrollers

display(int x) { char str[16]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,

0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

PORTB=str[x]; }

Page 116: AVR Microcontrollers

برنامه باال را طوری تغییر دهید که عدد را LCDنمایش دهد بر روی یک