Escolar Documentos
Profissional Documentos
Cultura Documentos
BI 1: M
Gi i thi u h V K AVR
Xu t x :
y Do hng Atmel s n xu t. y L 1 trong 3 dng vi i u khi n thng d ng nh t trn th tr ng hi n nay. y C nhi u tnh n ng v
t tr i.
Gi i thi u h V K AVR
c i m chung:
y L dng vi i u khi n kh m nh.
y C c u trc RISC. y C nhi u thanh ghi i u khi n. y C nhi u lo i b nh : Flash , EEPROM , SRAM. y Cc chn vo ra c kh n ng ch u dng l n : 20mA. y C nhi u ch standby
ti t ki m n ng l ng
y C kh n ng ho t
nhi u t n s .
Gi i thi u h V K AVR
c i m chung:
y C nhi u ng t trong v ng t ngoi. y Tch h p nhi u ch c n ng : PWM , timer/counter , ADC vv . y Tch h p nhi u chu n giao ti p ngo i vi : UART, USART , TWI , SPI . y D i i n p lm vi c r ng. y Ho t ng n nh ng tin c y. 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 vi dng v k AVR:
y Dng ATtiny : ATtiny 11 , ATtiny 12 y Dng AT90 : AT90C8515 , AT90S2313 , AT90S8515 y Dng Mega : ATmega8 , ATmega16 , ATmega32 , ATmega128
Cc php ton c b n
Php ton AND ( & ) :
y Cu l nh trong C : Y = A & B ;
A 0 0 1 1
B 0 1 0 1
Y 0 0 0 1
Cc php ton c b n
Php ton OR ( | ) :
y Cu l nh trong C : Y = A | B ;
A 0 0 1 1
B 0 1 0 1
Y 0 1 1 1
Cc php ton c b n
Php ton NOT ( ~ ) :
y Cu l nh trong C : Y = ~A ;
A 0 1
Y 1 0
Cc php ton c b n
Php ton d ch bt ( << , >> ) :
y Cu l nh trong C :
Th c hi n ci t h ng d n s d ng cc ph n m m h tr
Lm quen v i Atmega16
BI 2: Ch c n ng I/O v Ng t ngoi
y Thi t l p ch c n ng I/O cho V K y Thi t l p ch c n ng s d ng ng t ngoi
Ch c n ng I/O
M t :
y Atmega16 c 32 chn vo/ra (I/O) c th l p trnh c y PORTA (c ng A): 8 chn : PA0 PA7 . y PORTB (c ng B): 8 chn : PB0 PB7 . y PORTC (c ng C): 8 chn : PC0 PC7. y PORTD (c ng D): 8 chn : PD0 PD7. y Cc chn ny c i u khi n thng qua cc thanh ghi t ng ng v i cc c ng c a chng.
Ch c n ng I/O
Cc thanh ghi i u khi n ch c n ng I/O:
y V i PORTA (C ng A ) Cc c ng khc t
ng t :
c ghi c.
Trong th vi n < avr/io.h > cc chn PA0 n PA7 c nh ngh a t ng ng v i cc s nguyn t 0 7. y V y ta c : PORTA |= (1<<PA2); => PORTA = PORTA | (1*2^2) ;
PORTA
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 0 0 0 0 0 0 0 0 0 0 0
PORTA
PA7 PA6 PA5 0 0 0 0 0 1 0 0
0 0 1 0 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 ;
PORTA
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 1 1 1 1 1 1 1 1 1 1
PORTA
PA7 PA6 1 1 1 1 1 0 1 1
&
1 1 1 0 1 1
Set ln 1 : Tn_thanh_ghi | = (1 << Tn_bit ); PORTB |= (1<<Pb2); y Clear v 0 : Tn_thanh_ghi &= ~ (1 << Tn_bit ); PORTB&=~(1<<Pb3);
y
Ch c n ng I/O
Cc thanh ghi i u khi n ch c n ng I/O:
y V i PORTA (C ng A ): y Thanh ghi DDRA : Thanh ghi ch h
ng vo/ra .
c ghi
Th c hi n set bit : DDRA |= ( 1<< DDAn ); // v i chn t ng ng l u ra. DDRA &= ~( 1<< DDAn ); // v i chn t ng ng l u vo.
Ch c n ng I/O
Cc thanh ghi i u khi n ch c n ng I/O:
y V i PORTA (C ng A ): y Thanh ghi PINA : Thanh ghi ch dng cho m c ch tr u vo. Ch c c.
c cc gi
Cch ki m tra cc chn vo: if (PINA == 0b0000 0100) // Ki m tra chn 2 c a PORTA c // ph i m c 1 khng. { /*code*/}
Th c hnh s d ng ch c n ng I/O
y H n ch :
y if (PINA = 0x00000100) {}
khi c nhi u phm n ng th i th khng nh n bi t c => c n th c hi n ki m tra c l p theo u vo => if (!( PINA & ( 1<< PA2 ))) {/* code */} y Vi c s d ng phm b m theo d ng ny i h i V K ph i ho t ng lin t c ( ch h i vng )
x y ra ng t h n 50ns
chn ny th xung tn hi u vo ph i c
r ng l n
INTF1 : c set ln 1 khi x y ra ng t s n ho c thay chn INT1. Lun l 0 khi l ng t m c. INTF0 : c set ln 1 khi x y ra ng t s n ho c thay chn INT0. Lun l 0 khi l ng t m c. INTF2 : c set ln 1 khi x y ra ng t chn INT2.
i m c logic i m c logic
Cc bit ny
c xa v 0 khi cc vector ng t
c g i.
ng t ngoi :
void main() { DDRA = 0xFF; DDRB = 0xFF; DDRD = 0x00; PORTD = 0xFF; PORTB = 0x00; MCUCR &=~ ((1<<ISC11)|(1<<ISC10)); // ngat muc thap o chan ngat INT1 GICR |= (1<<INT1); // cho phep ngat ngoai sei(); // cho phep ngat toan cuc while(1) { for(x=0;x<8;x++) { PORTB =(1<<x); _delay_ms(100); } } }
B Timer/Counter
M t :
y Atmega16 c 2 Timer/Counter 8 bits v 1 Timer/Counter 16 bits y Timer/Counter0 : 8 bits. y Timer/Counter1 : 16 bits. y Timer/Counter2 : 8 bits. y Cc b Timer/Counter ny c r t nhi u ch c n ng ng d ng a d ng trong th c t .
B Timer/Counter
Cc chn c a b timer/counter:
y Timer/Counter 0:
y T0 ( PB0 ) y OC0 ( PB3 )
y Timer/Counter 1:
y y y y
y Timer/Counter 2:
y OC2 ( PD7 ) y TOSC1 ( PC6) y TOSC2 ( PC7)
B Timer/Counter
Cc v n
y Cc v n
trong bi h c:
c b n c a b Timer/Counter. y S d ng Timer/Counter nh 1 b Timer. y S d ng Timer/Counter nh 1 b Counter. y S d ng Timer/Counter lm b PWM ( Pulse Width Modulation ).
B Timer/Counter
Cc v n
y L Module
c b n:
c l p so v i CPU. y Ch c n ng chnh l lm b nh th i (timer) v b ms ki n (counter). y 3 b Timer/Counter c a ATmega16 u c b canh ch nh th i gian ( Caliration ) s d ng trong cc ng d ng th i gian th c r t ti n l i. y Thng th ng 1 b Timer/Counter s c cc ch ho t ng : Normal Mode , CTC Mode , PWM Mode.
Kh o st Timer/Counter0
Cc nh ngh a quan tr ng c n n m
m
c:
c,
y BOTTOM : gi tr nh nh t m 1 T/C c th gi tr ny b ng 0.
y MAX : gi tr l n nh t m 1 T/C c th m c , gi tr ny ph thu c vo phn gi i c a T/C . VD: T/C0 l T/C 8bits => MAX = 2^8 - 1 = 255.
BOTTOM v MAX l 2 h ng s i v i 1 T/C. y TOP : L gi tr m khi T/C t t i n s thay i tr n thi. BOTTOM TOP MAX . Gi tr TOP c thi t l p thng qua 1 thanh ghi ng v i m i T/C.
Kh o st Timer/Counter0
Cc thanh ghi i u khi n Timer/Counter :
y TCCR0 : Time/Counter Control Register :
ho t
ng c a T/C
Kh o st Timer/Counter0
y TCCR0 : Time/Counter Control Register :
u ra c a chn OC0.
Kh o st Timer/Counter0
i v i cc ch khng ph i PWM
i v i ch
Fast PWM
Kh o st Timer/Counter0
i v i cc ch Phase Correct PWM Mode
Kh o st Timer/Counter0
Cc thanh ghi i u khi n Timer/Counter :
y TCCR0 : Time/Counter Control Register :
chia t n
Kh o st Timer/Counter0
Cc ch chia t n :
Kh o st Timer/Counter0
y TCNT0 : Time/Counter Register :
Thanh ghi ny lm nhi m v l u gi tr m c a b T/C . Gi tr c a thanh ghi ny s t ng 1 n v sau m i kho ng th i gian c nh s n trong qu trnh 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 chn OC0 s cho ra d ng sng c thi t l p mode .
Kh o st Timer/Counter0
y OCR0 : Output Compare Register :
Gi tr c a thanh ghi ny
c ng
i s d ng thi t l p .
Kh o st Timer/Counter0
y TIMSK : Time/Counter Interrupt Mask :
Bit OCIE0 : Cho php ng t khi thanh ghi OCR = TCNT Bit TOIE0 : Cho php ng t trn Timer/Counter0.
B Timer/Counter
S d ng T/C nh 1 b Timer:
y M t ho t
ng :
( Normal Mode )
Trong ch Normal Mode thanh ghi TCNT t ng gi tr c a n ln 1 n v sau m i 1 kho ng th i gian c nh tr c trong qu trnh 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 ny bi n T/C thnh 1 b Timer.
y V d : Th
c hi n .V i VDK ho t ng
B Timer/Counter
#include <avr/io.h> #include <avr/interrupt.h> SIGNAL(SIG_OVERFLOW0) { PORTB ^= 1; // dao bit 1 cua PPORTB // 0000 0001 TCNT0 =155; } void main() { DDRB = 0xFF; PORTB = 0x00;
B Timer/Counter
// Mac dinh o Normal mode TCCR0|=(1<<CS01); TCNT0 = 155; TIMSK |= (1<<TOIE0); sei(); while(1) { // vong lap vo tan } } // chia tan 8: 8Mhz/8 = 1Mhz // khoi tao gia tri TCNT // cho phep ngat Overflow // cho phep ngat toan cuc
B Timer/Counter
1us 155 1us 156 157 (255-155) x 1us = 0.1ms 158 159 255
B Timer/Counter
S d ng T/C nh 1 b Counter:
y M t ho t y V d : Th
ng : ( Normal Mode )
B Timer/Counter
#include <avr/io.h> #include <util/delay.h> void main() { DDRD = 0xFF; // PORTD ra PORTD = 0x00; // muc thap , cho giong voi thanh ghi TCNT0 DDRB = 0x00; // PORTB dau vao cho chn T0 PORTB = 0xFF; // Muc cao TCCR0 |= (1<<CS01)|(1<<CS02); // su dung suon xuong de bat su kien TCNT0 =0;
B Timer/Counter
while(1) { if (TCNT0 == 200) TCNT0 = 0; // cho phep dem den 200 PORTD = TCNT0; } }
B Timer/Counter
S d ng T/C lm b PWM:
y M t ho t
( ch fast PWM ) T chn OC0 c a V K s c xung ra v i r ng xung thay i c b ng cch thay i gi tr c a OCR0 ( 0 255 ). T n s c a chu i xung ny c tnh b ng cng th c: fPWM : T n s xung ra. fclk : T n s ho t ng c a V K. N : H s chia t n.
ng :
Trong :
y V d : Th
PWM , nh n xt
B Timer/Counter
fPWM = 8/(8 x 256) = 0,004 Mhz
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 }
Kh i USART
M t :
y Atmega16 c 1 b USART ( Universal Synchronous/ Asynchronous serial Receiver and Transmitter) . y
y y y y
y l kh i giao ti p n i ti p r t linh ho t :
y Ho t
ng c ch song cng ( truy n nh n c l p ) Truy n thng n i ti p ng b ( Synchronous )ho c khng ng b ( Asynchronous ). ng b giao ti p Master / Slave Gi i t c truy n a c p Cho php s d ng nhi u khung truy n : 5,6,7,8,9 Databits ; 1,2 Stopbit.
Kh i USART
M t :
y C kh n ng t o bit ki m tra ch n l v ki m tra bit ki m tra y y y y
ch n l . C kh n ng pht hi n l i trn C kh n ng pht hi n l i khung truy n C kh n ng x2 t c ch khng ng b C cc ng t pht hi n: k t thc qu trnh nh n , thanh ghi truy n tr ng , k t thc qu trnh truy n
Kh i USART
Cc chn c a kh i USART:
y Chn TXD ( PD1 ) :
Chn xu t tn hi u ra c a kh i USART. y Chn RXD ( PD0 ) : Chn nh n tn hi u vo c a kh i USART. =>> Mu n 2 kh i truy n thng ny giao ti p v i nhau th ph i k t n i TXD c a b ny v i RXD c a b kia. y Chn XCK ( PB0 ) : Chn k t ni xung Clock c a cc b USART . Chn ny ch s d ng trong ch ng b ( Synchronous )
Kh i USART
Khung truy n:
m c th p v ch c 1. Data bits : 5, 6, 7, 8 ho c 9 bits. Khng c Parity bit , Parity bit ch n , Parity bit l . Sp : Stop bit : 1 ho c 2 Stop bit : lun m c cao. IDLE : khng c giao ti p ( m c cao ).
Kh i USART
Gi i thch v khung truy n
y Start bit: y L bt u tin cg i i li u ang c g i t i.
thng bo v i bn nh n l c d
y Stop bit:
y N u
y Parity bit:
c s d ng th bt ny n m gi a data bit cu i cng v Stop bit u tin. y Bit ny c tnh nh sau : y Parity ch n : l k t qu c a php XOR cc databit v bit 0. y Parity l : l k t qu c a php XOR cc databit v bit 1.
Kh i USART
Gi i thch v khung truy n
y Cc data bit:
y Cc data bit s
c ki m tra b ng t c
truy n Baudrate.
y K t lu n : 2 kh i giao ti p c v i nhau th: y C cng 1 khung truy n ( frame format ). y Ph i c cng t c truy n ( baud rate ). Cc v n trn c thi t l p t i cc thanh ghi i u khi n kh i USART
Kh i USART
Cc thanh ghi :
y UDR ( USART Data buffer Register )
Thanh ghi d li u c a kh i USART. Khi truy n thi y l thanh ghi ghi d li u c n truy n. Khi nh n thanh ghi ny ghi d li u nh n. Phn bi t ? Thanh ghi ny ban u m c nh l nh n Mu n ghi d li u g i i th tr c c n UCSRA |= ( 1<< UDRE ). Sau khi ghi d li u xong , b Transmitter c kh i ng th d li u ny s c chuy n vo thanh ghi d ch khi thanh ghi tr ng, r i d li u c truy n i.
Kh i USART
Cc thanh ghi :
y UCSRA ( USART Control and Status Register A)
RXC : Receive complete : Set ln 1 khi trong UDR c d li u ch a c c. Xa v 0 khi b m tr ng. TXC : Transmit complete : Set ln 1 khi ton b d li u trong thanh ghi d ch c y ra ngoi v khng c d li u m i xu t hi n trong UDR. T v 0 khi ch ng trnh con ph c v ng t c g i, ho c ng dng c th xa b ng cch ghi 0 vo.
Kh i USART
Cc thanh ghi :
y UCSRA ( USART Control and Status Register A)
UDRE: UDR is Empty: Set ln 1 khi UDR tr ng v s n sng nh n d li u m i. Xa v 0 khi b m tr ng. FE : Frame Error : Set ln 1 khi x y ra l i khung truy n. 0 khi khng c l i khung truy n Lun t bit ny l 0 khi tc ng vo UCSRA
Kh i USART
Cc thanh ghi :
y UCSRA ( USART Control and Status Register A)
DOR : Data Over Run : Set ln 1 khi x y ra s c trn d li u: ang c d li u trong b m , c d li u trong thanh ghi d ch v ng th i pht hi n 1 start bit m i. Xa v 0 khi c thao tc c d li u t UCR Khi s d ng thanh ghi UCSRA th ph i bit ny l 0 PE : Parity Error : Set ln 1 khi x y ra l i bit ki m tra ch n l . Xa v 0 khi c thao tc c d li u t UCR
Kh i USART
Cc thanh ghi :
y UCSRA ( USART Control and Status Register A)
U2X : Double the USART Transmittion speed : Ch c tc d ng v i ch Asynchronous. MPCM : Multi processor Communication Mode : Khi set ln 1 , t t c cc khung truy n khng c b .
a ch s b lo i
Kh i USART
Cc thanh ghi :
y UCSRB ( USART Control and Status Register B)
RXCIE : RX Complete Interrupt Enable : Cho php ng t khi nh n xong. TXCIE : TX Complete Interrupt Enable : Cho php ng t khi truy n xong. UDRIE : UDR Empty Interrupt Enable: Cho php ng t khi UDR tr ng.
Kh i USART
Cc thanh ghi :
y UCSRB ( USART Control and Status Register B)
RXEN : RX Enable : Cho php nh n. TXEN : TX Enable : Cho php truy n. UCSZ2 : Character size: s l ng databit k t h p cng UCSZ1, UCSZ0 thanh ghi UCSRC s databit.
xc
nh
Kh i USART
Ch s data bit:
Kh i USART
Cc thanh ghi :
y UCSRB ( USART Control and Status Register C)
URSEL: Bit ny l 1 th thanh ghi ny l UCRSC ( chnh n :D ) Bit ny l 0 th thanh ghi ny tr thnh UBRRH s d ng Baudrate. UMSEL : Mode Select : Ch n ch : Set ln 1: ch ng b Synchronous. Set v 0 : ch khng ng b Asynchronous.
set
Kh i USART
Cc thanh ghi :
y UCSRB ( USART Control and Status Register C)
Kh i USART
Cc thanh ghi :
y UCSRB ( USART Control and Status Register C)
USBS: Stop Bit Select : 0 : 1 Stop bit. 1 : 2 Stop bits. UCPOL : Clock Polarity : Ch s d ng trong ch Synchronous. Trong ch Asynchronous bit ny l 0. Ch n s n l y m u tn hi u .
Kh i USART
Cc thanh ghi :
y UBRRL v UBRRH ( Baudrate Register )
URSEL : bit ch n = 0 th l UBRRH Khi set baudrate ta tra b ng v gn gi tr cho UBRRH v UBRRL
Kh i USART
M ph ng :
y Th c hi n giao ti p truy n thng n i ti p gi a 2 V K. y Yu c u khung truy n : 8 data bits , 1 stop bit , no parity , Baudrate 9600 bps. y Gi s 2 V K Atmega16 s d ng th ch anh 8Mhz.