AVR Microcontrollers
اسلاید 1: AVR MicrocontrollersFirsrt Session
اسلاید 2: منابع : منابع موجود در www.atmel.comمرجع كامل ميكروكنترلرهاي AVR - انتشارات نص - محمد مهدي پرتوي فر و ..ميكروكنترلرهاي AVR و كاربردهاي آنها - انتشارات نص - امير ره افروزنرم افزارها : CodeVisionAVRProteusAVR Studio
اسلاید 3: ميان ترم : 5 نمرهتمرين : 3 نمرهپروژه : 3 نمرهپايان ترم : 10 نمره
اسلاید 4: IntroductionATMEL 8 bit MicrocontrollerFamiliesTiny90S (CLASSIC)MegaLCD AVRExecute One Instruction Per Cycle (MIPS)
اسلاید 5: جایگزینی تراشه های قدیمی
اسلاید 6: نام میکروکنترلر از دو یا سه قسمت تشکیل شده استATMEGA 16ATMEGA 8ATTINY 28LATTINY 28 Vقسمت اول نوع و سری میکرو و قسمت دوم حافظه flash را بیان می کند.قسمت سوم مخفف low power و very low power است. که در جدول زیر شرح داده شده است:
اسلاید 7:
اسلاید 8: PDIP-Package – Mega32
اسلاید 9: TQFP/MLF Package – Mega32
اسلاید 10:
اسلاید 11: ArchitectureRISC: Reduced Instruction Set Computer ==> AVRCISC: Complex Instruction Set Computer
اسلاید 12: CPU Structures
اسلاید 13:
اسلاید 14: Memory TypesDataSRAM (Static Random Access Memory)EEPROM (Electrically Erasable Programmable Read Only Memo)ProgramFlash
اسلاید 15: Program MemoryFlash (for mega32)32K Bytes of In-System Self-Programmable Flash Endurance: 10,000 Write/Erase Cycles
اسلاید 16: 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
اسلاید 17: Program Counter (PC)Instruction Register (IR)Instruction Decoder (ID)
اسلاید 18: REGISTER FILES
اسلاید 19:
اسلاید 20: X-Y-Z Registers
اسلاید 21:
اسلاید 22: ALUArithmetic And Logic UnitArithmeticADD R1,R2R1R1+R2LogicAND R1,R2R1R1 AND R2
اسلاید 23: فیوز بیت هاقسمتی از حافظه میکرو کنترلر ها هستند که امکاناتی را در اختیار کاربر قرار می دهند و با پاک شدن حافظه میکرو تنظیمات آنها از بین نمی رود
اسلاید 24: Clock Source
اسلاید 25: Clock Sources
اسلاید 26: PDIP-Package – Mega32
اسلاید 27: External Crystal Oscillator
اسلاید 28: Low Frequency Crystal Oscillator
اسلاید 29: External RC Oscillator
اسلاید 30: Calibrated Internal RC Oscillator
اسلاید 31: External Clock
اسلاید 32: Timer/Counter OscillatorFor 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.
اسلاید 33: Clock Distribution
اسلاید 34:
اسلاید 35:
اسلاید 36: AVR MicrocontrollersSecond Session
اسلاید 37: SRAM Management
اسلاید 38: SRAM Data Memory (mega32)
اسلاید 39: Programming WithCodevisionAVR
اسلاید 40: Prototype#include <mega32.h>global definitionmain(){local variable;statements;}function1(){local variable;Statements;}function2(){local variable;Statements;}
اسلاید 41: Prototypeچون میکرو همیشه باید در حال فعالیت باشد، درون تابع main یک حلقه دائم قرار داده می شود.#include <mega32.h>global definitionmain(){local variable;دستوراتی که باید یک بار اجرا شوندWhile (1){دستورات و کدهای اصلی برنامه که دائما اجرا می شوند}}
اسلاید 42: نکاتی در مورد برنامه نویسیخط اول همیشه دستور فراخوانی فایل های حاوی توابع header استدر انتهای هر عبارت یک سمی کالن قرار داده می شود} و { در ابتدا و انتهای هر حلقه، عبارت شرطی و یا بلوک قرار داده می شوداز // یا ( /* و */) برای نوشتن توضیح در برنامه استفاده می شود
اسلاید 43: Data TypeTypeSize (Bits)Rangebit10 , 1char8-128 to 127unsigned char80 to 255signed char8-128 to 127int16-32768 to 32767short int16-32768 to 32767unsigned int160 to 65535signed int16-32768 to 32767long int32-2147483648 to 2147483647unsigned long int320 to 4294967295signed long int32-2147483648 to 2147483647float32±1.175e-38 to ±3.402e38double32±1.175e-38 to ±3.402e38
اسلاید 44: متغیر ها و ثابت ها ابتدا باید معرفی شوندنام متغیر نوع متغیر حافظه مورد نیاز برای متغیرeeprom int temp;flash int temp=10;eeprom char str; float a; int b=30;نام متغیر ها می تواند ترکیبی از حروف و اعداد باشد، فقط نام متغیر نباید با عدد شروع شود.
اسلاید 45: Constantsflash int x=123;const char y=‘a’;#define C 100;
اسلاید 46: آرایه هاتعدادی متغیر دلخواه از یک نوع و یک نام که با اندیس های شماره دار از هم جدا هستندint str[10];int i[3]= {2,5,6}رشته(string):به آرایه هایی که حروف اسکی را درون خود نگه می دارند، رشته می گوییم.Char t[5]= “temp”;
اسلاید 47: 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
اسلاید 48: Operators + - * / % ++ -- = == ~ ! != < > <= >= & && | || ^ ? << >> -= += /= %= &= *= ^= |= >>= <<=
اسلاید 49:
اسلاید 50:
اسلاید 51:
اسلاید 52:
اسلاید 53: Variables[<storage modifier>] <type definition> <identifier>;auto int i;static char x[10];register int y;The volatile modifier must be used in order to prevent a variable to be allocated to registers and to warn the compiler that it may be subject to outside change during evaluation.volatile int abc;
اسلاید 54: Specifying the SRAM Storage Address for Global Variablesint a @0x80;struct x { int a; char c; } alfa @0x90;
اسلاید 55: Structures[<storage modifier>] struct [<structure tag-name>] { [<type> <variable-name>[,<variable-name>, ...]]; [<type> [<bitfield-id>]:<width>[,[<bitfield-id>]:<width>, ...]]; ... } [<structure variables>];struct ram_structure { char a,b; int c; char d[30],e[10]; char *pp; } sr;
اسلاید 56: Accessing the EEPROMeeprom char beta;int eeprom *ptr_to_eeprom;Pointers to the EEPROM always use 16 bits.
اسلاید 57: Including Assembly Language in Your Programwhile (i--) { /* Assembly language code sequence */ #asm nop nop #endasm };}
اسلاید 58: AVR Microcontrollers3th Session
اسلاید 59: Decision and loopsif –elsewhiledo-whileforSwitch - case
اسلاید 60:
اسلاید 61:
اسلاید 62:
اسلاید 63:
اسلاید 64:
اسلاید 65:
اسلاید 66:
اسلاید 67:
اسلاید 68: توابع و فرم تابع نویسی(داده های ورودی) نام تابع نوع داده خروجی}تعریف متغیر های محلیدستوراتبازگرداندن مقدار خروجی در صورت وجود{
اسلاید 69: مثال: برنامه ای بنویسید که عدد ورودی را به توان 3 برساندlong int func( int x){long int s;s=x*x*x;return s;}
اسلاید 70: جایگاه نوشتن توابعتوابع را در دو جا می توان نوشت:1- قبل از تابع main2- در زیر کل برنامه#include<header>Void func(void){دستورات{Void main(){دستورات{
اسلاید 71: #include<header>Void func(void);Void main(void){دستوراتWhile(1){دستورات}}Void func(){دستورات}
اسلاید 72:
اسلاید 73: Libraries math.hstdio.hdelay.hMega16.hAnd …
اسلاید 74: PORTS
اسلاید 75:
اسلاید 76: Input= 0 Output=1 DDRA.0=0; // PA.0 input DDRA.5=1; // PA.5 output DDRC=0xff ; // PORTC Direction
اسلاید 77: Output Latch
اسلاید 78: Input register
اسلاید 79: Example-1برنامه ای بنویسد که بر روی پورت B مقدار 0x28 را بنویسد.#include <mega32.h>void main(void){DDRB=0xFF;while (1) { PORTB=0x28; };}
اسلاید 80: Example-2تابعي بنويسيد كه يك چراغ راهنمايي را بصورت زير پياده سازي كند:سبز : 15ثانيهزرد: 3ثانيهقرمز: 15ثانيه-------------------------------------------------------------------نام تابع : trafficsignalورودي : نداردخروجي : نداردسبز : PORTA.0 زرد: PORTA.1 قرمز : PORTA.2
اسلاید 81: Example-2Header file : delay.hvoid delay_us(unsigned int n);void delay_ms(unsigned int n);مثال : تاخير 100 ميكروثانيه ==< delay_us(100)مثال : تاخير 5 ثانيه == < delay_ms(5000)
اسلاید 82: 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);}
اسلاید 83: Exercise-11- تابعي بنويسد كه يك چراغ راهنمايي را با دريافت تاخيرها توسط برنامه زير، راه اندازي كند.سبز : Gdelay ثانيهزرد: Ydelay ثانيهقرمز: Rdelay ثانيه-----------------------------------
اسلاید 84: 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);}
اسلاید 85: 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;}
اسلاید 86: 7segment
اسلاید 87: Common Anode
اسلاید 88: Common Cathode
اسلاید 89: Example-4برنامه ای بنویسید که اعداد 0 تا 9 را بر روي 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); } };}
اسلاید 90: Coding
اسلاید 91: 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;}
اسلاید 92: Exercise2- مثال قبل را براي يك 7seg كاتد مشترك پياده سازي كنيد.3- مثال قبل را با استفاده از IC مبدل BCD به 7segment ، 7447 پياده سازي كنيد.4- با استفاده از 7segment كاتد مشترك و IC ، 7448 يك شمارنده 0 تا 9 با فاصله زماني 1 ثانيه بسازيد.5- برنامه اي بنويسيد كه عددي را از پورت B خوانده و برروي 7seg نمايش دهد.6- يك شمارنده 0 تا 99 با فاصله زماني 1 ثانيه بسازيد
اسلاید 93: Double 7Segment
اسلاید 94: AVR Microcontrollers4th Session
اسلاید 95: LCD
اسلاید 96:
اسلاید 97:
اسلاید 98:
اسلاید 99: 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);
اسلاید 100: PORT ADDRESS
اسلاید 101: LCD Configuration With CodeWizard
اسلاید 102: 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)
اسلاید 103: unsigned char lcd_init(unsigned char lcd_columns)Example:lcd_init(16)
اسلاید 104: void lcd_clear(void)صفحه ال سی دی را پاک می کندvoid lcd_gotoxy(unsigned char x, unsigned char y)مکان نما را به سطر و ستون دلخواه می بردLcd_gotoxy(4,2)
اسلاید 105: void lcd_putchar(char c)Example :lcd_putchar(a);void lcd_putsf(char flash *str)lcd_putsf(”Hello World);
اسلاید 106: void lcd_puts(char *str)Example:sprintf(buffer, “tempreture= %d”, temp);lcd_puts(buffer);
اسلاید 107: Example - 7 در سطر اول ستون پنجم كاراكتر ‘a’ و در سطر دوم ستون اول عبارت “CodeVisionAVR” را بر روي يك 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); };}
اسلاید 108: Example-8تابعي بنويسيد كه بصورت روان كلمه CodeVision را بر روي 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); } };}
اسلاید 109: PULL UP
اسلاید 110: 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; };}
اسلاید 111: Keypad
اسلاید 112:
اسلاید 113:
اسلاید 114:
اسلاید 115:
اسلاید 116: Initializationvoid initial_keypad_port(){SFIOR=SFIOR&0xFB;}
اسلاید 117: 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;
اسلاید 118: if (key != 0xff) { for (butnum=0; butnum<16; butnum++) { if (keytbl[butnum]==key) break; }
اسلاید 119: Key Pressint key_press(){if ( (PINA & 0xF0)!=0xF0 ){delay_ms(T_DEB); // repeat if ( (PINA & 0xF0)!=0xF0 )return 1; // key presselse return 0;// parasite}else return 0;}
اسلاید 120: Find Keyint find_key(){int code, key;// pressed key is in ROW_1PORTA=0b11111110; delay_ms(50); if ((PINA&0xf0)!=0xf0) goto find; // pressed key is in ROW_2 PORTA=0b11111101; delay_ms(50); if ((PINA&0xf0)!=0xf0) goto find; // pressed key is in ROW_3 PORTA=0b11111011; delay_ms(50); if ((PINA&0xf0)!=0xf0) goto find; // pressed key is in ROW_4 PORTA=0b11110111; delay_ms(50); if ((PINA&0xf0)!=0xf0) goto find;
اسلاید 121: Find Key// create codefind: code = ( PINA & 0xF0 ) | ( PORTA & 0x0F ); // COLUMNS value Link With ROWS value switch(code) { case 0xEE:key = R1_C1; break; case 0xDE:key = R1_C2; break; case 0xBE:key = R1_C3; break; case 0x7E:key = R1_C4; break; case 0xED:key = R2_C1; break; case 0xDD:key = R2_C2; break; case 0xBD:key = R2_C3; break; case 0x7D:key = R2_C4; break; case 0xEB:key = R3_C1; break; case 0xDB:key = R3_C2; break; case 0xBB:key = R3_C3; break; case 0x7B:key = R3_C4; break; case 0xE7:key = R4_C1; break; case 0xD7:key = R4_C2; break; case 0xB7:key = R4_C3; break; case 0x77:key = R4_C4; break; default:key = NO_PRS; break; }; PORTA=0xF0;return key;}
اسلاید 122: Key Releasevoid wait_release(){while ((PINA & 0xF0)!=0xF0);delay_ms (T_DEB); // release debounce pass after 20ms}
اسلاید 123: Read Keypadint read_keypad(){ int key; initial_keypad_port(); while ( key_press()== 0); key = find_key(); wait_release(); return key;}
اسلاید 124: ٍExample-9 برنامه اي بنويسيد كه عددي را از keypad خوانده برروي 7segنمايش دهد.
اسلاید 125: #include<mega16.h> #include<delay.h>int key();display(int x);int a;main(){ DDRB=0xff;a=key();display(a);}
اسلاید 126: 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; }
اسلاید 127: 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]; }
اسلاید 128: نمایش دهدLCD برنامه بالا را طوری تغییر دهید که عدد را بر روی یک
اسلاید 129: ProgrammerSTK 200/300
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.