Bộ phận này được sử dụng để khôi phục lại trạng thái hoạt động của hệ thống trong trường hợp xảy ra lỗi treo khi chạy phần mềm, nhưng cũng có thể được sử dụng cho các ứng dụng đáng quan
Trang 1LỜI CAM ĐOAN
Tôi xin cam đoan các số liệu và kết quả nêu trong Luận văn là trung thực và chưa từng được ai công bố trong bất kỳ một công trình nào khác Trừ các phần tham khảo đã được nêu rõ trong Luận văn
Tác giả
Tống Quang Dương
Trang 2LỜI CẢM ƠN
Tác giả xin chân thành cảm ơn TS.Nguyễn Đình Mãn, người đã hướng dẫn và giúp đỡ tận tình từ định hướng đề tài, tổ chức thực nghiệm đến quá trình viết và hoàn chỉnh Luận văn
Tác giả bày tỏ lòng biết ơn các thầy cô trong bộ môn Máy và Ma Sát học đã cùng sự giúp đỡ của các cán bộ phòng thí nghiệm FMS & CIM, xưởng Cơ khí bộ môn Công nghệ Chế tạo máy, Viện Cơ khí Xin cám ơn Ban lãnh đạo và Viện đào tạo Sau đại học, Viện Cơ khí của trường Đại học Bách Khoa Hà Nội đã tạo điều kiện thuận lợi để hoàn thành bản Luận văn này
Do năng lực bản thân còn nhiều hạn chế nên Luận văn không tránh khỏi sai sót, tác giả rất mong nhận được sự đóng góp ý kiến của các Thầy, Cô giáo, các nhà khoa học và các bạn đồng nghiệp
Tống Quang Dương
Trang 3
MỤC LỤC
LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
HỆ THỐNG DANH MỤC CÁC HÌNH VẼ 6
HỆ THỐNG DANH MỤC CÁC BẢNG BIỂU 7
PHẦN MỞ ĐẦU 8
1 Lý do chọn đề tài 8
2 Lịch sử nghiên cứu 8
3 Đối tượng nghiên cứu: 8
4 Tóm tắt những luận điểm cơ bản và đóng góp mới của tác giả 8
5 Phương pháp nghiên cứu 9
CHƯƠNG I 10
TỔNG QUAN VỀ VI ĐIỀU KHIỂN 10
1.1 Giới Thiệu Họ Vi Điều Khiển MCS – 51 10
1.2 Tổng quan về vi điều khiển AVR 13
1.2.1 Giới thiệu tổng quan họ vi điều khiển AVR 13
1.2.2 Kiến trúc AVR 14
1.2.3 Bộ nhớ EEPROM 31
1.2.4 Bộ nhớ SRAM 34
1.2.5 Bộ định thời 35
1.2.6 Bộ truyền nhận UART 38
1.2.7 Bộ biến đổi A/D bên trong 41
CHƯƠNG II 42
KHÁI QUÁT VỀ HỆ THỐNG SẢN XUẤT TỰ ĐỘNG 42
2.1 Những khái niệm cơ bản về hệ thống sản xuất tự động 42
Trang 42.1.1 Định nghĩa hệ thống sản xuất tự động 42
2.1.2 Cấu trúc của hệ thống sản xuất tự động 42
2.1.3 Quy trình thiết kế hệ thống sản xuất tự động 42
2.2 Các thành phần trong hệ thống sản xuất tự động 43
2.3 Hệ thống kiểm tra trong sản xuất 46
2.3.1 Chức năng hệ thống kiểm tra 46
2.3.2 Nguyên tắc kiểm tra thông số kỹ thuật của các phần tử và modul trong hệ thống gia công nối tiếp tuần hoàn 48
2.4 Hướng phát triển của hệ thống gia công nối tiếp tuần hoàn 52
2.4.1 Sử dụng máy với hệ thống điều khiển linh hoạt 52
2.4.2 Sản xuất hàng loạt theo dây chuyền 52
2.4.3 Sản xuất tự động hóa linh hoạt 53
2.4.4 Modul sản xuất linh hoạt 53
2.4.5 Hệ thống sản xuất linh hoạt toàn phần 54
2.4.6 Hệ thống sản xuất linh hoạt toàn phần bậc cao 54
2.4.7 Ứng dụng kỹ thuật CIM 54
2.4.8 Ứng dụng trí tuệ nhân tạo 54
CHƯƠNG III 55
THIẾT KẾ HỆ THỐNG GIA CÔNG TỰ ĐỘNG KIỂU NỐI TIẾP TUẦN HOÀN 55
3.1 Kết cấu bàn gia công 6 vị trí 55
1: Bàn cố định; 2: Bàn Quay; 3 Cơ cấu mantit nội tiếp 56
3.1.1 Bàn cố định 56
3.1.2 Bàn quay 56
Hình 3.2 Kết cấu bàn quay 56
Trang 53.1.3 Cơ cấu mantit nội tiếp 57
Hình 3.3 Kết cấu mantit nội tiếp 57
3.2 Phân tích thiết kế chế tạo máy gia công cho hệ thống 57
3.2.1 Phân tích, tính toán chi tiết gia công 57
3.2.2 Quy trình công nghệ gia công chi tiết 59
3.2.3 Kết cấu máy dụng cụ 70
3.2.4 Thiết kế ROBOT cho hệ thống 75
CHƯƠNG IV 87
ĐIỀU KHIỂN HỆ THỐNG BẰNG VĐK 87
4.1 Phân tích sơ đồ điều khiển modul tự động kiểu gia công nối tiếp tuần hoàn 87
4.2 Lập trình điều khiển hệ thống bằng vi điều khiển 89
KẾT LUẬN VÀ KIẾN NGHỊ 94
TÀI LIỆU THAM KHẢO 95
Trang 6HỆ THỐNG DANH MỤC CÁC HÌNH VẼ
Hình 1.1 Sơ đồ chân của 8051 11
Hình 1.2 Kiến trúc của bộ xử lý AVR 17
Hình 1.3 Bản đồ bộ nhớ của vi điều khiển AVR 20
Hình 1.4 Tệp thanh ghi của vi điều khiển AVR 21
Hình 1.5 Tìm nạp/giải mã lệnh và việc thực thi lệnh 22
Hình 1.6 Việc thực thi của ALU bao gồm tìm/nạp, thực thi, và ghi ngược vào thanh ghi 23
Hình 1.7 Các chu trình truy nhập dữ liệu lên thanh ghi SRAM trên chip 23
Hinh 1.8 Mô tả chi tiết một trong các bit cổng (PORTD4) 33
Hình 1.9 Kết nối bộ nhớ SRAM ngoài với bộ điều khiển AVR 35
Hình 1.10 Chu trình truy nhập SRAM ngoài và bộ điều khiển AVR không có các trạng thái chờ 36
Hình 1.11 Chu trình truy nhập SRAM ngoài và bộ điều khiển AVR có các trạng thái chờ bổ xung 36
Hình 1.12 Một mạch chia tần số đồng hồ dùng cho Timer0 cũng như Timer1 37
Hình 1.13 Sơ đồ khối của Timer/counter0 38
Hình 1.14 Sơ đồ khối của bộ Timer/Counter1 38
Hình 1.15 Sơ đồ khối của bộ truyền trên UART 39
Hình 1.16 Sơ đồ khối của bộ nhận UART 40
Hình 1.17 Sơ đồ khối của bộ biến đổi ADC 10 bit với 8 lối vào 41
Hình 2.1 Hệ thống chế tạo gia công trục động cơ điện (Fuji Electric) 46
Hình 2.2 Hệ thống sản xuất Tự Động của hãng Murata Machinery với ứng dụng xe rùa tự động chạy trực tiếp trên nền xưởng 47
Hình 2.3 Hệ thống vận chuyển-tích trữ vệ tinh trong CIM của hãng Cincinnati Milacron (Mỹ) 50
Hình 2.4 Ổ tích vệ tinh với xe tời di động của hãng Hitachi Seiki(Nhật Bản) 51
Trang 7Hình 3.1 Kết cấu hệ thống gia công 6 vị trí 55
Hình 3.2 Kết cấu bàn quay 56
Hình 3.3 Kết cấu mantit nội tiếp 57
Hình 3.4 Chi tiết gia công 57
Hình 3.5 Định vị chi tiết 60
Hình 3.6 Mô hình máy phay hướng kính 70
Hình 3.7 Mô hình máy phay tiếp tuyến 71
Hình 3.8 Mô hình máy khoan 73
Hình 3.9 Robot kiểu tọa độ cầu 77
Hình 3.10 Robot kiểu SCARA 78
Hình 3.11 Mô hình robot lật 79
Hình 3.12 Mô hình cánh tay robot lật 80
Hình 3.13 Mô hình phần quay và phần kẹp chi tiết của robot lật 80
Hình 3.14 Mô hình robot cấp phôi 83
Hình 3.15 Hoạt động của hệ thống khí nén trong robot 84
Hình 4.1 Sơ đồ nguyên công gia công chi tiết trên modul tự động 86
HỆ THỐNG DANH MỤC CÁC BẢNG BIỂU Bảng 1.1 Mô tả sự khác nhau của các IC trong họ MSC-51 11
Bảng 1.2 Bộ nhớ chương trình dùng cho địa chỉ 18
Bảng 2.1.Thành phần các máy CNC trong hệ thống FMS 45
Bảng 2.2 Chức năng của hệ thống kiểm tra 47
Bảng 3.1 Bảng tra chế độ cắt 65
Trang 8PHẦN MỞ ĐẦU
1 Lý do chọn đề tài
Do yêu cầu của thực tế cần trong nghành cơ khí cần phải gia công chi tiết một cách linh hoạt và ta có thể đáp ứng được yêu cầu đó bằng việc ứng dụng vi điều khiển vào hệ thống gia công tự động kiểu nối tiếp tuần hoàn
So với các hệ thống sản xuất truyền thống, FMS có nhiều ưu điểm vượt trội hơn hẳn Hệ thống FMS không những làm tăng năng suất và chất lượng sản phẩm,
hạ giá thành của sản phẩm mà còn có khả năng linh hoạt cao, đáp ứng được những thay đổi nhanh chóng của thị trường
Với yêu cầu từ thực tiễn và những ứng dụng có ý nghĩa quan trọng của tự động hóa và tối ưu hóa các thiết bị cơ khí trong các quá trình sản xuất tích hợp vi điều khiển để điều khiển chúng, với sự hướng dẫn tận tình của thầy giáo hướng dẫn
TS Nguyễn Đình Mãn Tác giả đã chọn đề tài “Nghiên cứu, ứng dụng vi điều
khiển cho modul gia công tự động kiểu nối tiếp tuần hoàn ”
3 Đối tƣợng nghiên cứu:
Đối tượng nghiên cứu của đề tài là tập hợp các máy công cụ bao gồm máy phay, máy khoan được tích hợp vi điều khiển, các lý thuyết liên quan đến hệ thống sản xuất tự động, và hệ thống robot phục vụ quá trình gia công
4 Tóm tắt những luận điểm cơ bản và đóng góp mới của tác giả
* Những luận điểm cơ bản
Nghiên cứu các lý thuyết về hệ thống sản xuất tự động và vi điều khiển , từ đó tính toán thiết kế hệ thống modul tự động bao gồm các máy phay, máy khoan, hệ thống các Robot như robot lật, robot cấp phôi Hệ thống này hoạt động theo kiểu
Trang 9bàn quay và được điều khiển bằng VĐK Hệ thống này giúp quá trình sản xuất trở nên linh hoạt và giảm tối đa thời gian phụ trong quá trình gia công đồng thời nâng cao năng suất
* Những đóng góp mới của tác giả
- Tổng quan về lý thuyết chung của hệ thống điều khiển tự động trong sản xuất cơ khí
- Tổng quan về vi điều khiển
- Tính toán thiết kế module tự động theo kiểu nối tiếp tuần hoàn cụ thể như: thiết kế bàn gia công, lựa chọn hệ thống máy công cụ và các robot hoạt động trong
hệ thống
- Điều khiển hệ thống gia công tự động kiểu nối tiếp tuần hoàn bằng VĐK
5 Phương pháp nghiên cứu
- Nghiên cứu cơ sở lý thuyết về cấu trúc hệ thống sản xuất tự động
- Tính toán thiết kế, chế tạo modul gia công tự động
- Tiến hành soạn chương trình VĐK
- Gia công toàn bộ hệ thống
- Chạy thử
Trang 10CHƯƠNG I TỔNG QUAN VỀ VI ĐIỀU KHIỂN
Ngày nay, cùng với sự phát triển không ngừng của khoa học kỹ thuật thì kỹ thuật số đã đem lại cho con người những thành tựu to lớn, giúp cho con người dễ dàng đạt được mục đích của mình trong mọi thiết kế Hòa nhập cùng xu hướng đó
vi điều khiển đã khẳng định được vị thế vững chắc của mình trong mọi ứng dụng Điển hình trong lĩnh vực vực cơ khí chế tạo, vấn đề tự động hóa sản xuất là yếu tố quan trọng hàng đầu để nâng cao chất lượng sản phẩm Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và hạ giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị và hệ thống Trên thị trường có rất nhiều họ vi điều khiển: họ 8051 của Intel, 68HC11 của Motorola, Z80 của hãng Eilog, PIC của hãng Microchip, H8 của Hitachi,vv và cuối cùng là AVR của hãng Atmel
1.1 Giới Thiệu Họ Vi Điều Khiển MCS – 51
MCS-51 là họ IC vi điều khiển do hãng Intel sản xuất Các IC tiêu biểu cho họ
là 8031, 8051, 8951 Những đặc điểm chính và nguyên tắc hoạt động của các bộ vi điều khiển này khác nhau không nhiều Khi đã sử dụng thành thạo một loại vi điều khiển thì ta có thể nhanh chóng vận dụng kinh nghiệm để làm quen và làm chủ các ứng dụng của một bộ vi điều khiển khác Vì vậy để có những hiểu biết cụ thể về các
bộ vi điều khiển cũng như để phục vụ cho đề tài tốt nghiệp này ta bắt đầu tìm hiểu một bộ vi điều khiển thông dụng nhất, đó là họ MCS-51 và nếu như họ MCS-51 là
họ điển hình thì 8051 lại chính là đại diện tiêu biểu
Các đặc điểm của 8051 được tóm tắt như sau :
4 KB ROM bên trong
128 Byte RAM nội
4 Port xuất /nhập I/O 8 bit
Giao tiếp nối tiếp
64 KB vùng nhớ mã ngoài
64 KB vùng nhớ dữ liệu ngoại
Trang 11Xử lý Boolean (hoạt động trên bit đơn)
210 vị trí nhớ có thể định vị bit
4 s cho hoạt động nhân hoặc chia
Bảng 1.1 Mô tả sự khác nhau của các IC trong họ MSC-51
Loại Bộ Nhớ Mã Trên CHIP Bộ Nhớ Dữ Liệu Trên CHIP Số Timer
VCC 40
EA 31
X1 19 X2 18
RST 9
P0.0/AD0 39
P0.1/AD1 38
P0.2/AD2 37
P0.3/AD3 36
P0.4/AD4 35
P0.5/AD5 34
P0.6/AD6 33
P0.7/AD7 32
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27P2.7/A15 28P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.5/T1 15P3.6/WR 16P3.7/RD 17U1
8051
Hình 1.1: Sơ đồ chân của 8051
Trang 12Chức năng hoạt động của từng chân (pin) được tóm tắt như sau :
Từ chân 1 8 Port 1 (P1.0, , P1.7) dùng làm Port xuất nhập I/O để giao tiếp bên ngoài
Chân 9 (RST) là chân để RESET cho 8051 Bình thường các chân này ở mức thấp Khi ta đưa tín hiệu này lên cao (tối thiểu 2 chu kỳ máy) thì những thanh ghi nội của 8051 được LOAD những giá trị thích hợp để khởi động lại hệ thống Từ chân 10 17 là Port3 (P3.0, P3.1, , P3.7) dùng vào hai mục đích: dùng là Port xuất/nhập I/O hoặc mỗi chân giữ một chức năng cá biệt được tóm tắt sơ bộ như sau: P3.0 (RXD): Nhận dữ liệu từ Port nối tiếp
P3.1 (TXD): Phát dữ liệu từ Port nối tiếp
P3.2 (INT0): Ngắt 0 bên ngoài
P3.3 (INT1): Ngắt 1 từ bên ngoài
P3.4 (T0): Timer/Counter 0 nhập từ bên ngoài
P3.5 (T1): Timer/Counter 1 nhập từ bên ngoài
P3.6 (WR): Tín hiệu Strobe ghi dữ liệu lên bộ nhớ bên ngoài
P3.7 (RD): Tín hiệu Strobe đọc dữ liệu lên bộ nhớ bên ngoài
Các chân 18,19 (XTAL2 và XTAL1) được nối với bộ dao động thạch anh 12 MHz để tạo dao động trên CHIP Hai tụ 30 pF được thêm vào để ổn định dao động
Chân 20 (Vss) nối đất (Vss = 0)
Từ chân 21 - 28 là Port 2 (P2.0, P2.1, , P2.7) dùng vào hai mục đích: làm Port xuất/nhập I/O hoặc dùng làm byte cao của Bus địa chỉ thì nó không còn tác dụng I/O nữa Bởi vì ta muốn dùng EPROM và RAM ngoài nên phải sử dụng Port 2 làm byte cao bus địa chỉ
Chân 29 (PSEN) (program store enable) là tín hiệu điều khiển xuất ra của
8051, nó cho phép chọn bộ nhớ ngoài và được nối chung với chân của OE (Outout Enable) của EPROM ngoài để cho phép đọc các byte của chương trình Các xung tín hiệu PSEN hạ thấp trong suốt thời gian thi hành lệnh Những mã nhị phân của chương trình được đọc từ EPROM đi qua bus dữ liệu và được chốt vào thanh ghi lệnh của 8051 bởi mã lệnh (chú ý việc đọc ở đây là đọc các lệnh - khác với đọc dữ
Trang 13liệu), khi đó VXL chỉ đọc các bit opcode của lệnh và đưa chúng vào hàng đợi lệnh thông qua các Bus địa chỉ và dữ liệu
Chân 30 (ALE : Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051,
nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0
Chân 31 (EA : Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoài đối với 8031
Chân 40 (Vcc) được nối lên nguồn 5V
1.2 Tổng quan về vi điều khiển AVR
1.2.1 Giới thiệu tổng quan họ vi điều khiển AVR
AVR là họ vi diều khiển mới khá mạnh, tích hợp tính năng cao, hơn hẳn họ 89xx của hãng Atmel theo công nghệ RISC (Reduced Instruction Set Computer )
Những đặc điểm nổi trội của AVR đó là về tốc độ xử lý nhanh hơn, nhiều tính năng hơn, giao tiếp đơn giản, khả năng chống nhiễu tốt hơn
Có thể xem AVR ngang hàng với những họ vi điều khiển mới như: Pic, psoc cùng thời Tuy mỗi họ có những tính năng riêng tuỳ thuộc vào ứng dụng thực tế của chúng ta, sử dụng cho phù hợp yêu cầu
Những tính năng mạnh hơn như:
- Kiến trúc (RISC) với hầu hết các lệnh có chiều dài cố định, truy cập bộ nhớ nạp-lưu dữ liệu và 32 thanh ghi đa năng
- Kiến trúc đường ống lệnh kiểu 2 tầng làm tăng tốc độ thực thi lệnh
- Có chứa nhiều bộ phận ngoại vi: giao diện SPI đồng bộ,các đường dẫn vào/ra (I/O) lập trình được, giao tiếp I2C, bộ biến đổi ADC 10 bit, các kênh băm
Trang 14xung PWM, chế độ sleep, standby, 1 bộ định thời Watchdog, 3 bộ timer/counter 8 bit, 1 bộ timer/counter 16 bit 1 bộ so sánh tương tự (analog), có bộ nhớ EEPROM, giao tiếp UART…
- Hầu hết các lệnh đều thực hiện trong 1 chu kỳ xung nhịp
- Hoạt động với tốc độ đồng hồ đến 12 MHZ , vi điều khiển AVR có khả năng đạt đến tốc độ xử lý 12MPIS (1 triệu lệnh trên giây)
- Bộ nhớ chương trình và dữ liệu tích hợp ngay trên chip AVR có 3 công nghệ bộ nhớ khác nhau: EPROM( luôn lập trình mới được) xoá được kiểu flash, EEPROM xoá được bằng tín hiệu xung điện nhưng nội dung bộ nhớ vẫn giữ nguyên khi mất điện áp nguồn, RAM dung cho các biến thông thường
- Khả năng lập được trình trong hệ thống, do cách thiết kế và công nghệ bộ nhớ có thể lập trình ngay trong khi đang được cấp nguồn trên mạch, ko cần phải nhấc chip ra như các vi điều khiển khác
Vi điều khiển AVR là bộ xử lý RISC với kiến trúc Harvard Thuật ngữ kiến trúc Harvard dùng để chỉ một đặc điểm là đơn vị xử lý trung tâm (CPU) có bộ nhớ chương trình và một bộ nhớ dữ liệu tách biệt
Họ vi điều khiển AVR có những đặc điểm sau:
1 Bộ nhớ flash được tích hợp ngay trên chip và có khả năng lập trình ngay trên hệ thống được sử dụng làm bộ nhớ chương trình Tất cả các bộ xử lý đều có bộ nhớ chương trình loại này Điều đó có nghĩa là ta không cần phải dùng đến các bộ nhớ EPROM hoặc ROM bên ngoài để chứa mã chương trình Hơn nữa, bộ nhớ chương trình có thể nạp chương trình trong khi bộ xử lý vẫn ở nguyên vị trí trên
Trang 15bảng mạch, không cần phải nhấc ra ngoài để đặt vào bộ nạp chương trình Đặc tính này cho phép cập nhật phần mềm hệ thống nhanh chóng và dễ dàng hơn Đôi khi hình thức này còn được gọi là lập trình tại chỗ (in situ) Bộ nhớ chương trình có thể được lập trình theo hai chế độ: nối tiếp hoặc song song và sẽ được bàn luận chi tiết
ở phần sau
2 Các thanh ghi làm việc đa năng 32 - X - 8 (theo truyền thống của các bộ
xử lý RISC thực sự) Một tập hợp bao gồm rất nhiều thanh ghi có nghĩa là các biến
có thể lưu trữ bên trong CPU chứ không phải lưu trữ các biến trong bộ nhớ, vì việc truy nhập lên bộ nhớ thường tốn nhiều thời gian hơn Như vậy chương trình sẽ chạy nhanh hơn
3 Bộ nhớ dữ liệu ngay trên chip loại EEPROM và RAM có trong hầu hết các thành viên của họ AVR Đơn vị CPU có kiến trúc Harvard, còn các bộ nhớ EPROM và RAM được nhìn nhận như là bộ nhớ dữ liệu và được dùng để cất giữ các hằng và biến
4 Hoạt động với xung giữ nhịp có tần số từ 0 đến 10MHz Hầu hết các lệnh được thực hiện trong 1 chu kỳ đồng hồ và điều này dẫn đến sự cải thiện tính năng với tốc độ xử lý khoảng 10 lần lớn hơn các bộ xử lý thông thường (chẳng hạn, họ 8051) hoạt động ở cùng tần số của đồng hồ giữ nhịp
5 Có mạch đặt lại trạng thái mỗi khi cấp lại điện nguồn cho hệ thống (Power On Reset)
6 Có bộ định thời ngay trên chip và lập trình được với mạch chia tần số (prescalr) tách biệt Bộ định thời này được sử dụng cho các ứng dụng cần có sự phân định thời gian (timing) của các sự kiện
7 Có các nguồn ngắt bên trong và bên ngoài
8 Có bộ định thời watchdog ngay trên chip và lập trình được với bộ dao động độc lập Bộ phận này được sử dụng để khôi phục lại trạng thái hoạt động của
hệ thống trong trường hợp xảy ra lỗi (treo) khi chạy phần mềm, nhưng cũng có thể được sử dụng cho các ứng dụng đáng quan tâm khác, như sẽ được bàn luận đến trong một ứng dụng sẽ được trình bày về sau
Trang 169 Có chế độ hoạt động: SLEPP (ngủ) và POWER DOWN (nghỉ hay giảm dòng tiêu thụ khi không cần thiết) Đặc điểm này cho phép tiết kiệm năng lượng khi
bộ xử lý không có công việc cần xử lý, đặc biệt có ý nghĩa đối với các thiết bị cầm tay dùng pin
10 Nhiều chip có mạch dao động đồn hồ RC ngay trên chip Khi sử dụng bộ giao động RC trên chip, số lượng các linh kiện phụ trợ sẽ giảm đi
11 Có một phạm vi rộng các đặc tính của bộ xử lý (từ các bộ xử lý cỡ nhỏ với 8 chân ra đến bộ xử lý 68 chân), nhờ vậy ta có thể lựa chọn một bộ xử lý cho thích hợp với yêu cầu đã đặt ra, cả về chi phí và tính năng kỹ thuật cũng như về các công cụ phát triển
2) Kiến trúc của bộ xử lý AVR
Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau Hình 1.2 minh họa một bản phác thảo kiến trúc bên trong của bộ điều khiển Bus dữ liệu dùng cho bộ nhớ dữ liệu là một bus 8 bit, cho phép nối hầu hết các bộ phận ngoại vi vi với tệp thanh nghi (register file) Bus dữ liệu dùng cho bộ nhớ chương trình có độ rộng 16 bit và chỉ nối với thanh ghi lệnh Mặc dù hình 1.2 minh họa cho kiến trúc của bộ điều khiển AVR AT90S2313, nhưng cũng có thể áp dụng cho tất cả các bộ xử lý và chỉ khác về quy mô của các
bộ phận ngoại vi bổ sung (hoặc không có) cũng như sự khác nhau về dung lượng của bộ nhớ chương trình và bộ nhớ dữ liệu
Trang 17Hình 1.2: Kiến trúc của bộ xử lý AVR
Bộ nhớ chương trình là loại bộ nhớ flash Dung lượng chính xác của bộ nhớ này thay đổi khác nhau giữa các bộ xử lý trong cùng họ Bộ xử lý AT90S1200, bộ
xử lý ở mức cơ bản, có 1 kbyte bộ nhớ chương trình, được tổ chức các bit theo 512 -
X - 16 bit, trong khi bộ điều khiển Mega103 có 128 kbyte bộ nhớ được tổ chức theo 64k - X - 16 Một kilô (k) ở đây được tính theo hệ số 1.024 chứ không phải 1.000 như thông thường 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 thành ghi bằng cách lựa chọn xem thanh nghi nào sẽ được ALU sử dụng để thực thi lệnh Lối ra của thanh nghi lệnh được giải mã bằng bộ giải mã lệnh để quyết định chọn tín hiệu điều khiển nào sẽ được kích hoạt để thoà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 như chứa các vectơ ngắt bắt đầu ở địa chỉ $0000 Chương trình hiện tại sẽ bắt đầu ở vị trí bộ nhớ phía bên kia vùng dùng cho các vectơ Số lượng các vectơ cũng khác nhau giữa các bộ xử lý
Trang 18Bộ xử lý AT90S1200 có 3 vectơ còn AT90S8515 có 13 vectơ Bảng 1.2 minh họa toàn bộ không gian vectơ dùng cho bộ xử lý AT90S8515
Bộ nhớ chương
trình dùng cho
địa chỉ
Bảng 1.2: Bộ nhớ chương trình dùng cho địa chỉ
Bộ nhớ dữ liệu, mặt khác, được phân chia thành những loại khác nhau Hình 1.3 minh họa các bản đồ bộ nhớ khác nhau có trên một vi điều khiển AVR Bộ nhớ
Trang 19phần của bộ nhớ SRAM trên chip và có thể được truy nhập hoặc như bộ nhớ SRAM với các địa chỉ giữa $20 và $5F hoặc như các thanh ghi I/O với các địa chỉ giữa $00
và $3F Hầu hết các thanh ghi này thường được trao đổi như các thanh nghi I/O chứ không phải như bộ nhớ SRAM
3 Bộ nhớ SRAM bên trong Bộ nhớ này có trên hầu hết các bộ xử lý AVR, chỉ trừ các bộ xử lý loại cơ sở (baseline), chẳng hạn như loại AT90S1200 Dung lượng bộ nhớ SRAM thay đổi từ 128 byte đến 4 kbyte 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 có ngắt và gọi đoạn chương trình (subroutine), giá trị hiện tại của bộ đếm chương trình được lưu trữ trong ngăn xếp Kích thước của ngăn xếp bị giới hạn bởi bộ nhớ SRAM có mặt trên chip Vị trí của ngăn xếp được chỉ thị bởi con trỏ ngăn xếp Con trỏ ngăn xếp
có dụng lượng 1 kbyte trên các vi điều khiển nhỏ hơn, chẳng hạn như loại AT90S2313 và bằng 2 byte trên các bộ xử lý lớn hơn, chẳng hạn như loại AT90S8515 Con trỏ ngăn xếp cần phải được khởi tạo sau khi đặt lại (reset) và trước khi ngăn xếp có thể được sử dụng Các bộ xử lý này không có bộ nhớ SRAM trên chip, chẳng hạn như loại AT90S1200 Ngăn xếp bằng phần cứng được thiết kế
để lưu trữ các địa chỉ trả lại chương trình Một ngăn xếp bằng phần cứng này chỉ có thể lưu trữ đến 3 giá trị trả lại
4 Bộ nhớ SRAM bên ngoài Đặc tính này chỉ có ở các bộ xử lý cỡ lớn trong
họ vi điều khiển AVR Các bộ xử lý này có các cổng để truy nhập bộ nhớ và dữ liệu bên ngoài (chẳng hạn như AT90S8515) có thể sử dụng bất kỳ bộ nhớ SRAM ngoài nào mà người dụng có thể tùy ý quyết định khi thiết kế
5 EEROM Bộ nhớ EEROM có sẵn trên hầu như tất cả các bộ vi điều khiển AVR và được truy nhập theo một bản đồ bộ nhớ tách biệt Địa chỉ bắt đầu của bộ nhớ EEPROM luôn là $0000 Các bộ xử lý khác nhau có từ 64 byte đến 4 kbyte bộ nhớ EEPROM Bộ nhớ EEPROM có thể được đọc và ghi bởi bất kỳ chương trình nào Việc đọc bộ nhớ EEPROM diễn ra nhanh hơn việc ghi vào bộ nhớ EEROM
Bộ nhớ EEPROM có thể ghi vào được khoảng 100.000 lần
Trang 20Hình 1.3: Bản đồ bộ nhớ của vi điều khiển AVR
6 Hầu hết các lệnh dùng cho bộ điều khiển AVR đều có chiều dài1 từ (2 byte) và vì thế chiếm 1 ô nhớ chương trình Nhiều lệnh được thực thi trong một chu
kỳ đồng hồ đơn lẻ, trongkhi một số khác có thể chiếm 2 hoặc nhiều chu kỳ đồng hồ Việc thực thi trong một chu trình đơn lẻ đạt được là do việc sử dụng một kiểu cấu trúc đường ống (pipeline) hai tầng Đường ống làm việc theo cách tiếp nhận đồng thời một lệnh mới từ bộ nhớ chương trình trong khi lệnh trước đó đang được thực thi trong phần khác của bộ xử lý Việc tìm nạp/giải mã và thực thi các lệnh như vậy gọi là những quá trình được thực hiện bởi bộ xử lý một cách đồng thời
Bây giờ ta thử tìm hiểu các bộ phận khác nhau hình thành bộ xử lý AVR, đó là:
+ Tệp thanh ghi + Bộ truyền nhận UART
+ Khối số học logic + Cấu trúc ngắt
Trang 21+ Bộ nhớ EEPROM + Bộ watchdog
+ Cổng vào/ra + Bộ biến đổi A/D
+ Bộ nhớ SRAM + Bộ định thời watchdog
Các thanh ghi R0 và R26 đến R31 có các chức năng bổ xung Thanh ghi R0 được sử dụng trong các lệnh nạp bộ nhớ chương trình LPM (Load Program Memory), trong khi các thanh ghi R26 đến R31 được sử dụng làm các thanh ghi con trỏ như được minh họa trên hình 1.4 Các thanh ghi con trỏ này được sử dụng trong nhiều lệnh gián tiếp dụng cho thanh ghi (regiser indirect insruction)
Hình 1.4: Tệp thanh ghi của vi điều khiển AVR
Trang 22 Khối số học logic
Khối số học logic (ALU) thực hiện các thao tác như thao tác bit; phép tính số học và logic trên nội dụng của các thanh ghi và ghi ngược kết quả vào tệp thanh ghi trên thanh ghi đã được chỉ định Các thao tác này được thực hiện trong một chu kỳ đồng hồ đơn lẻ Mỗi một hao tác ALU đều làm ảnh hưởng đến các cờ trong thanh ghi trạng thái (STATUS), tùy thuộc vào lệnh
Truy nhập bộ nhớ và việc thực thi lệnh
Bộ xử lý AVR được điều khiển bởi đồng hồ hệ thống, đồng hồ này có thể ở bên ngoài, hoặc nếu có tồn tại và được phép, một đồng hồ RC bên trong có thể được
sử dụng Đồng hồ hệ thống này không qua bất kỳ bộ chia nào và được sử dụng thực tiếp cho tất cả các thao tác truy nhập bên trong bộ xử lý Bộ xử lý có một đường ống hai tầng, và lệnh tìm nạp/giải mã (fech/decode) được thực hiện đồng thời với việc thực thi lệnh Quá trình này được minh họa trên hình 1.5
Hình 1.5: Tìm nạp/giải mã lệnh và việc thực thi lệnh
Cứ mỗi lần lệnh được tìm nạp (fetch), nếu đây là một lệnh liên quan đến ALU, nó có thể được thực thi bởi khối ALU như được minh họa trên hình 1.6 cho một chu trình đơn lẻ
Trang 23Hình 1.6: Việc thực thi của ALU bao gồm tìm/nạp, thực thi, và ghi ngược vào thanh ghi
Mặt khác, việc truy nhập bộ nhớ SRAM chiếm mất 2 chu kỳ, như được minh họa trên hình 1.7 Nguyên nhân là việc truy nhập bộ nhớ SRAM sử dụng một thanh ghi con trỏ dùng địa chỉ bộ nhớ SRAM Thanh ghi con trỏ này chỉ là một trong các thanh ghi con trỏ (các cặp thanh ghi X, Y, hoặc Z) có trên chip Chu trình đồng hồ thứ nhất được cần đển để truy nhập tệp thanh ghi và để thao tác trên thanh ghi con trỏ (các lệnh truy nhập bộ nhớ SRAM cho phép tăng địa chỉ trước/sau thao tác trên thanh ghi con trỏ) Ở thời điểm kết thúc của chu kỳ đồng hồ thứ nhất, khối ALU thực hiện phép tính này, và sau đó địa chỉ này được sử dụng để truy nhập ô nhớ SRAM và để ghi vào ô nhớ này (hoặc đọc ra từ đó vào thanh ghi đích), như được minh họa trên hình 1.7
Hình 1.7: Các chu trình truy nhập dữ liệu lên thanh ghi SRAM trên chip
Bộ nhớ vào/ra
Trang 24Bộ nhớ vào/ra là “xa lộ” đến với tất cả các bộ phận ngoại vi xủa bộ xử lý AVR Nó được thiết kế giống như SRAM và có thể được trao đổi theo hai cách: giống như bộ nhớ SRAM hoặc như các thanh ghi I/O Nếu giống như SRAM, các địa chỉ ở phía bên kia S20 cho đến $5F, còn nếu giống như các thanh ghi I/O, các địa chỉ bắt đầu từ $00 đến $3F
Ta sẽ xem xét các thanh ghi vào/ra như các thanh ghi chứ không phải như bộ nhớ SRAM và sẽ xem xét hầu hết các thanh ghi I/O cũng như chức năng của các thanh ghi đó Tuy nhiên, đối với một chip cụ thể, ta nên tra cứu hoặc đối chiếu với các tài liệu về thống số kỹ thuật (data sheet) cụ thể để có được các thông tin cập nhật và chính xác Ở đây chỉ bàn luận đến các thanh ghi chung nhất và chức năng của chúng
Một điểm quan trọng cần chú ý ở đây là việc truy nhập lên các thanh ghi vào/ra khác nhau Để truy nhập lên các thanh ghi I/O, vi điều khiển AVR giới thiệu các lệnh IN và OUT Các lệnh này có thể truy nhập tất cả các thanh gh I/O từ $00 đến $3F Bên cạnh các lệnh IN và OUT, vi điều khiển AVR cũng hỗ trợ việc định địa chỉ bit lên một số trong các thanh ghi, cụ thể là từ $00 đến $1F Với sự trợ giúp của các lệnh bit SBI và CBI, bất cứ bit nào trên bất kỳ thanh ghi nào (từ $00 đến
$1F) đều có thể được đặt và đặt lại Đây là một phương pháp tiết kiệm thời gian so với việc đọc thanh ghi, thay đổi bit, và việc ghi giá trị ngược trở lại thanh ghi Đối với các thanh ghi còn lại, ta phải sử dụng một phương pháp khác, cần đến thời gian dài hơn khoảng ba lần so với một chu kỳ đồng hồ
Thanh ghi điều khiển toàn bộ vi điều khiển MCUCR
Các bit trong thanh ghi điều khiển toàn bộ vi điều khiển thường được viết tắt
là MCUCR (MCU Control Register) cho phép điều khiển toàn bộ vi điều khiển Chức năng ghi này bao gồm việc điều khiển để cho phép/cấm truy nhập bộ nhớ SRAM ngoài, chế độ ngủ, và điều khiển độ nhạy cảm (sense) ngắt ngoài
Thanh ghi trạng thái bộ xử lý MCUSR
Thanh ghi trạng thái MCU (MCU status rigister) cung cấp thông tin về nguồn của tín
hiệu reset Thanh ghi MCUSR có chứa 2 bit, bit này chỉ cho thấy nguồn của tín hiệu reset
Trang 25 Thanh ghi điều khiển TIMER/COUNTER0 TCCR0
Thanh ghi Timer/Counter1 được sử dụng để điều khiển các thao tác của bộ xử
lý Timer/Conter0 Đây là một bộ định thời đơn giản dùng để đếm tiến từ giá trị đếm
đã được nạp vào Bộ đếm được làm tăng thêm một giá trị mỗi khi có thêm một tín hiệu đồng hồ ở lối vào của nó Tín hiệu đồng hồ có thể được lựa chọn từ một trong
7 nguồn Tùy chọn thứ 8 cho phép bộ Timer/Counter được ngưng hoạt động
Thanh ghi Timer/Counter0 TCNT0
Đây là thanh ghi Timer/Counter hiện thời Một giá trị đã nạp vào thanh ghi này được sử dụng làm giá trị xuất phát (bắt đầu), và bộ định thời làm tằng giá trị này theo từng tín hiệu xung nhịp của nó nếu bộ Counter/Timer được cho phép qua thanh ghi TCCR0 Sau khi bộ Timer/Counter0 bị tràn, được đặt lại về $00 và tiếp
tục đếm tiến theo từng tín hiệu xung nhịp Timer/Counter0
TCCR1A: Thanh ghi điều khiển Timer/Counter 1A
TCCR1A là một thanh ghi điều khiển dùng cho bộ Timer/Counter1 Các tín hiệu dùng cho các thanh ghi
TCCR1B: Thanh ghi điều khiển Timer/Counter1B
Các thanh ghi so sánh lối ra bộ Timer/Counter1: OCR1AH, OCR1AL
Thanh ghi so sánh lối ra (Output Compare Register) là một thanh ghi đọc/ghi
16 bit Thanh ghi OCR bộ Timer/Counter1 chứa dữ liệu cần được so sánh liên tục với bộ Timer/Counter1 Diễn biến của những lần so sánh (Actions on compare matches) được chỉ định trên thanh ghi điều khiển và trạng thái Timer/Counter
Bởi vì thanh ghi so sánh lối ra OCR1A là một thanh ghi 16 bit, nên một thanh ghi tạm thời TEMP được sử dụng khi ghi vào OCR1A để bảo đảm rằng cả hai byte được cập nhật đồng thời Khi CPU ghi byte cao (HIGH), OCR1AH, dữ liệu được lưu trữ tạm thời trong thanh ghi TEMP Khi khối CPU ghi byte thấp (LOW), OCR1AH cần phải được ghi trước tiên đối với một thao tác ghi trọn vẹn thanh ghi
16 bit Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và ICR1 Nếu chương trình chính và đoạn chương trình ngắt (routine) cũng thực hiện thao tác truy nhập lên các thanh ghi bằng cách sử dụng TEMP, các ngắt cần phải bị cấm trong
Trang 26thời gian xảy ra quá trình truy nhập từ chương trình chính hoặc các ngắt truy nhập nếu các ngắt được cho phép lại được cho phép lại
Các thanh ghi so sánh lối ra Timer/Counter1: OCR1 BH, OCR1 BL
Các thanh ghi so sánh lối ra (output compare) là các thanh ghi đọc/ghi 16 bit Các thanh ghi so sánh lối ra bộ Timer/Counter1 chứa dữ liệu được so sánh liên tục với Timer/Counter1
Diễn biến của những lần so sánh được chỉ định trong thanh ghi điều khiển và trạng thái Timer/Counter1 Một lần so sánh chỉ xảy ra nếu Timer/Counter1 đếm đến giá trị OCR Một phần mềm thực hiện thao tác ghi, đặt TCNT1 và OCR1A hoặc OCR1B thành cùng giá trị, sẽ không tạo ra một lần so sánh
Một lần so sánh sẽ đặt cờ ngắt so sánh trong chu kỳ đồng hồ CPU kế tiếp theo
sự kiện so sánh Bởi vì các thành ghi so sánh lối ra – OCR1A và OCR1B – là các thanh ghi 16 bit, nên một thanh ghi tạm thời TEMP được sử dụng khi OCR1A/B được ghi để đảm bảo là cả hai byte được cập nhật đồng thời Khi CPU ghi byte cao (HIGH), OCR1AH hoặc OCR1BH, dữ liệu được lưu trữ tạm thời vào thanh ghi TEMP Khi khối CPU ghi byte thập, OCR1AL hoặc OCR1BL, thanh ghi TEMP ghi đồng thời OCR1AH hoặc OCR1BH Do đó, byte cao (HIGH) OCR1AH hoặc OCR1BH cần phải được ghi trước tiên đối với một thao tác ghi trọn vẹn thanh ghi
16 bit
ICR1H, ICR1L: Các thanh ghi Timer/Counter1 Input Capture
Thanh ghi input capture là một thanh ghi 16 bit chỉ để đọc Khi sườn dương hoặc sườn âm (phù hợp với việc thiết lập sườn input capture, ICES1) của tín hiệu ở chân input capture, ICP, được phát hiện, giá trị hiện thời của bộ Timer/Counter1 được truyền đến thanh ghi Input Capture, ICR1 Đồng thời, cờ input capture ICF1, được đặt thành “1” Bởi vì thanh Input Capture ICR1 là một thanh ghi 16 bit, nên một thanh ghi tạm thời TEMP được sử dụng để khi ICR1 được đọc có thểm đảm bảo rằng cả hai byte được đọc đồng thời Khi CPU đọc byte thấp (LOW) ICR1L, dữ liệu được gửi đến khối CPU và dữ liệu của byte cao (HIGH) ICR1H được đặt vào thanh ghi TEMP Khi khối CPU đọc dữ liệu trong byte cao (HIGH) ICR1H, khối CPU
Trang 27nhận dữ liệu trong thanh ghi TEMP Do đó, byte thấp (LOW) ICR1L cần phải được truy nhập trước tiên đối với một thao tác đọc trọn vẹn thanh ghi 16 bit Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và OCR1A Nếu chương trình chính và cả đoạn chương trình ngắt thực hiện việc truy nhập đến các thanh ghi bằng cách sử dụng TEMP, thì các ngắt cần phải bị cấm trong thời gian truy nhập từ
chương trình chính hoặc các ngắt truy nhập nếu các ngắt được cho phép lại
WDTCR: Thanh ghi điều khiển bộ định thời Watchdog
1 Bit 4: WDTOE Watchdog Turn Off Enable Bit này được sử dụng chung với bit WDE Bit này được đặt thành “1”, khi WDE bị xoá thành “0” để cấm mạch watchdog timer Bộ xử lý xoá bit này sau 4 chu kỳ đồng hồ
2 Bit 3: WDE Watchdog Enable Khi đặt thành “1”, mạch watchdog timer được cho phép Để cấm mạch watchdog, bit này bị xoá thành “0” và WDTOE được đặt thành “1” Để cấm mạch watchdog timer, thủ tục sau đây được sử dụng: Trong một thao tác đơn lẻ, đặt WDTOE và WDE thành “1” Xoá WDE thành “0” trong 4 chu kỳ đồng hồ tiếp theo Sau đó, thao tác này sẽ cấm mạch watchdog timer
3 Bit 2-0: WDP2, WDP1, WDP0 Giá trị chia tần số (Watchdog Timer Prescaler)
Thanh ghi địa chỉ bộ nhớ EEPROM EEAR
Thanh ghi địa chỉ bộ nhớ EEPROM có độ rộng 2 byte dùng cho các bộ xử lý
có bộ nhớ EEPROM lớn hơn 256 byte và có độ rộng một byte đối với các bộ xử lý còn lại
Thanh ghi dữ liệu bộ nhớ EEPROM EEDR
Thanh ghi dữ liệu bộ nhớ EEPROM được sử dụng để đọc và ghi dữ liệu từ/vào bộ nhớ EEPROM Bộ nhớ EEPROM có độ rộng 8 bit
Thanh ghi điều khiển EEPROM EECR
Thanh ghi EECR được sử dụng để điều khiển các thao tác đọc và ghi dữ liệu vào bộ nhớ EEPROM
Trang 281 Bit 2: EEMWE: EEPROM Master Write Enable Việc đặt EEMWE thành
“1” và sau đó thiết lập EEWE thành “1” sẽ chỉ ghi dữ liệu trên thanh ghi EEDR vào
bộ nhớ EEPROM Nếu như EEMWE được đặt thành “1”, thì phần cứng xoá bit này thành “0” sau 4 chu kỳ xung nhịp
2 Bit 1: EEWE: EEPROM Write Enable Khi đặt thành “1” trong khi EEMWE cũng bằng “1”, dữ liệu EEDR được ghi vào bộ nhớ EEPROM ở địa chỉ được chỉ định bởi thanh ghi địa chỉ bộ nhớ EEPROM Bit EEWE giữ nguyên giá trị
“1” trong chu trình ghi, khoảng thời gian này có thể chiếm đến 2,5ms ở 5V Sau khi khoảng thời gian này trôi qua, bit EEWE bị phần cứng xoá thành “0” Dãy các lệnh dùng để gi dữ liệu vào bộ nhớ EEPROM được viết như sau:
Wait till EEWE is cleared to “0”
Write EEPROM address to EEAR
Write EEPROM data to EEDR
Set EEMWE to “1” và within four clock cycles set EEWE to “1”
Đoạn chương trình này sẽ ghi dữ liệu trong thanh ghi EEDR vào ô nhớ trên bộ nhớ EEPROM có địa chỉ bằng giá trị trong EEAR
3 Bit0: EERE: EEPROM Read Enable (Cho phép đọc EEPROM) Để đọc
dữ liệu EEPROM, nạp EEAR với địa chỉ đúng (phù hợp), đặt EERE thành “1”, và sau đó xoá EERE thành “0” Thao tác này sẽ chuyển dữ liệu vào EEDR Trước khi bắt đầu chu trình đọc, chương trình sẽ kiểm tra (poll) cờ EEWE cho đến khi EEWE bằng “0” để đảm bảo là không một chu trình ghi nào được tiến hành
Cổng B: PortB data register
Thanh ghi PortB là một thanh ghi đọc/ghi Nó được khởi tạo ở thời điểm reset thành $00 Khi được lập trình thành một lối ra, thì việc ghi vào PortB sẽ cho phép ta thay đổi trạng thái logic ở các chân PortB
Thanh ghi hướng dữ liệu các cổng DDRS
Thanh ghi này được sử dụng để điều khiển hướng của từng chân của PortB Khi ghi một giá trị “0” (giá trị này cũng là giá trị reset) vào bất kỳ bit nào của thanh
Trang 29ghi này sẽ làm bit PortB tương ứng thành lối vào, và khi giá trị “1” sẽ làm cho nó trở thành bit lổi ra
Các chân lối vào trên các cổng
Đây là các cổng chỉ để đọc, và với các cổng này ta có thể đọc trạng thái logic
ở chân vật lý của PortB PinB không phải là thanh ghi, và việc đọc PinB cho phép ta đọc giá trị logic trên các chân của PortB
Thanh ghi dữ liệu PortD: PortD
Cùng chức năng như thanh ghi PortB
Thanh ghi hướng dữ liệu PortD: DDRD
Cùng chức năng như thanh ghi DDRB
Thanh ghi dữ liệu I/O SPI
Đây là thanh ghi đọc/ghi được sử dụng để truyền dữ liệu giữa tệp thanh ghi và thanh ghi dịch SPI Việc ghi vào thanh ghi này khởi tạo quá trình truyền dữ liệu, và việc đọc từ thanh ghi này làm cho bộ đệm nhận của thanh ghi dịch được đọc Việc trình bày chi tiết hơn về thanh ghi này sẽ được đề cập đến trong mục viết về cổng SPI
Thanh ghi trạng thái SPI
1 Bit7: 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 ngắt toàn cục được cho phép, thì cờ SPIF được đặt thành “1” Cờ SPIF bị bộ xử lý hoá thành “0” khi ngắt tương ứng đượ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ờ SPIF bằng “1” và sau đó truy nhập thanh ghi dữ liệu SPI
Thanh ghi điều khiển SPI
1 Bit7: SPIE Cho phép ngắt SPI Bit này làm cho một ngắt SPI phải được tạo ra nếu bit SPIF trong thanh ghi SPSR được đặt và các ngắt toàn cục được cho phép
2 Bit6: SPE Cho phép SPI Khi bit này được đặt thành “1” thì SPI được cho phép
Trang 303 Bit5: DORD Đặt thứ tự dữ liệu Khi đặt thành “1” LSB của từ dữ liệu được truyền trước tiên Khi bị xoá thành “0”, byte MSB của từ dữ liệu được truyền trước tiên
4 Bit4: MSTR Master/Slave Select Khi đặt thành “1”, cổng SPI trong chế
độ chủ (master mode) và khi xoá thành “0”, nó là một cổng slave Nếu như SS được cấu hình để là lối vào và được đặt xuống mức thấp (LOW), thì bit MSTR sẽ bị xoá thành “0” và SPIF trong SPSR sẽ được đặt Người dùng sẽ phải đặt MSTR thành
“1” một lần nữa để bắt đầu (khởi động ) như là master
5 Bit3: 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 là thấp (LOW) khi không có công việc cần xử lý
6 Bit2: CPHA Clock Phase Quy định pha kích hoạt của xung nhịp
7 Bit1-0: SPR1, SPR0.SPI Clock Rate Select Các bit này quy định tốc độ đồng hồ SCK khi được đặt cấu hình như là master, phù hợp với nội dung của bảng 1.9 Nếu như vi mạch là một slave, các bit này không ảnh hưởng lên tần số SCK
Thanh ghi dữ liệu vào/ra UART
Các thanh ghi dữ liệu vào/ra UART trên thực tế là hai thanh ghi tách biệt nhau, nhưng dùng chung cùng một địa chỉ vật lý Khi dữ liệu được ghi vào địa chỉ này, nó ghi vào thanh ghi truyền dữ liệu, và khi đọc từ địa chỉ này nó đọc từ thanh ghi nhận dữ liệu
Thanh ghi trạng thái UART
Thanh ghi trạng thái UART được sử dụng để giám sát trạng thái của UART Các bit có ý nghĩa của thanh ghi trạng thái UART USR là:
Thanh ghi điều khiển UART
1 Bit 7: RXCIE: RX Complete Interrupt Enable Bit này khi đặt thành “1”
sẽ gây ra ngắt Receive Complete Interrupt khi bit RXC trong USR được đặt thành
“1” và các ngắt toàn cục được cho phép
Thanh ghi tốc độ Baud Uart
Trang 31Bộ phận ấn định tốc độ baud dùng cho UART là một bộ phận lưu trữ số chia tần số, quy định mức độ nhanh chậm đối với việc truyền và nhận dữ liệu, tuân theo phương trình sau đây:
BaudRate = Fclk/(16*(UBRR+1))
ở đây Fclk là tần số của đồng hồ hệ thống UBRR là nội dung của thanh ghi tốc độ baud UART
Thanh ghi trạng thái và điều khiển bộ so sánh analog 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
1 Bit7: 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 (swiched off)
2 Bit 5: ACO: Analog Comaprator Output Đây là lối ra của bộ so sánh
3 Bit4: ACI: Analog Comparator Interrupt Flag (Cờ ngắt bộ so sánh analog) Bit này được đặt thành “1” khi một sự kiện so sánh đã trigger một 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
4 Bit3: ACIE: Analog Comparator Interrupt Enable (cho phép ngắt bộ so sánh analog) Khi 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
5 Bit2: 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
6 Bit1,0: ACIS1, ACIS0: Analog Comparator Interrupt Mode Select Việc kết hợp của các bit này lựa chọn các chế độ ngắt như được minh hoạ trong bảng 1.10
1.2.3 Bộ nhớ EEPROM
Tất cả các bộ điều khiển AVR đều có một bộ nhớ EEPROM trên chip Dung lượng bộ nhớ EEPROM thay đổi từ 64 byte trên bộ điều khiển AT90S1200
Trang 32Tiny10/12 đến 4 kbyte trên Mega 103 Bộ nhớ EEPROM được truy nhập qua các thanh ghi truy nhập EEPROM, cụ thể là: Thanh ghi địa chỉ EEPROM (EEAR), thanh ghi dữ liệu EEPROM (EEDR), và thanh ghi điều khiển EEPROM (EECR)
Đối với các bộ điều khiển có bộ nhớ EEPROM trên 256 byte, thanh ghi EEAR trên thực tế là 2 thanh ghi: EEARL và EEARH Thanh ghi EEAR (hoặc như
là một thanh ghi đơn hoặc như là một thanh ghi kép) được sử dụng để đặt địa chỉ của bộ nhớ EEPROM mà dữ liệu cần ghi vào đó hoặc cần đọc ra từ đó Thanh ghi EEAR là một thanh ghi đọc/ghi, nghĩa là thanh ghi có thể được đọc để xem cái gì đã được đặt vào địa chỉ EEPROM
* Cổng vào/ra
Tất cả các bộ điều khiển AVR đều có một lượng lớn các cổng vào/ra (I/O), nằm trong khoảng từ 3 bit trên vi điều khiển loại AT90S2323 đến 48 bit trên loại Mega 103 Tất cả các cổng lối ra (được đặt nhờ các bit) của các bộ điều khiển AVR
có thể chịu đựng dòng điện đến 20 mA, nên rất thích hợp đối với việc điều khiển trực tiếp các LED vì không cần đến các mạch đệm bổ xung
Tất cả các cổng vào ra (I/O) đều có 3 địa chỉ vào ra đi kèm với chúng Ba địa chỉ vào/ra được cần đến để đặt cấu hình cho các bit riêng biệt thành lối vào hoặc thành lối ra; địa chỉ khác được cần đến để xuất dữ liệu tới các bit đó (hoặc tất cả) được đặt cấu hình thành lối ra, và địa chỉ thứ ba được cần đến để đọc dữ liệu từ các chân đó (hoặc tất cả ) được cấu hình thành lối vào
Các cổng đó được đánh số là DDR, PORTx, PINx cho một cổng x cho trước Cổng DDRx là thanh ghi hướng dữ liệu Khi ghi một mức “1” vào một bit ở DDR làm cho bit tương ứng thanh bit lối ra trong PORTx Sau đó, để xuất ra một giá trị
“1” trên bit cổng, bit tương ứng có thể được đặt hoặc reset bằng cách sử dụng lệnh CBI hoặc SBI hoặc một lệnh OUT
Sử dụng CBI và sai để ghi vào các cổng
sa1 DDRB, 1; làm cho bit 1 thanh bit lối ra ở PORTB
CB1 PORTB, 1; làm cho bit 1 PORTB thành “0”
Sa1 PORTB, 1; làm cho bit 1 PORTB thành “1”
Trang 33Một cách khác để thay đổi các giá trị cổng là sử dụng các lệnh IN và OUT:
Sử dụng lệnh OUT để ghi vào các cổng
OUT PORTB, R18; làm cho bit 1 PORTB thành 1
Tương tự, để đọc dữ liệu ở chân lối vào của một cổng, ta sử dụng thanh ghi PINx Thanh ghi PINx được nối trực tiếp với các chân của cổng Chân cổng có thể được cấp tín hiệu để duy trì trạng thái theo cách tạo mức điện áp cao (pull-up) bên trong bằng cách ghi giá trị “1” vào bit cổng ở các địa chỉ PORTx Các điện trở pull-
up này có giá trị trong khoảng từ 30 kΩ và 150 kΩ Giá trị tương ứng của dòng điện pull-up nằm giữa 160 μA và 33 μA
Hình 1.8: Mô tả chi tiết một trong các bit cổng (PORTD4)
Trang 34Ngược lại, nếu một giá trị “0” được ghi vào bit cổng ở địa chỉ PORTx, thì trạng thái pull-up được loại bỏ và chân lối vào rời bỏ trạng thái thả nổi chuyển sang trạng thái trở kháng cao
; sử dụng lệnh IN để đọc từ các cổng
LDI R18, 0b00000000
OUT DDRB, R18; làm cho tất cả các bit thành bit lối vào ở PORTB
IN R18, PINB; đọc các chân trên cổng PORTB, R18 có kết quả xem hình
3-30
1.2.4 Bộ nhớ SRAM
Bộ nhớ SRAM có trên hầu hết các bộ xử lý có giá thành cao trong họ vi điều khiển AVR Dung lượng của bộ nhớ SRAM thay đổ từ 128 byte đến 4Kb Bộ nhớ SRAM được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu gián tiếp hoặc trực tiếp Bộ nhớ SRAM cũng được sử dụng cho ngăn xếp Thời gian truy nhập bộ nhớ SRAM bằng 2 chu kỳ đồng hồ, như được minh hoạ trong hình 3-6
ldi r30, $60 clr r31
st z+, temp
; init the pointer into SRAM in 2313
; 60bex is start of SRAM in 2313
; now Z pointer is pointing to the SRAM
; store a value in register temp to SRAM
; increment the address
Tương tự, để đọc bộ nhớ SRAM, đoạn mã sau đây được sử dụng:
ldi r30, $60 ; khởi tạo con trỏ trong SRAM thành 60hex
clr r31 ; khởi tạo con trỏ trong SRAM thành 60hex
id temp, Z+ ; 60 hex là chỗ start của SRAM in 2313 DOW
con trỏ Z đang trỏ đến SRAM nạp một giá trị trong thanh ghi emp từ SRAM và tăng địa chỉ thêm 1
Trang 35GIAO TIẾP VỚI SRAM NGOÀI
Trên các bộ điểu khiển AVR cỡ lớn đều có khả năng kết nối với bộ nhở SRAM ở bên ngoài Khả năng này được minh hoạ trên hình 1.9 Để cho phép truy nhập bộ nhớ SRAM ngoài trên PORTA và PORTC của các bộ điều khiển cũng như tín hiệu ALE dùng cho việc phân kênh (demultiplexung) địa chỉ/ dữ liệu, bit SRE( bit 7) trong thanh ghi MCUCR được đặt thành “1” Thời gian truy nhập mặc định đối với quá trình truy nhập lên SRAM ngoài là bằng 3 chu kỳ đồng hồ Thời gian này có thể làm tăng lên 4 chu kỳ đồng hồ bằng cách thiết lập bit SRW (bit 6) trong thanh ghi MCUCR Hình 1.10 minh hoạ sự truy nhập 3 chu kỳ thông thường, còn hình 1.11 minh hoạ chu trình truy nhập mở rộng với một trạng thái chờ bổ sung thêm
Hình 1.9: Kết nối bộ nhớ SRAM ngoài với bộ điều khiển AVR
1.2.5 Bộ định thời
Bộ định thời trong vi điều khiển AVR có chức năng giống như một bộ định thời hoặc một bộ đếm Giống như một bộ định thời, tín hiệu giữ nhịp bên trong hoặc một dẫn xuất của tín hiệu giữ nhịp đó được sử dụng để giữ nhịp bộ định thời, trong khi giống như một bộ đếm, một tín hiệu từ bên ngoài từ chân của một cổng được sử dụng để giữ nhịp bộ định thời / bộ đếm Hình 1.11 minh hoạ bộ dồn kênh
Trang 36(multiplexer) đóng vai trò lực chọn một trong nhiều nguồn tín hiệu đồng hồ dùng cho bộ timer/counter Bộ chia tần số dùng cho cả hệ thống timer/counter0 và timer/counter1 được minh hoạ trên hình 1.12
Hình 1.10: Chu trình truy nhập SRAM ngoài và bộ điều khiển AVR không có các
Trang 37Cờ trạng thái tràn (overflow) được tìm thấy trong thanh ghi cờ ngắt bộ timer/counter TIFR Các tín hiệu điều khiển được tìm thấy trong thanh ghi điều khiển bộ time/counter0 TCCR0
Hình 1.12: Một mạch chia tần số đồng hồ dùng cho Timer0 cũng như Timer1
Việc đặt cho phép cấm ngắt đối với Timer/Counter1 được tìm thấy trong thanh ghi che ngắt Timer/Counter TIMSK Khi Timer/Counter1 đượ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ố của bộ dao động của CPU
Để đảm bảo lấy mẫu chính xác đối với tín hiệu giữ nhịp bên ngoài, thời gian cực tiểu giữa 2 lần xảy ra sự chuyển mức tin hiệu đồng hồ ngoài ít nhất cũng phải bằng một 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 (dốc lên ) 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 dộ chính xác cao và luôn ưu tiên số chia tần số thấp hơn (xem hình 1.13)
Trang 38Hình 1.13: Sơ đồ khối của Timer/counter0
1.2.6 Bộ truyền nhận UART
Hình 1.14 minh hoạ sơ đồ khối truyền của bộ truyền nhận UART Việc truyền
dữ liệu được khởi tạo bằng cách ghi dữ liệu vào thanh ghi, dữ liệu I/O, ký hiệu là UDR Dữ liệu được truyền từ UDR đến thanh ghi dịch truyền
Hình 1.14: Sơ đồ khối của bộ Timer/Counter1
Trang 39- Một ký tự mới đã được ghi vào UDR sau khi Bit stop (bit dừng) từ ký tự trước đó đã được dịch chuyển ra Thanh ghi dịch chuyển ra được nạp ngay lập tức
- Một ký tự mới đã được ghi vào UDR trước ghi Bit stop từ ký tự trước đã được dịch đi Thanh ghi dịch được nạp khi Bit stop của ký tự đang được truyền đã được dịch chuyển ra
Nếu thanh ghi dịch bộ truyền 10 (11) bit đang trống thì dữ liệu được truyền từ UDR đến thanh ghi dịch Ở thời điểm này bit UDRE (UART data register empty) trong thanh ghi trạng thái UART, USR được đặt Khí bit này đặt thành 1 bộ UART sẵn sàng nhận ký tự tiếp theo Vào cùng một thời điểm, khi dữ liệu được truyền từ UDR đến thanh ghi dịch bộ truyền 10 (11) Bit, Bit 0 của thanh ghi dịch bị xoá (start bit) và bit 9 hoặc 10 được đặt (stop bit)
Hình 1.15: Sơ đồ khối của bộ truyền trên UART
Trang 40Nếu như một từ dữ liệu 9 bit được lựa chọn (bit CHR9 trong thanh ghi điều khiển UART, UCR được đặt), bit TXB8 trong thanh ghi UCR được truyền vào bit 9 trong thanh ghi dịch bộ truyền Theo nhịp của đồng hồ tốc độ baud sẽ diễn ra cuộc truyền đến thanh ghi dịch, bit start bị dịch chuyển ra thanh TXD Sau đó kế tiếp là
dữ liệu, LSB trước tiên Khi bit stop đã được dịch chuyển ra, thanh ghi dịch được nạp nếu bất kỹ dữ liệu nào đã được ghi vào thanh ghi UDR trong khoảng thời gian truyền Trong thời gian nạp bit UDRE được đặt thành 1 Nếu như không có dữ liệu mới trong thanh ghi UDR để truyền đi khi bit stop được dịch chuyển ra, cờ UDRE
sẽ giữ nguyên trạng thái được đặt cho đến khi thanh ghi UDR được ghi một lần nữa
Hình 1.16: Sơ đồ khối của bộ nhận UART