Professional Documents
Culture Documents
Nhóm : BKFET
BÀI 1: Mӣ đҫu
Giӟi thiӋu vӅ hӑ VĐK AVR.
Các phép toán cơ bҧn.
Thӵc hiӋn cài đһt các phҫn mӅm liên quan.
Làm quen vӟi Atmega16.
ii i t iӋ
X ҩt xӭ:
Do ãng tmel sҧn x ҩt.
Là 1 trong 3 dòng vi điӅ k iӇn t ông dөng n ҩt trên t ӏ
trưӡng iӋn nay.
Có n iӅ tín năng vưӧt trӝi.
Giӟi thiӋu hӑ VĐK AVR
Đһc điӇm chung:
Là dòng vi điӅu khiӇn khá mҥnh.
Có cҩu trúc RISC.
Có nhiӅu thanh ghi điӅu khiӇn.
Có nhiӅu loҥi bӝ nhӟ : Flash , EEPROM , SRAM.
Các chân vào ra có khҧ năng chӏu dòng lӟn : 20mA.
Có nhiӅu chӃ đӝ tiӃt kiӋm năng lưӧng: idle, power- down,
standby «
Có khҧ năng hoҥt đӝng ӣ nhiӅu tҫn sӕ.
iiӟi thiӋu h Đ A R
Đһc điӇm chung:
Có nhiӅu ngҳt trong và ngҳt ngoài.
Tích hӧp nhiӅu chӭc năng : PWM , timer/counter , ADC
v«v .
Tích hӧp nhiӅu chuҭn giao tiӃp ngoҥi vi : UART, USART ,
TWI , SPI «.
Dҧi điӋn áp làm viӋc rӝng.
Hoҥt đӝng әn đӏnh đáng tin cұy.
Chӫng loҥi phong phú phù hӧp vӟi nhiӅu mөc đích sӱ
dөng.
Giӟi thiӋu hӑ VĐK AVR
Mӝt vài dòng vđk AVR:
Dòng ATtiny : ATtiny 11 , ATtiny 12 «
Dòng AT90 : AT90C8515 , AT90S2313 , AT90S8515«
Dòng Mega : ATmega8 , ATmega16 , ATmega32 ,
ATmega128«
Các phép toán cơ bҧn
Phép toán AND ( & ) :
Câu lӋnh trong C : !
!
0 0 0
0 1 0
1 0 0
1 1 1
Các phép toán cơ bҧn
Phép toán OR ( | ) :
Câu lӋnh trong C : !
!
0 0 0
0 1 1
1 0 1
1 1 1
Các phép toán cơ bҧn
Phép toán NOT ( ~ ) :
Câu lӋnh trong C : !
!
0 1
1 0
Các phép toán cơ bҧn
Phép toán dӏch bít ( << , >> ) :
Câu lӋnh trong C :
! !
!
!
Thӵc hiӋn cài đһt hưӟng dүn sӱ
dөng các phҫn mӅm hӛ trӧ
Làm quen vӟi Atmega16
BÀI 2: Chӭc năng I/Ovà Ngҳt ngoài
ThiӃt lұp chӭc năng I/O cho VĐK
ThiӃt lұp chӭc năng sӱ dөng ngҳt ngoài
Chӭc năng I/O
Mô tҧ:
Atmega16 có 32 chân vào/ra (I/O) có thӇ lұp trình đưӧc
PORTA (cәng A): 8 chân : PA0 ± PA7 .
PORTB (cәng B): 8 chân : PB0 ± PB7 .
PORTC (cәng C): 8 chân : PC0 ± PC7.
PORTD (cәng D): 8 chân : PD0 ± PD7.
Các chân này đưӧc điӅu khiӇn thông qua các thanh ghi
tương ӭng vӟi các cәng cӫa chúng.
Chӭc năng I/O
Các thanh ghi điӅu khiӇn chӭc năng I/O:
Vӟi PORTA (Cәng A ) ± Các cәng khác tương tӵ :
Thanh ghi PORTA: Thanh ghi dӳ liӋu cӫa các PORT . Đӑc ghi đưӧc .
PAn (n : 0-7 ):
Trong thư viӋn < avr/io.h > các chân PA0 đӃn PA7 đã đưӧc
đӏnh nghĩa tương ӭng vӟi các sӕ nguyên tӯ 0 ± 7.
Vұy ta có :
PORTA |= (1<<PA2); => PORTA = PORTA | (1*2^2) ;
1*2^2 = 4 => 0000 0100
PORTA = PORTA | 0b00000100 ;
Y Y
PA7 0 0 PA7 0
PA6 0 0 PA6 0
PA5 0 0 PA5 0
=
PA4 0 0 PA4 0
PA3 0 | 0 PA3 0
PA2 0 1 PA2 1
PA1 0 0 PA1 0
PA0 0 0 PA0 0
Tương tӵ khi ta muӕn đһt 1 bit vӅ µ0¶:
PORTA &= ~ ( 1 << PA2 ); => PORTA &= ~ 0b 0000 0100 ;
=> PORTA = PORTA & 0b 1111 1011 ;
Y Y
PA7 1 1 PA7 1
PA6 1 1 PA6 1
PA5 1 1 PA5 1
PA3 1 1 PA3 1
PA2 1 0 PA2 0
PA1 1 1 PA1 1
PA0 1 1 PA0 1
Vұy ta có công thӭc tәng quát cho viӋc set bít cӫa 1 thanh ghi
như sau
Set lên µ1¶ :
Y Y
Set vӅ µ0¶ :
Y Y
Chӭc năng I/O
Các thanh ghi điӅu khiӇn chӭc năng I/O:
Vӟi PORTA (Cәng A ):
Thanh ghi DDRA : Thanh ghi chӍ hưӟng vào/ra . Đӑc ghi đưӧc
0 0 Ngҳt mӭc thҩp
0 1 Ngҳt thay đәi mӭc logic
1 0 Ngҳt sưӡn xuӕng
1 1 Ngҳt sưӡn lên
Chӭc năng ngҳt ngoài (External Interrupt)
` `
0 0 Ngҳt mӭc thҩp
0 1 Ngҳt thay đәi mӭc logic
1 0 Ngҳt sưӡn xuӕng
1 1 Ngҳt sưӡn lên
Chӭc năng ngҳt ngoài (External Interrupt)
` `
ĐӇ xҧy ra ngҳt ӣ chân này thì xung tín hiӋu vào phҧi có đӝ rӝng lӟn
hơn 50ns
Chӭc năng ngҳt ngoài (External Interrupt)
i i
INTF1 : Đưӧc set lên 1 khi xҧy ra ngҳt sưӡn hoһc thay đәi mӭc logic ӣ
chân INT1. Luôn là 0 khi là ngҳt mӭc.
INTF0 : Đưӧc set lên 1 khi xҧy ra ngҳt sưӡn hoһc thay đәi mӭc logic ӣ
chân INT0. Luôn là 0 khi là ngҳt mӭc.
INTF2 : Đưӧc set lên 1 khi xҧy ra ngҳt ӣ chân INT2.
Các bit này đưӧc xóa vӅ 0 khi các vector ngҳt đưӧc gӑi.
Chӭc năng ngҳt ngoài (External Interrupt)
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
SIGNAL(SIG_INTERRUPT1)
{
PORTA |= (1<<PA0);
_delay_ms(100);
PORTA &= ~(1<<PA0);
}
void main()
{
DDRA = 0xFF;
DDRB = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
PORTB = 0x00;
Bit 6,3 : WGM00 , WGM01 : ThiӃt lұp chӃ đӝ hoҥt đӝng cӫa T/C
ҧo sát Timer/Counter0
TCCR0 : Time/Counter Control Register :
Bit 5,4 : COM01,COM00 : ThiӃt lұp chӃ đӝ đҫu ra cӫa chân OC0.
m ҧ sát i er/ ter
Đӕi vӟi các c Ӄ đӝ k ô g p ҧi PWM
Thanh ghi này làm nhiӋm vө lưu giá trӏ đӃm cӫa bӝ T/C . Giá
trӏ cӫa thanh ghi này sӁ tăng 1 đơn vӏ sau mӛi khoҧng thӡi
gian đã đưӧc đӏnh sҹn trong quá trình chia tҫn.
Mӛi khi giá trӏ cӫa TCNT bҵng vӟi giá trӏ cӫa thanh ghi OCR
sӁ xҧy ra 1 sӵ kiӋn ngҳt và chân OC0 sӁ cho ra dҥng sóng đã
đưӧc thiӃt lұp ӣ mode .
m ҧo sát imer/Cou ter0
OCR0 : Output Compare Register :
Giá trӏ cӫa thanh ghi này đưӧc ngưӡi sӱ dөng thiӃt lұp .
K ҧo sát Timer/Counter
TIMSK : Time/Counter Interrupt Mask :
Bit OCIE0 : Cho phép ngҳt khi thanh ghi OCR = TCNT
Bit TOIE0 : Cho phép ngҳt tràn Timer/Counter0.
ӝ Timer/Counter
Sӱ dөng T/C như 1 bӝ Timer:
Mô tҧ hoҥt đӝng : ( Normal Mode )
Trong chӃ đӝ Normal Mode thanh ghi TCNT tăng giá trӏ
cӫa nó lên 1 đơn vӏ sau mӛi 1 khoҧng thӡi gian đã đưӧc
đӏnh trưӟc trong quá trình chia tҫn . Khi TCNT đҥt giá trӏ
bҵng MAX = 255 , nó sinh ra mӝt ngҳt. Ta tұn dөng ngҳt
này đӇ biӃn T/C thành 1 bӝ Timer.
Ví dө : Thӵc hiӋn nháy đèn LED sau mӛi 0.1ms .Vӟi
VDK hoҥt đӝng ӣ tҫn sӕ 8Mhz.
i er/ ter
1 s 1 s
(255-155) x 1 s = 0.1 s
155 156 157 158 159 « 255
TCNT0 =0;
Timer/Co nter
while(1)
{
if (TCNT0 == 200) TCNT0 = 0; // cho phep dem den 200
PORTD = TCNT0;
}
}
ӝ Ti er/ nter
Sӱ dөng T/C làm bӝ PWM:
Mô tҧ hoҥt đӝng : ( chӃ đӝ fast PWM )
Tӯ chân OC0 cӫa VĐK sӁ có xung ra vӟi đӝ rӝng xung thay đәi
đưӧc bҵng cách thay đәi giá trӏ cӫa OCR0 ( 0 ± 255 ). Tҫn sӕ cӫa
chuӛi xung này đưӧc tính bҵng công thӭc:
2Y` 2
Trong đó: fPWM : Tҫn sӕ xung ra.
fclk : Tҫn sӕ hoҥt đӝng cӫa VĐK.
N : HӋ sӕ chia tҫn.
Ví dө : Thӵc hiӋn nháy đèn LED bҵng chӃ đӝ PWM , nhұn xét
sӵ nhҩp nháy cӫa LED .
V i er/ ter
fPWM = 8/(8 x 256)
= 0,004 Mhz
PWM = 1/ fPWM
= 250 s
B Timer/Counter
#include <avr/io.h>
void main()
{
DDRB = 0xFF;
TCCR0 |= (1<<CS01); //chia tan 8
TCCR0 |= (1<<WGM01)|(1<<WGM00); // che do fast
PWM
OCR0 = 10; // khoi tao thanh ghi OCR0
TCCR0 |= (1<<COM01)|(1<<COM00);
//chon che do OC0 =1 khi TCNT = OCR
}
mhӕi USART
Mô tҧ:
Atmega16 có 1 bô USART ( Universal Synchronous/
Asynchronous serial Receiver and Transmitter) .
Đây là khӕi giao tiӃp nӕi tiӃp rҩt linh hoҥt :
Hoҥt đӝng đưӧc ӣ chӃ đӝ song công ( truyӅn nhұn đӝc lұp )
TruyӅn thông nӕi tiӃp đӗng bӝ ( Synchronous )hoһc không
đӗng bӝ ( Asynchronous ).
Đӗng bӝ giao tiӃp Master / Slave
Giҧi tӕc đӝ truyӅn đa cҩp
Cho phép sӱ dөng nhiӅu khung truyӅn : 5,6,7,8,9 Databits ;
1,2 Stopbit.
mhӕi
Mô tҧ:
Có khҧ năng tҥo bit kiӇm tra chҹn lҿ và kiӇm tra bit kiӇm tra
chҹn lҿ.
Có khҧ năng phát hiӋn lӛi tràn
Có khҧ năng phát hiӋn lӛi khung truyӅn
Có khҧ năng x2 tӕc đӝ ӣ chӃ đӝ không đӗng bӝ
Có các ngҳt phát hiӋn: kӃt thúc quá trình nhұn , thanh ghi
truyӅn trӕng , kӃt thúc quá trình truyӅn
Khӕi USART
Các chân cӫa khӕi USART:
Chân TXD ( PD1 ) :
Chân xuҩt tín hiӋu ra cӫa khӕi USART.
Chân RXD ( PD0 ) :
Chân nhұn tín hiӋu vào cӫa khӕi USART.
=>> Muӕn 2 khӕi truyӅn thông này giao tiӃp vӟi nhau thì phҧi
kӃt nӕi TXD cӫa bӝ này vӟi RXD cӫa bӝ kia.
Chân XCK ( PB0 ) :
Chân kӃt nôi xung Clock cӫa các bӝ USART . Chân
này chӍ sӱ dөng trong chӃ đӝ đӗng bӝ ( Synchronous )
Kh i S
Khung truyӅn:
RXEN : RX Enable :
Cho phép nhұn.
TXEN : TX Enable :
Cho phép truyӅn.
UCSZ2 : Character size: sӕ lưӧng databit
kӃt hӧp cùng UCSZ1, UCSZ0 ӣ thanh ghi UCSRC đӇ xác đӏnh
sӕ databit.
mhӕi
Chӑ sӕ data bit:
mh i USART
Các thanh ghi :
UCSRB ( USART Control and Status Register C)
URSEL:
Bit này là 1 thì thanh ghi này là UCRSC ( chính nó :D )
Bit này là 0 thì thanh ghi này trӣ thành UBRRH sӱ dөng đӇ set
Baudrate.
UMSEL : Mode Select : Chӑn chӃ đӝ :
Set lên 1: chӃ đӝ đӗng bӝ Synchronous.
Set vӅ 0 : chӃ đӝ không đӗng bӝ Asynchronous.
mh i USART
Các thanh ghi :
UCSRB ( USART Control and Status Register C)