Dòng vi điều khiển AVR là dòng xử lý 8 bit với cấu trúc havard, tập lệnh RISC với 118 lệnh, phần lớn là lệnh thực hiện trong một chu kỳ. Nhằm tìm hiểu những tính năng mạnh của dòng vi điều khiển này, trong đồ án này đã sử dụng loại vi điều khiển ATmega32. Đây là sản phẩm của hãng Atmel và nó có những đặc tính như sau:
Bao gồm:
32 thanh ghi đa chức năng 8 bít.
Có thể đạt tới tốc độ 16 triệu lệnh/ giây với tần số đạt vào là 16 MHz.
32k bộ nhớ chưng trình flash có giao tiếp SPI ghi xoá được 10000 lần.
1024 byte EEPROM ghi xoá 100,000 lần.
2k byte SRAM trong.
Chức năng ngoại vi gồm có :
1 ADC 10 bit 8 kênh.
2 Timer 8 bit các tần số định trước, và chế độ so sánh.
1 Timer 16 bit với tần số định trước có chế độ compare và capture.
Lập trình cho watchdog timer với tần số trên chíp
Có bộ so sánh tưng tự trên chíp.
Và có một số chức năng đặc biệt khác như :
Khởi động bằng mạch khởi động.
Có mạch Realtime clock với mạch dao động riêng và chế độ đếm.
Các nguồn ngắt trong và ngắt ngoài.
S¸u chế độ ngủ: Idle, ADC noise reduction, power save, power down, standby and extended standby
24 trang |
Chia sẻ: oanh_nt | Lượt xem: 916 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Đồ án Thiết kế và chế tạo card thu thập số liệu đa kênh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
4. Khối xử lý và điều khiển:
Dòng vi điều khiển AVR là dòng xử lý 8 bit với cấu trúc havard, tập lệnh RISC với 118 lệnh, phần lớn là lệnh thực hiện trong một chu kỳ. Nhằm tìm hiểu những tính năng mạnh của dòng vi điều khiển này, trong đồ án này đã sử dụng loại vi điều khiển ATmega32. Đây là sản phẩm của hãng Atmel và nó có những đặc tính như sau:
Bao gồm:
32 thanh ghi đa chức năng 8 bít.
Có thể đạt tới tốc độ 16 triệu lệnh/ giây với tần số đạt vào là 16 MHz.
32k bộ nhớ chưng trình flash có giao tiếp SPI ghi xoá được 10000 lần.
1024 byte EEPROM ghi xoá 100,000 lần.
2k byte SRAM trong.
Chức năng ngoại vi gồm có :
1 ADC 10 bit 8 kênh.
2 Timer 8 bit các tần số định trước, và chế độ so sánh.
1 Timer 16 bit với tần số định trước có chế độ compare và capture.
Lập trình cho watchdog timer với tần số trên chíp
Có bộ so sánh tưng tự trên chíp.
Và có một số chức năng đặc biệt khác như :
Khởi động bằng mạch khởi động.
Có mạch Realtime clock với mạch dao động riêng và chế độ đếm.
Các nguồn ngắt trong và ngắt ngoài.
S¸u chế độ ngủ: Idle, ADC noise reduction, power save, power down, standby and extended standby.
4.1. Cổng vào ra song song:
Vi điều khiển ATmega32 có 4 cổng vào ra song song đó là PortA, PortB, PortC, PortD. Mỗi cổng của AVR có 3 thanh ghi đó là thanh ghi điều khiển hướng vào ra của dữ liệu (Data Direction Register), thanh ghi dữ liệu (Data Register), và thanh ghi PIN (Port Input Adress) khi đọc dữ liệu vào từ port thì ta chỉ việc đọc giá trị từ PIN.
Port A: Là cổng 8 bit 2 chiều. Các chân của cổng có sẵn điện trở treo cao bên trong. Đệm đầu ra cổng A có dòng sink 20mA và có thể điều khiển LED trực tiếp.Port A cũng có thể được dùng như các đầu vào của ADC. Các chân cổng A là 3 trạng thái khi Reset, và khi không có clock.
Port B Là cổng 8 bit 2 chiều. Các chân của cổng có sẵn điện trở treo cao bên trong. Đệm đầu ra cổng B có dòng sink 20mA và có thể điều khiển LED trực tiếp. Các chân cổng B còn có các chức năng khác như :
Các chân
Chức năng
PB0
T0 (đầu vào ngoài của T/C 0)
PB1
T1 (đầu vào ngoài của T/C 1)
PB2
AIN0(đầu vào dương của bộ so sánh tương tự)
PB3
AIN1(đầu vào âm của bộ so sánh tương tự)
PB4
(SPI slave select input)
PB5
MOSI (SPI Bus Master Output/Slave Input)
PB6
MISO (SPI Bus Master Input/Slave Output)
PB7
SCK (SPI Bus Serial Clock)
Port C: Là cổng 8 bit 2 chiều vào ra, các thanh ghi điều khiển là DDRC, PORTC, PINC. Cũng như các cổng khác bộ đệm vào của port C có khả năng hút dòng tới 20mA nên có thể điều khiển trực tiếp LED. Còn hai chân PC6 và PC7 được nối với một bộ tạo dao động thạch anh 32.768 kHz để làm tần số hoạt động cho timer2 hoạt động như một bộ RTC. Khi đó hai chân này không còn chức năng là chân vào ra của cổng này nữa.
Port D Là cổng 8 bit 2 chiều vào ra, các thanh ghi điều khiển là DDRD, PORTD, PIND. Cũng như các cổng khác bộ đệm vào của port D có khả năng hút dòng tới 20mA nên có thể điều khiển trực tiếp LED. Ngoài ra các chân của Port D còn có các chức năng khác như sau:
Các chân
Chức năng
PD0
RxD (UART Input Line)
PD1
TxD (UART Output Line)
PD2
INT0 (đầu vào ngắt ngoài 0)
PD3
INT1 (đầu vào ngắt ngoài 1)
PD4
OC1B (Timer/Counter1 output compare B match output)
PD5
OC1A (Timer/Counter1 output compare A match output)
PD6
ICP (Timer/Counter1 input capture pin)
PD7
OC2 (Timer/Counter2 output compare match output)
4.2 Cấu trúc bộ nhớ:
Bộ nhớ chương trình là bộ nhớ Flash, dung lượng là 32k, được tổ chức 32kx8 bit. Bộ nhớ chương trình được truy nhập theo từng chu kỳ đồng hồ, và một lệnh được nạp vào thanh ghi lệnh. Thanh ghi lệnh nối với tệp 32 thanh ghi bằng cách lựa chọn xem thanh ghi nào sẽ được ALU sử dụng để thực thi lệnh. Lối ra của thanh ghi lệnh được giải mã bằng bộ giải mã lệnh để quyết định chọn tín hiệu nào sẽ được kích hoạt để hoàn thành lệnh hiện tại.
Bộ nhớ chương trình bên cạnh các lệnh lưu trữ, cũng chứa các vector ngắt bắt đầu từ địa chỉ $0000h. Chưong trình hiện tại sẽ bắt đầu ở vị trí phía bên kia vùng dùng cho các vetor ngắt. AVR có 13 vector ngắt như sau:
Địa chỉ
Vector
Giải thích
$0000
Reset
;Reset handler
$0001
EXT_INT0
;IRQ0 handler
$0002
XT_INT1
;IRQ1 handler
$0003
ETIM_CAPT
;Timer1 capture handler
$0004
TIM1_COMA
;Timer1 compareA handler
$0005
TIM1_COMB
;Timer1 compareB handler
$0006
TIM1_OVF
;Timer1 over flow handler
$0007
TIM0_OVF
;Timer0 oveflow handler
$0008
SPI_STC
;SPI transfer complate handler
$0009
UART_RxC
;UART Rx complate ;handler
$000A
UART_DRE
;UART UDR empty handler
$000B
UART_TxC
;UART Tx complate handler
$000C
ANA_COMP
;Analog compare handler
Bộ nhớ dữ liệu có tất cả 5 phần khác nhau:
Một tệp thanh ghi (register file) với 32 thanh ghi 8 bit từ R0¸R31.
64 thanh ghi vào ra (I/O), mỗi thanh 8 bit.
Bộ nhớ SRAM bên trong, có dung lượng 2k byte. Bộ nhớ SRAM được sử dụng cho ngăn xếp cũng như để lưu trữ các biến. Trong thời gian ngắt và đoạn gọi chưng trình con, giá trị hiện tại của con trỏ chưng trình được lưu trữ trong ngăn xếp. Kích thước của ngăn xếp phụ thuộc vào SRAM trên chip. Vị trí của ngăn xếp được chỉ bởi con trỏ ngăn xếp. Con trỏ ngăn xếp là thanh ghi có độ dài 2 byte. Con trỏ ngăn xếp cần được khởi tạo sau khi reset, và trước khi ngăn xếp được sử dụng.
Bộ nhớ SRAM bên ngoài, sử dụng các cổng để truy nhập bộ nhớ và dữ liệu bên ngoài.
EEPROM được truy nhập theo bn đồ bộ nhớ riêng. AVR ATmega32 có 1024 byte EEPROM, địa chỉ bắt đầu từ $000. Việc đọc EEPROM diễn ra nhanh hơn việc ghi vào. có thể ghi được 100,000 lần.
4.3. Một số thanh ghi của AVR ATmega32:
Thanh ghi trạng thái SREG:
Thanh ghi trạng thái có 8 bit cờ đóng vai trò báo hiệu trạng thái hiện tại của bộ xử lý. Tất cả các bit đó được xoá khi reset và có thể được đọc và ghi bởi chương trình.
7
6
5
4
3
2
1
0
I
T
H
S
V
N
Z
C
I : cho phép ngắt toàn cục. Việc thiết lập bit này cho phép tất cả ngắt. Xoá bit này cấm hết tất cả ngắt
T : bit copy storage. được sử dụng với lệnh nạp và lưu trữ bit để nạp hay lưu trữ các bit từ một thanh ghi vào thanh ghi khác.
H : half carry flag. Chỉ cho thấy sự nhớ một nửa trong một số lệnh số học.
S : sign flag. Bit này là kết quả của EXOR giữa cờ phủ định N và cờ tràn Overflow
V : cờ tràn lấy bù nhị phân
N : cờ phủ định (Nagative Flag)
Z : zero flag báo một kết quả bằng 0 sau khi thực hiện một phép tính số học hay logic.
C : cờ nhớ carry.
Thanh ghi con trỏ ngăn xếp
Thanh ghi này có độ rộng 2 byte được gọi là SPH và SPL. Bởi vì SP được khởi tạo bằng $0000 khi reset nên chương trình người dùng cần khởi tạo SP cho thích hợp vì địa chỉ bắt đầu của Interal SRAM dùng làm ngăn xếp bắt đầu từ $60.
Thanh ghi che ngắt chung GIMSK
GISMK general Interupt Mask Register được sử dụng để cho phép hoặc cấm các ngắt ngoài riêng biệt bằng cách đặt lại các bit có liên quan. Đồng thời khi đó bit I trong thanh ghi SREG được set bằng 1 thì ngắt mới được xảy ra.
7
6
5
4
3
2
1
0
INT0
INT1
Thanh ghi cờ ngắt chung GIFR
General Interupt Flag Register chỉ báo cho thấy nếu một ngắt đã xuất hiện. Nếu một ngắt ngoài xuất hiện thì cờ INT tương ứng trong GIFR được đặt thành 1.Thanh ghi này điều khiển cho phép hay cấm ngắt ngoài INT0 hay INT1 thông qua hai bit 7,6 của thanh ghi này
7
6
5
4
3
2
1
0
INTF1
INTF0
-
-
-
-
-
-
Thanh ghi điều khiển toàn cục MCUCR
Các bit trong thanh ghi điều khiển toàn bộ vi điều khiển (MCU Control Register). Điều khiển các chế độ cho phép hay cấm truy nhập bộ nhớ ngoài, chế độ ngủ, và điều khiển sự phát hiện ngắt ngoài.
7
6
5
4
3
2
1
0
-
SE
SM1
SM0
ISC11
ISC10
ISI01
ISC00
Bit 7: SRE cho phép SRAM ngoài.
Bit 6: SRW bit trạng thái chờ truy nhập SRAM ngoài
Bit 5: SE cho phép ngủ
Bit 4: SM chế độ ngủ SM=1 là chế độ ngủ, SM=0 chế độ gim dòng tiêu thụ
Bit 3,2: ISC11, ISC10. bit điều khiển nhạy cm ngắt (ngắt theo sườn hay mức
Bit 1,0: ISC01, ISC00 chọn ngắt ngoài theo sườn hay mức, tích cực thấp hay cao.
Thanh ghi trạng thái bộ xử lý MCUSR
Cung cấp thông tin về nguồn tín hiệu reset (reset ngoài hay reset do watchdog timer)
7
6
5
4
3
2
1
0
-
-
-
-
-
-
EXTRF
PORF
Thanh ghi TIMSK
Đây là thanh ghi điều khiển cho phép ngắt của Timer/Counter
7
6
5
4
3
2
1
0
OCIE2
TOEI2
TICIE1
OCIE1A
OCIE1B
TOIE1
-
TOIE0
OCIE2 : Timer/Counter2 output compare match interrupt enable.
TOEI2 : Cho phép ngắt tràn của Timer/Counter2
TICIE1: Cho phép ngắt Input Capture của Timer/counter1
OCIE1A: Cho phép ngắt Output compareA của Timer/counter
OCIE1B: Cho phép ngắt Output compareB của Timer/counter
TOIE1: Cho phép ngắt tràn của Timer/counter1.
TOIE0: Cho phép ngắt tràn của Timer/counter0.
Thanh ghi cờ ngắt timer TIMSK (Timer/counter Interrupt Flag)
7
6
5
4
3
2
1
0
OCF2
TOV2
ICF1
OCF1A
OCF1B
TOV1
-
TOV0
OCF2: Cờ ngắt output compare của Timer/counter2
TOV2: Cờ ngắt tràn của Timer/counter 2
ICF1 : Cờ ngắt Input capture của Timer/counter1
OCF1A: Cờ ngắt Output compareA của Timer/counter1
OCF1B: Cờ ngắt Output compareB của Timer/counter1
TOV1 : Cờ ngắt tràn của Timer/counter1
TOV0 : Cờ ngắt tràn của Timer/counter0
4.4. Timer/Counter của AVR ATmega32:
AVR ATmega32 cung cấp 3 Timer trong đó có 2 timer/counter 8 bit và T1 và 1 Timer 16 bit. Timer/Counter2 có thể lựa chọn tín hiệu đồng hồ từ nguồn dao động ngoài. Nguồn dao động ngoài tối ưu cho T2 là có tần số 32.768 MHz, nó có thể cho phép T2 hoạt động như mạch đồng hồ thời gian thực (RTC). T0,T1 lựa chọn tần số chia trước từ cùng một bộ chia tần 10 bit. T2 sử dụng bộ chia tần riêng. Những Timer/Counter này có thể hoạt động như Timer với tín hiệu đồng hồ bên trong hoặc như những Counter với đầu vào tín hiệu bên ngoài.
Từ sơ đồ của mạch chia tần dùng cho T2 ta thấy nguồn tín hiệu cho bộ chia tần này là PKC2 mặc định nối với đồng hồ của hệ thống(CK). Để T2 hoạt động như mạch RTC thì ta set bit AS2 trong thanh ghi ASSR, khi đó bộ chia tần của T2 lấy xung clock để hoạt động từ chân PC6(TOSC1). Khi AS2=1 thì chân PC6 và PC7 được ngắt ra khỏi cổng C và được sử dụng để nối bộ dao động riêng cho T2. Bộ dao động này thường có tần số 32.768MHz.
8 bit-Timer/Counter 0:
Timer/Counter 0 8 bit có thể chọn tín hiệu clock từ đồng hồ hệ thống (CK), hay từ chân ngoài. Thanh ghi dùng để điều khiển T0 8 bit là TCCR0. Cờ báo tràn nằm trong thanh ghi cờ tràn TIFR. Việc cho phép và cấm ngắt đối với T0 được tìm thấy trong thanh ghi TIMSK. Khi T0 được giữ nhịp từ bên ngoài, thời gian cực tiểu giữa hai lần xảy ra sự chuyển mức tín hiệu đồng hồ ít nhất cũng phi bằng 1 chu kỳ xung đồng hồ bên trong CPU. Tín hiệu giữ nhịp bên ngoài được lấy mẫu theo sườn dương bằng xung đồng hồ bên trong CPU. Bộ Timer/Counter0 8 bit thể hiện cả độ phân giải cao lẫn độ chính xác cao và luôn ưu tiên số chia tần số thấp hơn.
16 bit-Timer/Counter 0:
Timer/Counter 16 bit có thể lựa chọn xung clock nguồn từ Ck hoặc từ chân bên ngoài. Các tín hiệu điều khiển T1 nằm trong thanh ghi TCCR1A và TCCR1B, các trạng thái khác cũng tìm thấy trong hai thanh ghi này như: cờ tràn, compare match và capture event. Việc cho phép và cấm ngắt nằm trong thanh ghi interupt Mask register TIMSK. Khi T1 được giữ nhịp từ bên ngoài, tín hiệu bên ngoài được đồng bộ với tần số dao động của CPU, thời gian cực tiểu giữa hai lần xuy ra sự chuyển mức tín hiệu đồng hồ ít nhất cũng phi bằng 1 chu kỳ xung đồng hồ bên trong CPU. Tín hiệu giữ nhịp bên ngoài được lấy mẫu theo sườn dưng bằng xung đồng hồ bên trong CPU. Bộ Timer/Counter1 16 bit thể hiện cả độ phân giải cao lẫn độ chính xác cao và luôn ưu tiên số chia tần số thấp hơn.
Timer/Counter1 16 bit còn có chức năng output compare sử dụng thanh ghi output compare register 1A và B (OCR1A ,OCR1B). dữ liệu nguồn nằm trong thanh ghi này được so sánh với nội dung của T1. T1 cũng có thể sử dụng các chế độ điều chế độ rộng xung 8,9,10 bit. Chức năng Input capture cho phép lấy nội dung của T1 vào thanh ghi ICR1. Thanh ghi điều khiển timer/counter 1 (TCCR1B) sẽ quy định các sự kiện capture
8 bit-Timer/Counter 2:
Nguồn xung clock của T2 là PCK2 hay bộ chia tần riêng của T2. Việc điều khiển hoạt động của T2 thông qua thanh ghi TCCR2. Cờ tràn và cờ compare match nằm trong thanh ghi trạng thái ngắt TIFR. Việc cho phép hay cấm ngắt thông qua thanh ghi TIMSK. Trong chế độ so sánh T2 dùng thanh ghi OCR2 làm nguồn dữ liệu để so sánh với nội dung của timer/counter. Timer/Counter 2 cũng có thể dùng ở chế độ điều chế độ rộng xung 8 bit.
4.5. Watchdog Timer của AVR ATmega32:
Watchdog Timer sử dụng bộ dao động riêng trên chip. Bằng việc điều khiển bộ chia tần mà thời gian Reset được thay đổi theo bảng sau:
Thanh ghi điều khiển của Watchdog Timer WDTCR
WDTOE
WDE
WDP2
WDP1
WDP0
WDTOE: watchdog timer turn off Enable. Bit này phi được set 1 khi bit WDE bị xóa, nếu không thì Watchdog timer không được phép sử sụng. Khi được set lên thì sau 4 chu kỳ máy bít này bị xóa bởi phần cứng.
WDE: Bit này bằng 1 thì cho phép watchdog timer, nếu bit này bij xóa thì cấm WDT. Bit này chỉ có thể bị khóa nếu WDTOE =1. Để cấm hoạt động của WDT ta làm như sau: Trong cùng 1 toán hạng viết 1 vào WDTOE và WDE sau đó trong 4 chu kỳ đồng hồ tiếp theo viết 0 vào WDE.
WDP0.. WDP2 : lựa chọn tần số chia của WDT khi WDT được cho phép.
4.6. Truy cập dữ liệu với EEPROM:
Thời gian truy nhập dữ liệu vào EEPROM từ 2.5-4 ms, tùy thuộc vào điện áp Vcc cung cấp. Chức năng self-timming cho phép chương trình phần mềm tự động biết khi nào byte tiếp theo được phép ghi vào. Một ngắt đặc biệt được dựng lên để báo EEPROM sẵn sàng để nhận dữ liệu mới. Các thanh ghi địa chỉ EEARH và EEARL, thanh ghi điều khiển EECR, thanh ghi dữ liệu EEDR (đã trình bày ở phần trên), được sử dụng để thao tác với EEPROM.
Các giải pháp để tránh sai lạc dữ liệu đối với EEPROM có thể xảy ra:
a - sử dụng mạch phát hiện brown out (BOD) để phát hiện các chu kỳ thời gian khi điện áp nguồn nuôi thấp và yêu cầu reset trong những khong thời gian như Vậy. Tiến hành Reset hệ thống là cách tốt hn việc tiếp tục tiến hành mà vẫn có thể có kh năng xy ra sai lạc dữ liệu trong EEPROM.
b – tránh ghi vào EEPROM trong thời gian điện áp nguồn nuôi bị gim thấp.Gii pháp này nói thì dễ nhưng thực hiện rất khó vì không biết khi nào thì điện áp gim.
c - Không nên sử dụng bộ nhớ EEPROM một cách lạm dụng
4.7. Giao diện ngoại vi nối tiếp SPI:
SPI cho phép truyền thông nối tiếp tốc độ cao và có đặc điểm sau:
Truyền Full-duplex, sử dụng 3 dây để đồng bộ dữ liệu truyền.
Hoạt động như Master hoặc Slave.
Truyền MSB trước hay LSB.
Có thể thay đổi 4 tốc độ truyền.
Có cờ báo ngắt truyền thông.
Cờ báo bo vệ xung đột thông tin.
Đánh thức hệ thống từ chế độ ngủ.
Thanh ghi trạng thái SPI – SPSR
SPIF
WCOL
-
-
-
-
-
-
Bit 7 :SPIF - cờ ngắt SPI. Khi một cuộc truyền nối tiếp SPI được hoàn thành và bit SPIE trên thanh ghi SPCR được đặt thành 1, còn các cờ ngắt toàn cục được cho phép, thì cờ SPIF được đặt thành 1. cờ SPIF bị bộ xử lý xoá thành 0 khi ngắt được thực thi. Bit SPIF cũng có thể bị xoá bằng cách đọc thanh ghi trạng thái SPI khi cờ bằng 1 và sau đó truy nhập thanh ghi dữ liệu SPI.
Bit 6 :WCOL – write collision flag (cờ xung đột ghi). Bit này được đặt nếu thanh ghi dữ liệu SPI (SPDR) được gh trong khoảng thời gian diễn ra một cuộc truyền dữ liệu. Bit này bị xoá cùng với cờ SPIF, bởi trước tiên là việc đọc thanh ghi trạnh thái SPI khi WCOL được đặt thành 1 và sau đó truy nhập thanh ghi dữ liệu SPI
Thanh ghi điều khiển SPI
7
6
5
4
3
2
1
0
SPIE
SPE
DORD
MSTR
CPOL
CPHA
SPR1
SPR0
Bit 7: SPIE cho phép ngắt SPI bit này làm cho một ngắt SPI phi được tạo ra nếu SPIF=1 và các ngắt toàn cục được cho phép.
Bit 6: SPE bit này bằng 1 thì cho phép SPI
Bit 5: DORD đặt thứ tự dữ liệu. Khi đặt thành 1 LSB của dữ liệu được truyền trước. Khi xoá thì MSB của dữ liệu được truyền trước.
Bit 4 : MSTR master/slave select.Khi đặt thành 1 cổng SPI trong chế độ chủ và khi xoá nó thành cổng Slave. Nếu như SS được cấu hình để là lối vào và được đặt thành mức thấp thì bit MSTR sẽ bị xoá thành 0 và SPIF được set=1. Người dùng sẽ phải đặt MSTR thành 1một lần nữa để khởi động thành Master
Bit 3: CPOL Clock Polarity. Khi đặt thành 1 thì SCK là cao(High) khi nghỉ (Idle: không có công việc xử lý) còn khi bị xoá thành 0 thì SCK trở thành mức thấp khi không có công việc cần xử lý.
Bit 2:CPHA Clock phase. Quy định pha kích hoạt của xung nhịp.
Bit 1-0 SPR1, SPR0 clock rate select. Các bit này quy định tốc độ đồng hồ SCK khi được đặt cấu hình như Master. Nếu như vi mạch như là 1 slave thì các bit này không ảnh hưởng lên tần số SCK.
4.8. Bộ thu phát nối tiếp dị bộ vạn năng USART:
Bộ thu phát của ATATmega32 hoạt động ở chế độ Full_duplex. Có bộ đệm truyền nhận riêng biệt. Có ba ngắt dành cho USART là TX_complate (ngắt này xảy ra khi truyền xong dữ liệu), ngắt RX_complate (xảy ra khi nhận xong 1 byte dữ liệu), ngắt TX_data register empty ( thanh ghi truyền rỗng).
Hoạt động của bộ nhận:
Bộ nhận lấy mẫu tín hiệu trên chân RxD ở tần số gấp 16 lần tốc độ(baud). Bit start được phát hiện khi có sườn xuống trên đường truyền để chuyển trạng thái 1 sang 0. và sau đó các bit tiếp theo tuần tự được phát hiện. Sau khi phát hiện bit start bộ nhận tiếp tục lấy mẫu trên đường truyền ở những lần 8, 9, 10. Nếu lớn hơn hai lần mà vẫn nhận được giá trị 1 thì bộ nhận coi nó như là nhiễu, và tiếp tục quan sát đường truyền. Tuy nhiên nếu bit start là hợp lệ thì dữ liệu được nhận vào và cũng được lấy mẫu ở những chu kỳ thứ 8,9,10. Giá trị logic phải phát hiện được ít nhất 2 hay 3 lần thì mới coi là bit hợp lệ. Khi nhận xong bit Stop bộ nhận sẽ kiểm tra mức logic nếu 2 hay hơn nữa số lần lấy mẫu là 0 thì báo lỗi Frame.
Hoạt động của bộ truyền:
Việc truyền dữ liệu được khởi tạo bằng việc viết dữ liệu cần truyền vào thanh ghi dữ liệu USART – UDR. Dữ liệu được truyền từ UDR tới thanh ghi dịch truyền khi một ký tự được viết vào UDR khi bit Stop của ký tự trước đó được dịch ra. Thanh ghi dịch sẽ tải vào ngay lập tức. Nếu thanh ghi dịch 10(11)bit rỗng dữ liệu được truyển từ UDR tới thanh ghi dịch. Khi bit UDRE trong UART Status Register bằng 1, UART sẵn sàng nhận ký tự tiếp theo, cùng lúc đó dữ liệu được truyền từ UDR vào thanh ghi dịch. Bit 0 của thanh ghi dịch bị xóa để làm bit Start và bit 9,10 làm bit Stop. Trong khi truyền bit UDRE=1, khi không còn dữ liệu mới được ghi vào thì cờ Tx complate trong USR được set.
4.9. Bộ so sánh tưng tự:
Bộ so sánh tương tự sẽ so sánh giá trị của đầu vào dương PB2(AIN0) và đầu vào âm PB3(AIN1). Khi điện áp đầu dương lớn hơn điện áp đầu âm thì đầu ra của bộ so sánh ACO được set bằng 1. Đầu ra của bộ so sánh tương tự có thể dùng để kích hoạt chức năng input capture của Timer/Counter 1. Hay nó còn dùng làm ngắt riêng của bộ so sánh này. Ta có thể chọn các chế độ ngắt khác nhau như ngắt theo sườn lên hay sườn xuống, đo giá trị. Thanh ghi trạng thái và điều khiển của bộ so sánh tương tự là ACSR. Thanh ghi ACSR được sử dụng để điều khiển hoạt động của bộ so sánh cũng như để giám sát lối ra của bộ so sánh.
ACD
-
ACO
ACI
ACIE
ACIC
ACIS1
ACIS0
Bit 7 :ACD Analog comparator disable( cấm bộ so sánh analog). Khi đặt thành 1 thì nguồn nuôi cho bộ so sánh bị ngắt.
Bit 5: ACO Analog comparator output. Đây là lối ra của bộ so sánh analog.
Bit 4: ACI Analog comparator Interupt Flag. Cờ ngắt bộ so sánh analog. Bit này được set bằng 1 khi 1 sự kiện so sánh trigger 1 trạng thái ngắt bộ so sánh được quy định bởi ACIS1 và ACIS0. Ngắt bộ so sánh được thực thi nếu bit ACIE được đặt thành 1 và các ngắt toàn cục được cho phép.
Bit 3: ACIE. Analog comparator Interupt Enable(cho phép ngắt bọ so sánh analog) Khi đặt thành 1 thì ngắt bộ so sánh analog được cho phép. Khi đặt thành 0 thì ngắt bộ so sánh bị cấm.
Bit 2: ACIC. Analog comparator input capture Enable. Khi đặt thành 1, lối ra bộ so sánh được nối với mạch “input capture front end” của bộ định thời timer1.
Bit 1,0: ACIS1,ACIS0 : Analog comparator interupt Mode select. Việc kết hợp của các bit này lựa chon các chế độ ngắt.
4.10. Bộ biến đổi ADC của AVR ATmega32:
Các đặc trưng của ADC này là:
- Độ phân giải 10 bit.
- Độ phi tuyến 0.5 LSB
- Sai số tuyệt đối là xấp xỉ 2 LSB.
- Thời gian biến đổi là 65 – 260 mS.
- 8 kênh vào.
- Chế độ chạy tự do hoặc biến đổi đơn.
- Khi biến đổi xong sẽ gây ra ngắt.
- Chống nhiễu và không gây ra nhiễu.
ATmega32 gồm ADC 10 sử dụng phương pháp biến đổi xấp xỉ liên tiếp. 8 kênh vào của ADC được nối qua cổng A tới một bộ dồn kênh. Phải đảm bảo rằng mức điện áp trên kênh không thay đổi trong quá trình biến đổi. ADC có hai nguồn điện áp tương tự riêng đó là AVCC và AGND. AGND phi được nối với GND và AVCC= Vcc±0.3V. Điện áp chuẩn bên ngoài nối qua chân AREF. Điện áp này phải nằm trong dải 2V tới AVCC.
ADC biến đổi điện áp tương tự vào thành giá trị số 10 bit qua phương pháp xấp xỉ liên tiếp. Giá trị nhỏ nhất là AGND và giá trị lớn nhất là điện áp trên AREF – 1LSB. Các kênh được lựa chọn nhờ MUX bit trong thanh ghi ADMUX. ADC có hai chế độ hoạt độnglà Free running và Single conversion. ở chế độ Single conversion mỗi lần biến đổi phải được khởi tạo bởi người dùng. Còn ở chế độ Free running ADC lấy mẫu liên tục và ghi vào thanh ghi dữ liệu ADC. Bit ADFR trong thanh ghi ADCSR chọn chế độ hoạt động cho ADC. Việc set bit ADEN trong ADCSR cho phép ADC hoạt động. Kênh được chọn vào sẽ chưa được biến đổi ngay nếu chưa set bit này. ADC sẽ không tiêu thụ công suất nếu bit ADEN bị xóa do đó cần phải tắt ADC trước khi chuyển sang chế độ ngủ tiết kiệm công suất. Việc biến đổi bắt đầu bằng việc viết giá trị 1 vào bit khởi động ADC (ADSC). Bit này giữ giá trị cao trong suốt quá trình biến đổi và bị xóa bởi phần cứng khi quá trình biến đổi hoàn thành. Nếu có kênh dữ liệu khác được lựa chọn trong khi đang thực hiện biến đổi thì ADC sẽ thực hiện nốt quá trình đang làm và sau đó mới thực hiện sự thay đổi. Vì dữ liệu ra của ADC là 10 bit nên phải sử dụng hai thanh ghi ADCH và ADCL để cất kết quả. Khi đọc dữ liệu ta đọc ADCL trước rồi mới tới ADCH. Khi ADCL được đọc thì sự truy nhập vào thanh ghi bị đóng lại, có nghĩa là nếu thanh ghi ADCL được đọc và quá trình biến đổi xong trước khi ADCH được đọc thì kết qu bị sai. Sau đó ADCH được đọc thì sự truy nhập các thanh ghi ADC lại được cho phép. ADC có nguồn ngắt riêng sinh ra khi quá trình biến đổi hoàn thành hay khi truy nhập dữ liệu bị cấm trong lúc đang đọc ADCH và ADCL ngắt sinh ra khi bị mất dữ liệu. Mạch xấp xỉ liên tiếp cần xung vào có tần số từ 50kHz tới 200kHz để đạt được độ phân giải lớn nhất. Nếu độ phân giải nhỏ hơn 10 bit thì cần xung với tần số cao hn 200 kHz để có tần số lấy mẫu lớn hơn. Các bit ADPS2..0 trong thanh ghi ADCSR dùng để tạo ra tần số phù hợp từ tần số của đồng hồ hệ thống đến trên 100kHz. Bộ chia tần của ADC bắt đầu đếm từ thời điểm ADC bật lên và bit ADEN trong ADCSR đặt bằng 1. Bộ chia tần chạy cho tới khi ADEN trở về thấp thì được Reset. Khi set bit ADSC trong ADCSR để bắt đầu quá trình biến đổi thì quá trình biến đổi được bắt đầu tại sườn lên của chu kỳ đồng hồ ADC. Bình thường quá trình biến đổi hết 13 chu kỳ đồng hồ. Quá trình trích và giữ mẫu hết 1.5 chu kỳ, và quá trình biến đổi hết 13.5 chu kỳ. Khi quá trình biến đổi hoàn thành dữ liệu được ghi vào thanh ghi dữ liệu ADC và cờ ADIF được set. Trong chế độ single thì bit ADSC bị xóa khi thực hiện xong quá trình biến đổi và các chương trình phần mềm có thể set lại ADSC để bắt đầu quá trình biến đổi khác. Còn ở chế độ Free running quá trình biến đổi mới được thực hiện ngay sau khi sự biến đổi trước kết thúc, trong khi đó ADSC vẫn ở mức cao. Trong chế độ Free running với tần số 200kHz thì thời gian biến đổi là ngắn nhất (65mS) và độ phân giải cao nhất. ADC có kh năng loại bớt nhiễu trong quá trình nghỉ của CPU. Để thực hiện chức năng này ta phải theo thủ tục sau:
ADC được cho phép và không biến đổi. Chế độ của ADC là Single và ngắt được cho phép. ADEN=1, ADSC=0, ADFR=0, ADIE=1.
Vào chế độ nghỉ. ADC bắt đầu biến đổi 1 lần khi CPU được dừng.
Nếu không có ngắt khác xảy ra trước khi quá trình biến đổi hoàn thành, ngắt ADC sẽ đánh thức MCU và thực hiện chương trình phục vụ ngắt.
Thanh ghi ADMUX cho phép lựa chọn kênh đầu vào.
-
-
-
-
-
MUX2
MUX1
MUX0
Thanh ghi trạng thái và điều khiển ADC - ADCSR
ADEN
ADSC
ADFR
ADIF
ADIE
ADPS2
ADPS1
ADPS0
Bit 7 – ADEN : ADC enable. Bit này set bằng 1 thì cho phép ADC. Xóa bit này là tắt ADC. Việc tắt ADC khi đang trong quá trình biến đổi sẽ kết thúc ngay quá trình biến đổi đó.
Bit 6 – ADSC : ADC start conversion. bit này bằng 1 bắt đầu quá trình biến đổi. Khi quá trình biến đổi hoàn thành bit này bị xóa bởi phần cứng, việc viết 0 vào bit này sẽ không có tác dụng.
Bit 5 – ADFR :ADC Free running select. Bit này bằng 1 ADC hoạt động ở chế độ free running . xóa bit này sẽ kết thúc chế độ này.
Bit 4 – ADIF : ADC interupt flag. Set 1 khi quá trình biến đổi kết thúc và dữ liệu được ghi vào thanh ghi dữ liệu. Bit này được set khi bit ADIE =1 và bit I trong SREG bằng 1. ADIF bị xóa bởi phần cứng khi thực hiện xong chưng trình phục vụ ngắt.
Bit 3 – ADIE : ADC interupt enable. Cùng với bít I trong SREG sẽ cho phép ngắt khi biến đổi xong.
Bit 2..0 – ADPS2..ADPS0:
Các file đính kèm theo tài liệu này:
- chuong 3-5.doc