1.32k likes | 1.95k Vues
????? : ????? ????? ?? www.atmel.com???? ???? ?????????????? AVR - ???????? ?? - ???? ???? ????? ?? ? ..?????????????? AVR ? ????????? ???? - ???????? ?? - ???? ?? ???????? ??????? : CodeVisionAVRProteusAVR Studio. ???? ??? : 5 ????????? : 3 ????????? : 3 ????????? ??? : 10 ????. Introdu
                
                E N D
1. AVR Microcontrollers Firsrt Session 
2. ????? : 
????? ????? ?? www.atmel.com
???? ???? ?????????????? AVR  - ???????? ?? - ???? ???? ????? ?? ? ..
?????????????? AVR ? ????????? ???? - ???????? ?? - ???? ?? ?????
??? ??????? : 
CodeVisionAVR
Proteus
AVR Studio 
3. ???? ??? : 5 ????
?????  : 3 ????
????? : 3 ????
????? ??? : 10 ???? 
4. Introduction ATMEL 
8 bit Microcontroller
Families
Tiny
90S (CLASSIC)
Mega
LCD AVR
Execute One Instruction Per Cycle (MIPS)
 
5. ???????? ????? ??? ????? 
6. ??? ??????????? ?? ?? ?? ?? ???? ????? ??? ??? ATMEGA 16
ATMEGA 8
ATTINY 28L
ATTINY 28 V
???? ??? ??? ? ??? ????? ? ???? ??? ????? flash ?? ???? ?? ???.
???? ??? ???? low power ? very low power  ???. ?? ?? ???? ??? ??? ???? ??? ???:
 
8. PDIP-Package  Mega32 
9. TQFP/MLF Package  Mega32 
11. Architecture RISC: Reduced Instruction 			Set Computer  ==> AVR
CISC: Complex Instruction 			Set Computer 
12. CPU Structures 
14. Memory Types Data
SRAM  (Static Random Access Memory)
EEPROM  (Electrically Erasable Programmable Read Only Memo)
Program
Flash 
15. Program Memory Flash (for mega32)
32K Bytes of In-System Self-Programmable Flash Endurance: 10,000 Write/Erase Cycles
 
16. Data Memories SRAM (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 
20. X-Y-Z  Registers 
22. ALU Arithmetic And  Logic Unit
Arithmetic
ADD R1,R2
R1?R1+R2
Logic
AND R1,R2
R1?R1  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 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.
 
33. Clock Distribution 
36. AVR Microcontrollers Second Session
 
37. SRAM Management 
38. SRAM Data Memory (mega32) 
39. Programming With
CodevisionAVR 
40. Prototype #include <mega32.h>
global definition
main()
{
local variable;
statements;
}
function1()
{
local variable;
Statements;
}
function2()
{
local variable;
Statements;
} 
41. Prototype ??? ????? ????? ???? ?? ??? ?????? ????? ???? ???? main  ?? ???? ???? ???? ???? ?? ???.
#include <mega32.h>
global definition
main()
{
local variable;
???????? ?? ???? ?? ??? ???? ????
While (1)
{
??????? ? ????? ???? ?????? ?? ????? ???? ?? ????
}
}
 
42. ????? ?? ???? ?????? ????? ?? ??? ????? ????? ???????? ???? ??? ???? ????? header ???
?? ?????? ?? ????? ?? ??? ???? ???? ???? ?? ???
} ? { ?? ????? ? ?????? ?? ????? ????? ???? ? ?? ???? ???? ???? ?? ???
?? //   ?? ( /* ? */) ???? ????? ????? ?? ?????? ??????? ?? ???  
43. 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 
44. ????? ?? ? ???? ?? ????? ???? ????? ???? ??? ?????                     ??? ?????                  ????? ???? ???? ???? ?????
eeprom                                      int                      temp;
flash                                           int                      temp=10;
eeprom                                       char                   str;
                                                    float                    a;
                                                    int                       b=30;
??? ????? ?? ?? ????? ?????? ?? ???? ? ????? ????? ??? ??? ????? ????? ?? ??? ???? ???. 
45. Constants flash 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 type bit  x,y;
x=1;
from  R2.0  to  R14.7 ? max=104
Set in following menu:
Project/Configure/C Compiler/Code Generation/Bit Variable size 
48. Operators  +			  -
  *			  /
  %			  ++
  --			  =
  ==		  ~
  !			  !=
  <			  >
  <=		  >=
  &			  &&
  |			  ||
  ^			  ?
  <<		  >>
  -=			  +=
  /=			  %=
  &=		  *=
  ^=		  |=
  >>=		  <<= 
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 Variables int 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 EEPROM eeprom char beta;
int eeprom *ptr_to_eeprom;
Pointers to the EEPROM always use 16 bits. 
57. Including Assembly Language in Your Program while (i--) {
      /* Assembly language code sequence */
      #asm
          nop
          nop
      #endasm
      };
}
 
58. AVR Microcontrollers 3th Session 
59. Decision and loops if else
while
do-while
for
Switch - case 
68. ????? ? ??? ???? ????? (???? ??? ?????)  ??? ????         ??? ???? ?????
}
????? ????? ??? ????
???????
?????????? ????? ????? ?? ???? ????
{ 
69. ????:?????? ?? ??????? ?? ??? ????? ?? ?? ???? 3 ?????? long int     func(  int x)
{
long int s;
s=x*x*x;
return s;
}
 
70. ?????? ????? ????? ????? ?? ?? ?? ?? ?? ???? ????:
1- ??? ?? ???? main
2- ?? ??? ?? ??????
#include<header>
Void func(void)
{
???????
{
Void main()
{
???????
{ 
71. 
#include<header>
Void func(void);
Void main(void)
{
???????
While(1)
{
???????
}
}
Void func()
{
???????
} 
73. Libraries  math.h
stdio.h
delay.h
Mega16.h
And 
 
74. PORTS 
76. Input= 0                        Output=1DDRA.0=0;      // PA.0  inputDDRA.5=1;	 // PA.5   outputDDRC=0xff ;    // PORTC  
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-2 Header file :    delay.h
void 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-1 1- ????? ?????? ?? ?? ???? ???????? ?? ?? ?????? ??????? ????  ?????? ???? ??? ?????? ???.
??? : 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-4 unsigned 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. Exercise 2- ???? ??? ?? ???? ?? 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 Microcontrollers 4th Session
 
95. LCD 
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 Level unsigned 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 
116. Initialization void 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 Press int key_press()
{
	if ( (PINA & 0xF0)!=0xF0 )
	{
		delay_ms(T_DEB);          	
		// repeat 
		if ( (PINA & 0xF0)!=0xF0 )	
		return 1;       // key press
		else        
		return 0;	// parasite
	}
	else                    
	        return 0;
}
 
120. Find Key int find_key()
{	
	int code, key;
	
	// pressed key is in ROW_1
	PORTA=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 code
find:
   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 Release void wait_release()
{
	while ((PINA & 0xF0)!=0xF0);
	delay_ms (T_DEB);     
// release debounce pass after 20ms
}  
123. Read Keypad int 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. Programmer
STK 200/300