3.5.1 ĐỌC THÔNG QUA UART
Khi CPU đọc dữ liệu của một cảm biến nào đó, nó sẽ gửi yêu cầu đọc (R) kèm theo địa chỉ thiết bị, thanh ghi tƣơng ứng. Những dữ liệu này sẽ đƣợc đóng gói lại và truyền vào gói tin gửi từ bo mạch chủ xuống.
82
Phía FPGA sau khi nhận đƣợc gói tin mà không có lỗi gì nó sẽ dựa vào địa chỉ mà CPU muốn truy cập ánh xạ vào bảng địa chỉ ngoại vi, sau đó nó sẽ đọc dữ liệu từ cảm biến ở địa chỉ đã đƣợc ánh xạ.
Sau khi đọc xong, dữ liệu từ cảm biến sẽ đƣợc đóng gói và truyền vào gói tin gửi từ FPGA lên bo mạch chủ.
3.5.2 GHI THÔNG QUA UART
Khi CPU muốn ghi dữ liệu xuống một cảm biến nào đó, nó sẽ gửi yêu cầu ghi (W) kèm theo địa chỉ thiết bị, thanh ghi tƣơng ứng và dữ liệu muốn ghi. Tất cả những dữ liệu này sẽ đƣợc đóng gói và truyền vào gói tin gửi từ bo mạch chủ xuống.
Phía FPGA sau khi nhận đƣợc gói tin mà không có lỗi gì nó sẽ dựa vào địa chỉ mà CPU muốn truy cập ánh xạ vào bảng địa chỉ ngoại vi, sau đó nó sẽ gửi dữ liệu đến địa chỉ đã đƣợc ánh xạ.
3.5 BẢNG ĐỊA CHỈ THIẾT BỊ VÀ THANH GHI NGƢỜI DÙNG
CPU truy cập vào các cảm biến thông qua tập thanh ghi ngƣời dùng. Việc này đƣợc thực hiện nhờ việc quy định rõ địa chỉ thiết bị và thanh ghi ngƣời dùng. Nội dung bên trong các thanh ghi này đƣợc quy định chính là các dữ liệu: dữ liệu về chuyển động, điều khiển led, buzzer, dữ liệu nhiệt độ, độ ẩm, dữ liệu các kênh ADC, dữ liệu về trạng thái kết nối của thiết bị.
Bảng 3-4 Bảng địa chỉ thiết bị và thanh ghi ngƣời dùng
Địa chỉ thiết bị Địa chỉ thanh ghi ngƣời dùng 16 BIT R/W Thiết bị ngoại vi Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0x01 0x01 x x x x x x x x x x x x x x x Motion detect data R AMN41122 0x02 0x01 x x x x x x x x x x x x Le d1 Le d2 Le d3 Buzzer W Led&Buzzer 0x04 0x01 x x x x opt ion opti on opt ion opt ion Humidity data R STH25
83 0x02 x x opti on opti on opt ion Temperature data R 0x04 x x x x x x x x Command data W
0x08 x x x x x x x x User register data R/W
0x10 x x x x x x x x x x x x x x x x W
0x08 Byte contr ol
ADC data out R ADC
ADS8341EB
0x10 Byte contr ol
ADC data out R ADC
ADS8344EB 0x40 0x01 x x x x x x x x x x x x x IR ON /OF F MI C ON /OF F CD S ON /OF F R/W Thanh ghi trạng thái 0x02 x x x x x x x x x x x x x Do n‟t mat ch che cks um Sth 25 con nec tion M ma 745 5l con nec tion R
x: giá trị không cần quan tâm.
Địa chỉ thanh ghi ngƣời dùng cũng có thể là Byte control {S, A2, A1, A0, x, SGL/DIF, PD1, PD0} của thiết bị ADC.
Thanh ghi số 0 (0x01, 0x01): chứa dữ liệu lấy mẫu của cảm biến chuyển động AMN41122. Giá trị „1‟ đọc đƣợc tức là cảm biến dò thấy vật chuyển động, giá trị „0‟ đọc đƣợc tức là cảm biến không phát hiện thấy vật chuyển động.
Thanh ghi số 1 (0x02, 0x01): chứa dữ liệu điều khiển led và buzzer. Ghi giá trị „1‟ vào led sẽ sáng và ngƣợc lại.
Thanh ghi số 2 (0x04, 0x01): chứa dữ liệu độ ẩm đọc đƣợc từ cảm biến. Thanh ghi số 3 (0x04, 0x02): chứa dữ liệu nhiệt độ đọc đƣợc từ cảm biến. Thanh ghi số 4 (0x04, 0x04): chứa các lệnh cho cảm biến nhiệt độ & độ ẩm.
Thanh ghi số 5 (0x04, 0x10): thanh ghi đƣợc sử dụng để reset cảm biến nhiệt độ & độ ẩm. Sau khi thanh ghi này đƣợc ghi vào thì cảm biến sẽ đƣợc reset.
84
Thanh ghi số 6 (0x08): thanh ghi đƣợc sử dụng để chứa dữ liệu đọc đƣợc từ ADC. Thanh ghi số 7 (0x10): thanh ghi đƣợc sử dụng để chứa dữ liệu đọc đƣợc từ ADC. Thanh ghi số 8 (0x40, 0x01): điều khiển việc tắt/bật các cảm biến. Ghi giá trị „1‟ sẽ
bật các cảm biến, ghi giá trị „0‟ sẽ tắt. Đọc thanh ghi này sẽ trả lại trạng thái bật/tắt của các cảm biến này.
Thanh ghi số 9 (0x40, 0x02): thể hiện trạng thái kết nối tới các cảm biến. Khi CPU đọc dữ liệu từ các cảm biến sau khoảng thời gian quy định mà chƣa nhận đƣợc dữ liệu nhƣ mong muốn thì có thể kiểm tra trạng thái kết nối để biết chuyện gì xảy ra.
3.6 PHƢƠNG THỨC GIẢI MÃ ĐỊA CHỈ THANH GHI/THIẾT BỊ
Địa chỉ thanh ghi/thiết bị đƣợc quy định sao cho việc giải mã các địa chỉ này là dễ dàng nhất để tiết kiệm tài nguyên cho FPGA. Địa chỉ mỗi một thanh ghi/thiết bị đƣợc quy định bởi 1 bit trong địa chỉ mà CPU gửi xuống cụ thể nhƣ sau:
Bảng 3-5 Phƣơng thức giải mã địa chỉ thanh ghi/thiết bị # User/device
address
Nội dung Phƣơng thức giải mã
7 6 5 4 3 2 1 0
0 0x01 0 0 0 0 0 0 0 1 Nếu bit 0 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 0 đƣợc truy cập.
1 0x02 0 0 0 0 0 0 1 0 Nếu bit 1 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 1 đƣợc truy cập.
2 0x04 0 0 0 0 0 1 0 0 Nếu bit 2 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 2 đƣợc truy cập.
3 0x08 0 0 0 0 1 0 0 0 Nếu bit 3 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 3 đƣợc truy cập.
4 0x10 0 0 0 1 0 0 0 0 Nếu bit 4 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 4 đƣợc truy cập.
5 0x20 0 0 1 0 0 0 0 0 Nếu bit 5 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 5 đƣợc truy cập.
6 0x40 0 1 0 0 0 0 0 0 Nếu bit 6 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 6 đƣợc truy cập.
7 0x80 1 0 0 0 0 0 0 0 Nếu bit 7 có giá trị 1 nó thể hiện thanh ghi/thiết bị số 7 đƣợc truy cập.
85
3.7 PHƢƠNG THỨC KIỂM SOÁT LỖI
Kiểm tra kết nối của mỗi cảm biến đƣợc kết nối thông qua bus I2C. Khi kết nối tới các cảm biến xảy ra lỗi bit trạng thái trên thanh ghi trạng thái sẽ đƣợc thiết lập tƣơng ứng với cảm biến xảy ra lỗi.
Sử dụng checksum để kiểm tra lỗi truyền của các gói tin. Khi gói tin nhận đƣợc từ UART một giá trị checksum mới sẽ đƣợc tính toán và so sánh với giá trị checksum đã có trong gói tin. Nếu hai giá trị checksum này không khớp với nhau thì sẽ phát sinh lỗi đƣợc lƣu vào thanh ghi trạng thái.
New checksum = byte count + địa chỉ đọc/ghi + dữ liệu
Khi lỗi xảy ra FPGA sẽ trở về trạng thái đợi một gói tin mới từ CPU.
3.8 CHƢƠNG TRÌNH CHẠY TRÊN BO MẠCH CHỦ 3.8.1 MÔ TẢ CHỨC NĂNG 3.8.1 MÔ TẢ CHỨC NĂNG
Chọn „1‟: chức năng này đƣợc thực hiện để reset FPGA, nó cần thiết đƣợc thực hiện trƣớc khi chạy bất kỳ chƣơng trình test nào.
Chọn „2‟: thực hiện chƣơng trình nháy led. Chọn „3‟: chƣơng trình dò chuyển động. Chọn „4‟: chƣơng trình đo nhiệt độ & độ ẩm.
86
Chọn „5‟: chƣơng trình lấy dữ liệu ADC ADS8341EB. Chọn „6‟: chƣơng trình lấy dữ liệu ADC ADS8344EB. Chọn „7‟: chƣơng trình lấy dữ liệu cảm biến gia tốc. Chọn „8‟: chƣơng trình kiểm tra thanh ghi điều khiển. Chọn „9‟: chƣơng trình kiểm tra thanh ghi trạng thái. Chọn „q‟: thoát khỏi chƣơng trình
3.8.2 RESET FPGA
Khi tiến hành reset FPGA thì toàn bộ máy trạng thái của hệ thống quay trở về trạng thái chờ (IDLE), trạng thái này là trạng thái đợi lệnh đọc/ghi từ bo mạch chủ.
3.8.3 CHƢƠNG TRÌNH NHÁY LED & BUZZER
Chƣơng trình thực hiện điều khiển nháy 3 led vàng, đỏ, xanh, đồng thời thêm cả tính năng điều khiển buzzer trên bo mạch FPGA. Chƣơng trình này bao gồm 4 bƣớc:
87 Chọn 1: thực hiện chƣơng trình nháy led.
Chọn 2: bật buzzer
88
3.8.4 CHƢƠNG TRÌNH DÒ CHUYỂN ĐỘNG
Chƣơng trình này kiểm tra khả năng hoạt động của cảm biến dò chuyển động trên bo mạch FPGA. Khi cảm biến đang ở chế độ dò chuyển động, chúng ta sẽ đi lại liên tục trong vùng hoạt động của cảm biến. Quan sát trên màn hình hiển thị kết quả để biết đang có vật thể chuyển động hay không. Chƣơng trình này gồm 4 bƣớc:
Chọn 1: bật thiết bị, thực hiện việc này trƣớc khi chọn 3 là chƣơng trình dò chuyển động
89
Chọn 2: tắt thiết bị, thực hiện việc này khi thoát khỏi chƣơng trình
Chọn 3: chƣơng trình dò chuyển động. Nếu cảm biến phát hiện chuyển động của
ngƣời hoặc vật, chƣơng trình sẽ hiển thị “Object moved !”. Còn nếu cảm biến không phát hiện bất kỳ chuyển động nào chƣơng trình sẽ hiển thị “Object no moved !”.
90
3.8.5 CHƢƠNG TRÌNH ĐO NHIỆT ĐỘ & ĐỘ ẨM
Chƣơng trình này cho phép hiển thị nhiệt độ, độ ẩm đọc đƣợc từ cảm biến và kiểm tra khả năng hoạt động của bộ giao tiếp I2C đã đƣợc tích hợp trên FPGA. Chọn chế độ đo nhiệt độ hoặc độ ẩm và tiến hành đo đạc thông số rồi so sánh với các giá trị tham chiếu từ nhiệt kế và ẩm kế để đánh giá độ chính xác. Chƣơng trình này bao gồm 6 bƣớc:
91 Chọn 1: reset cảm biến
92 Chọn 3: đọc lại dữ liệu thanh ghi ngƣời dùng
Chọn 4: đọc dữ liệu độ ảm từ cảm biến
Chọn 5: đọc dữ liệu nhiệt độ từ cảm biến
93
3.8.6 CHƢƠNG TRÌNH LẤY DỮ LIỆU ADC ADS8341EB
Chƣơng trình này cho phép lấy mẫu dữ liệu âm thanh và ánh sáng trên kênh 0 và kênh 1 của bộ ADC. Đồng thời kiểm tra khả năng hoạt động của bộ giao tiếp SPI đã đƣợc thiết kế trên FPGA. Để lấy mẫu dữ liệu âm thanh ta chọn chế độ lấy mẫu dữ liệu kênh 0 sau đó đặt nguồn phát âm thanh nhƣ máy nghe nhạc gần micro trên bo mạch FPGA và quan sát giá trị lấy mẫu thay đổi trên màn hình. Để lấy mẫu dữ liệu về ánh sáng ta chọn chế độ lấy mẫu dữ liệu kênh 1 sau đó dùng nguồn sáng chiếu vào cảm biến quang và quan sát giá trị lấy mẫu thay đổi trên màn hình. Chƣơng trình này gồm 7 bƣớc nhƣ sau:
Chọn 1: bật mic và quang trở trƣớc khi lựa chọn 3,4
94 Chọn 3: đọc dữ liệu mic từ kênh 0 của ADC
95
Chọn 4: đọc dữ liệu của quang trở từ kênh 1 của ADC
Chọn 5,6: 2 kênh này chƣa sử dụng vào mục đích gì. Chọn 7: thoát chƣơng trình
3.8.7 CHƢƠNG TRÌNH LẤY DỮ LIỆU ADC ADS8344EB
Chƣơng trình này cho phép kiểm tra các giá trị điện áp, dòng điện trong bo mạch FPGA trên kênh 0, 1, 2, 3, 4, 5, 6 của bộ ADC. Đồng thời kiểm tra khả năng hoạt động của bộ giao tiếp SPI đã đƣợc thiết kế. Để lấy mẫu chúng ta có thể chọn 1 trong 7 kênh trên rồi quan sát giá trị lấy mẫu sẽ đƣợc hiển thị trên màn hình và so sánh với giá trị tham chiếu. Chƣơng trình này gồm 9 bƣớc:
96
Chọn 1: đọc giá trị điện áp BATT đƣợc lấy mẫu từ kênh 0
Chọn 2: đọc giá trị điện áp VIN CURRENT đƣợc lấy mẫu từ kênh 1
97
Chọn 4: đọc giá trị điện áp 3V3 CURRENT đƣợc lấy mẫu từ kênh 3
Chọn 5: đọc giá trị điện áp SN CURRENT đƣợc lấy mẫu từ kênh 4
98
Chọn 7: đọc giá trị điện áp CFG CURRENT đƣợc lấy mẫu trên kênh 6
Chọn 8: kênh 7 chƣa đƣợc sử dụng vào mục đích gì Chọn 9: thoát chƣơng trình
3.8.8 CHƢƠNG TRÌNH LẤY DỮ LIỆU CẢM BIẾN GIA TỐC
Chƣơng trình này cho phép hiển thị tọa độ 3 trục x, y, z của thiết bị đồng thời kiểm tra khả năng hoạt động của bộ giao tiếp I2C đã đƣợc thiết kế. Để tiến hành kiểm tra trƣớc hết chúng ta phải tiến hành hiệu chỉnh tham số (calibrate). Sau đó chúng ta xoay thiết bị đến các vị trí có tọa độ mà ta đã biết trƣớc rồi tiến hành đọc tọa độ x, y, z để so sánh. Chƣơng trình này gồm 3 bƣớc:
99
Chọn 1: hiệu chỉnh tham số cảm biến trƣớc khi đo đạc
Chọn 2: đọc thông số tọa độ X, Y, Z từ cảm biến
100
3.8.9 CHƢƠNG TRÌNH KIỂM TRA THANH GHI ĐIỀU KHIỂN
Chƣơng trình này kiểm tra thanh ghi điều khiển thông qua việc bật/tắt các thiết bị nhƣ cảm biến dò chuyển động, cảm biến âm thanh, cảm biến ánh sáng. Để thực hiện việc kiểm tra ta chọn chế độ ghi và ghi giá trị „1‟ để bật và „0‟ để tắt vào bit tƣơng ứng với cảm biến trong thanh ghi điều khiển. Sau đó ta có thể đọc lại giá trị của thanh ghi này để kiểm tra xem việc ghi đã chính xác chƣa. Chƣơng trình này gồm 3 bƣớc:
Chọn 1: ghi dữ liệu vào thanh ghi điều khiển
101 Chọn 3: thoát chƣơng trình
3.8.10 CHƢƠNG TRÌNH KIỂM TRA THANH GHI TRẠNG THÁI
Chƣơng trình này cho phép đọc giá trị của thanh ghi trạng thái để kiểm tra trạng thái kết nối của thiết bị trong bo mạch FPGA. Nếu giá trị trả về là “0000” tức là trạng thái kết nối trong mạch tốt. Nếu giá trị trả về khác “0000” tức là kết nối trong mạch lúc đó bị lỗi.
3.9 KẾT QUẢ ĐO ĐẠC THỰC TẾ
Lần đo
Kết quả đo đạc đƣợc Giá trị tham chiếu Sai số của phép đo
Đo đạc nhiệt độ từ cảm biến nhiệt độ/độ ẩm(o C) 1 29,3 29,0 1% 2 29,6 29,0 2% 3 29,5 29,0 1,7% 4 29,4 29,0 1,3% 5 29,6 29,0 2% 6 29,5 29,0 1,7% 7 29,2 29,0 0,7%
102
8 29,4 29,0 1,3%
9 29,3 29,0 1,03%
10 29,3 29,0 1,03%
Đo đạc độ ẩm từ cảm biến nhiệt độ/độ ẩm (%)
1 56,3 56,0 0,5% 2 56,7 56,0 1,25% 3 56,6 56,0 1,1% 4 56,8 56,0 1,4% 5 56,7 56,0 1,25% 6 56,9 56,0 1,6% 7 56,4 56,0 0,7% 8 56,3 56,0 0,5% 9 56,5 56,0 0,9% 10 56,8 56,0 1,4%
Đo đạc tọa độ thiết bị x,y,z
1 X=0, Y=0, Z=3F X=0, Y=0, Z=3F 0% 2 X=0, Y=0, Z=40 X=0, Y=0, Z=3F 0,4% 3 X=0, Y=1, Z=3F X=0, Y=0, Z=3F 0,4% 4 X=0, Y=0, Z=41 X=0, Y=0, Z=3F 0,8% 5 X=0, Y=0, Z=40 X=0, Y=0, Z=3F 0,4% 6 X=0, Y=1, Z=40 X=0, Y=0, Z=3F 0,4% 7 X=0, Y=1, Z=3F X=0, Y=0, Z=3F 0,4%
103
8 X=0, Y=0, Z=41 X=0, Y=0, Z=3F 0,8%
9 X=0, Y=1, Z=3F X=0, Y=0, Z=3F 0,4%
10 X=0, Y=0, Z=40 X=0, Y=0, Z=3F 0,4%
Đo đạc các giá trị điện áp(V)
1 3,26 3,3 1,2% 2 3,24 3,3 1,8% 3 3,25 3,3 1,5% 4 3,28 3,3 0,6% 5 3,29 3,3 0,3% 6 3,27 3,3 0,9% 7 3,26 3,3 1,2% 8 3,28 3,3 0,6% 9 3,25 3,3 1,5% 10 3,29 3,3 0,3% 3.10 KẾT LUẬN
Từ những nhiệm vụ đặt ra ở đầu Chƣơng 3 tác giả đã tiến hành tích hợp đƣợc các bộ giao tiếp SPI, UART, I2C trên phần thiết kế FPGA và đã xây dựng đƣợc chƣơng trình demo trên bo mạch chủ Armadillo, cụ thể nhƣ sau:
Phần thiết kế trên FPGA:
Tác giả đã đƣa ra đƣợc các cách thức đánh địa chỉ và giải mã địa chỉ cho thiết bị và tập thanh ghi đƣợc sử dụng để cho phép bo mạch chủ có thể truy nhập vào từng thiết bị để đọc/ghi dữ liệu. Việc đọc/ghi dữ liệu vào các cảm biến sẽ đƣợc điều khiển thông qua tập thanh ghi, nội dung bên trong các thanh ghi này đã đƣợc xác định rõ. Tác giả đã
104
xây dựng định dạng gói tin cho việc truyền/nhận dữ liệu giữa FPGA và Armadillo