Upload
rachel
View
89
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
Firsrt Session
: منابع منابع موجود درwww.atmel.com مرجع كامل ميكروكنترلرهايAVR انتشارات نص - محمد -
مهدي پرتوي فر و .. ميكروكنترلرهايAVR و كاربردهاي آنها - انتشارات نص - امير
ره افروز : نرم افزارها
CodeVisionAVRProteusAVR Studio
نمره5: ميان ترم نمره3 : تمرين نمره3 : پروژه نمره10: پايان ترم
IntroductionATMEL 8 bit MicrocontrollerFamilies
Tiny90S (CLASSIC)MegaLCD AVR
Execute One Instruction Per Cycle (MIPS)
جایگزینی تراشه های قدیمیتراشه قدیمی جایگزین مناسب
AT90S2313AT90S2323AT90S4433AT90S8515ATMEGA103ATMEGA161ATMEGA163ATMEGA323
ATTINY2313ATTINY25ATMEGA8ATMEGA8515ATMEGA128ATMEGA162ATMEGA16ATMEGA32
نام میکروکنترلر از دو یا سه قسمت تشکیل شده است
ATMEGA 16ATMEGA 8ATTINY 28LATTINY 28 V
flashقسمت اول نوع و سری میکرو و قسمت دوم حافظه را بیان می کند.
very low powerو low powerقسمت سوم مخفف است. که در جدول زیر شرح داده شده است:
فرکانس قابل قبول کریستال
محدوده ولتاژ تغذیه
نام میکروکنترلر
0-16 MHZ0-8 MHZ0-4 MHZ
4-5.5 v2.7-5.5 v1.8-5.5 v
بدون AVRمیکروکنترلر پسوند
با AVRمیکروکنترلر Lپسوند
با AVRمیکروکنترلر Vپسوند
PDIP-Package – Mega32
TQFP/MLF Package – Mega32
ArchitectureRISC: Reduced Instruction Set
Computer ==> AVR
CISC: Complex Instruction Set Computer
Memory TypesData
SRAM (Static Random Access Memory)EEPROM (Electrically Erasable Programmable Read
Only Memo)
ProgramFlash
Program MemoryFlash (for mega32)
32K Bytes of In-System Self-Programmable Flash Endurance: 10,000 Write/Erase Cycles
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
Program Counter (PC)Instruction Register (IR)
Instruction Decoder (ID)
X-Y-Z Registers
ALU
فیوز بیت هاقسمتی از حافظه میکرو کنترلر ها هستند که امکاناتی
را در اختیار کاربر قرار می دهند و با پاک شدن حافظه میکرو تنظیمات آنها از بین نمی رود
Clock Source
Clock Sources
PDIP-Package – Mega32
External Crystal Oscillator
Low Frequency Crystal Oscillator
External RC Oscillator
Calibrated Internal RC Oscillator
External Clock
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.
Clock Distribution
Second Session
SRAM Management
SRAM Data Memory (mega32)
Programming WithCodevisionAVR
Prototype #include <mega32.h> global definition main() {
local variable; statements;
} function1() {
local variable; Statements;
} function2() {
local variable; Statements;
}
Prototype mainچون میکرو همیشه باید در حال فعالیت باشد، درون تابع
یک حلقه دائم قرار داده می شود. #include <mega32.h>
global definitionmain(){
local variable;دستوراتی که باید یک بار اجرا شوندWhile (1){دستورات و کدهای اصلی برنامه که دائما اجرا می شوند}
}
نکاتی در مورد برنامه نویسیخط اول همیشه دستور فراخوانی فایل های حاوی توابع
headerاست
در انتهای هر عبارت یک سمی کالن قرار داده می شود
{ و } در ابتدا و انتهای هر حلقه، عبارت شرطی و یا بلوک قرار داده می شود
از // یا ) /* و */( برای نوشتن توضیح در برنامه استفاده می شود
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
متغیر ها و ثابت ها ابتدا باید معرفی شوند
نام متغیر نوع متغیر حافظه مورد نیاز برای متغیر
eeprom int temp;
flash int temp=10;
eeprom char str;
float a;
int b=30;
نام متغیر ها می تواند ترکیبی از حروف و اعداد باشد، فقط نام متغیر .نباید با عدد شروع شود
Constantsflash int x=123;const char y=‘a’;#define C 100;
آرایه هاتعدادی متغیر دلخواه از یک نوع و یک نام که با اندیس های
شماره دار از هم جدا هستند
int str[10];int i[3]= {2,5,6}
:(stringرشته)به آرایه هایی که حروف اسکی را درون خود نگه می دارند،
رشته می گوییم.Char t[5]= “temp;”
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
Operators + - * / % ++ -- = == ~ ! != < > <= >= & && | || ^ ? << >> -= += /= %= &= *= ^= |= >>= <<=
3th Session
Decision and loopsif –elsewhiledo-whileforSwitch - case
توابع و فرم تابع نویسی)نام تابع نوع داده خروجی )داده های ورودی{تعریف متغیر های محلیدستوراتبازگرداندن مقدار خروجی در صورت وجود}
مثال:برنامه ای بنویسید که عدد ورودی را به
برساند3توان long int func( int x){long int s;s=x*x*x;return s;}
جایگاه نوشتن توابع:توابع را در دو جا می توان نوشت
main- قبل از تابع 1- در زیر کل برنامه2
#include<header>Void func(void){دستورات{
Void main)({دستورات
{
#include<header>Void func(void);Void main(void){دستوراتWhile(1){دستورات}}
Void func)({دستورات}
Libraries math.hstdio.hdelay.hMega16.hAnd …
PORTS
Input= 0 Output=1DDRA.0=0; // PA.0 inputDDRA.5=1; // PA.5 outputDDRC=0xff ; // PORTC
Direction
Output Latch
Input register
Example-1 پورت روی بر که بنویسد ای را 0x28مقدار Bبرنامه
بنویسد.#include <mega32.h>
void main(void)
{
DDRB=0xFF;
while (1)
{
PORTB=0x28;
};
}
Example-2 تابعي بنويسيد كه يك چراغ راهنمايي را بصورت زير پياده
سازي كند:ثانيه15 : سبزثانيه3: زردثانيه15: قرمز
-------------------------------------------------------------------trafficsignalنام تابع :
ورودي : نداردخروجي : ندارد
PORTA.2 : قرمز PORTA.1 :زرد PORTA.0 : سبز
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)
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);}
Exercise-11 تابعي بنويسد كه يك چراغ راهنمايي را با دريافت -
تاخيرها توسط برنامه زير، راه اندازي كند.سبز : Gdelayثانيه زرد :Ydelayثانيه قرمز :Rdelayثانيه
-----------------------------------
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);}
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;
}
7segment
Common Anode
Common Cathode
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); } };}
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
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;
}
Exercise2 7- مثال قبل را براي يكseg كاتد مشترك پياده سازي
كنيد.3 مثال قبل را با استفاده از -IC مبدل BCD به
7segment ، 7447.پياده سازي كنيد 4 7- با استفاده ازsegment كاتد مشترك و IC ، 7448 يك
ثانيه بسازيد.1 با فاصله زماني 9 تا 0شمارنده 5 برنامه اي بنويسيد كه عددي را از پورت -B خوانده و
نمايش دهد.7segبرروي 6 ثانيه بسازيد1 با فاصله زماني 99 تا 0- يك شمارنده
Double 7Segment
4th Session
LCD
شماره پین نشانه نام توصیف
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
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);
PORT ADDRESS
LCD Configuration With CodeWizard
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)
unsigned char lcd_init(unsigned char lcd_columns)
Example:
lcd_init(16)
void lcd_clear(void)
صفحه ال سی دی را پاک می کند
void lcd_gotoxy(unsigned char x, unsigned char y)
مکان نما را به سطر و ستون دلخواه می بردLcd_gotoxy(4,2)
void lcd_putchar(char c)
Example :
lcd_putchar('a');
void lcd_putsf(char flash *str)
lcd_putsf(”Hello World");
void lcd_puts(char *str)
Example:
sprintf(buffer, “tempreture= %d”, temp);
lcd_puts(buffer);
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); }; }
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); } }; }
PULL UP
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; }; }
Keypad
Initializationvoid initial_keypad_port()
{
SFIOR=SFIOR&0xFB;
}
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; }
�Example-9 از را عددي كه بنويسيد اي برروي keypadبرنامه خوانده
7seg. دهد نمايش
#include<mega16.h> #include<delay.h>int key();display(int x);int a;main(){ DDRB=0xff;a=key();display(a);}
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; }
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]; }
برنامه باال را طوری تغییر دهید که عدد را LCDنمایش دهد بر روی یک