Thực hành hệ thống nhúng
2.1. Quy định chung: Báo cáo thực hành được viết một mặt trên khổ giấy A4, đóng quyển, bìa mềm (theo mẫu .). Mỗi sinh viên có một quyển báo cáo riêng.
Bạn đang xem trước 20 trang tài liệu Thực hành hệ thống nhúng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
c, chất hóa học đặc biệt...
1.3.2. Nội dung bài thực hành:
- Làm quen phần mềm PIC C Compile, Proteus
- Thiết kế phần cứng hệ thống nhúng trên Proteus, đáp ứng bài toán Giao tiếp thiết bị ngoại
vi cơ bản: LCD, mạch tương tự (lấy tín hiệu ADC).
- Tạo một project mới trên CCS
- Lập trình phần mềm nhúng, đáp ứng được bài toán.
- Nạp vào mạch thật
- Kiểm tra hoạt động và đánh giá kết quả
1.3.3. Phương pháp và cách thức thực hành:
1. Giới thiệu thiết bị và dụng cụ thực hành
2. Phân nhóm thực hành
3. Sơ đồ hay cách thức tiến hành TN
Thiết kế phần cứng hệ thống nhúng trên môi trường mô phỏng Proteus:
M+
R4
1k
+88.8
Q1
TIP31
Q2
TIP32
Q3
2SC2547
Q4
2SC2547
Q5
TIP31
Q6
TIP32
Q7
2SC2547
Q8
2SC2547
R1
1k
R2
1k
R3
1k
+12V
VCC
R6
10K
R8
10K
INC DEC KB1
KB2
KB1 KB2
A
B
C
D
PWM
DIR
M+
MCLR/VPP
1
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA3/AN3/VREF+
5
RA4/T0CKI
6
RA5/AN4/SS/LVDIN
7
RE0/RD/AN5
8
RE1/WR/AN6
9
RE2/CS/AN7
10
OSC1/CLKI
13
RA6/OSC2/CLKO
14
RC0/T1OSO/T1CKI
15
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RD2/PSP2
21
RD3/PSP3
22
RD4/PSP4
27
RD5/PSP5
28
RD6/PSP6
29
RD7/PSP7
30
RC4/SDI/SDA
23
RC5/SDO
24
RC6/TX/CK
25
RC7/RX/DT
26
RB0/INT0
33
RB1/INT1
34
RB2/INT2
35
RB3/CCP2B
36
RB4
37
RB5/PGM
38
RB6/PGC
39
RB7/PGD
40
RC1/T1OSI/CCP2A
16
U1
PIC18F452
Hình 2. Phần cứng hệ thống nhúng.
4. Trình tự tiến hành thực hành
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
14
Lựa chọn các linh kiện từ panel Libraries và đưa vào sơ đồ theo bảng sau:
Ký hiệu Tên linh kiện Giải thích Số lượng
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC18F452 Vi điều khiển 1
Q1
TIP41
Q2
TIP42
TIP41
TIP42
Tranzitor 8
5. Tạo Dự án nhúng:
o Viết mã nguồn như sau:
#include "ADC_LCD_Moto control.h"
#define use_portb_lcd TRUE
#include
#define Forward_pin PIN_D0
#define Backward PIN_D1
void main()
{
int16 AD;
int8 k;
const int16 Tmax=1024;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
15
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
set_tris_d(0);output_d(0);
while(1){
output_hight(PIN_D6); output_low(PIN_D6);
delay_ms(100);
}
}
Nạp vào Mạch mô phỏng, kiểm tra kết quả.
Nạp vào mạch thật, kiểm chứng kết quả có trùng khớp với mình mong muốn
hay không.
1.4. Ghi chép số liệu, kết quả thực hành
1.5. Chuẩn bị của sinh viên:
- Đọc và nghiên cứu bài thực hành
- Đọc và nghiên cứu lý thuyết có liên quan đến nội dung bài thực hành
- Chuẩn bị các vật dụng, giấy vở ghi chép số liệu thực hành
- Mạch máy tính nhúng, phần lập trình nhúng.
- Sự chuẩn bị của sinh viên phải được thông qua kiểm tra của người hướng dẫn thực
hành. Nếu không đạt, sẽ không được tham gia thực hành và có được thực hành tiếp
vào buổi khác hay không sẽ do Bộ môn và Ban chủ nhiệm khoa giải quyết.
Phần II. VIẾT BÁO CÁO THỰC HÀNH
2.1. Quy định chung:
Báo cáo thực hành được viết một mặt trên khổ giấy A4, đóng quyển, bìa mềm
(theo mẫu .........). Mỗi sinh viên có một quyển báo cáo riêng.
2.2. Nội dung báo cáo:
2.2.1. Cơ sở lý thuyết
Phân tích cơ sở lý thuyết như mục 1.2.
2.2.2. Báo cáo kết quả thực hành
- Mỗi sinh viên (nhóm sinh viên) thiết kế 01 mạch (sơ đồ nguyên lý, phần lập
trình nhúng) ngẫu nhiên đã được chuẩn bị trước ở mục 1.4, trên phần mềm
Proteus và PICC Compile.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
16
- Tổng hợp những kết quả chính cho nội dung báo cáo
- Phân tích sơ đồ nguyên lý, mã lệnh
- Lập bảng trạng thái đầu vào, đầu ra (nếu có)
- Nhận xét kết quả:
+ Các kết quả thu được từ thực hành
+ So sánh kết quả thực hành với lý thuyết
+ Mức độ kết quả đạt được so với yêu cầu đề ra
+ Đánh giá các sai số của dụng cụ, thiết bị thực hành, người thao tác...
- Kiến nghị.
Phần III. ĐÁNH GIÁ CHẤM ĐIỂM, BẢO VỆ THỰC HÀNH
Bộ môn hay tập thể hướng dẫn thực hành tổ chức đánh giá điểm thực hành thông
qua lựa chọn một trong những hình thức sau:
- Chấm điểm dựa trên nội dung bản báo cáo thực hành của từng sinh viên
- Chấm điểm theo hình thức bảo vệ vấn đáp.
Điểm thực hành của sinh viên được tổng hợp theo lớp có chữ ký xác nhận Trưởng bộ môn
chuyên môn.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
17
Biên soạn: Th.S Nguyễn Tuấn Anh
QUY TRÌNH THỰC HIỆN BÀI THỰC HÀNH
MÔN HỆ THỐNG NHÚNG
BÀI 3.
QUANG BÁO SỬ DỤNG LED MATRẬN 8X8
CHƯƠNG TRÌNH ĐÀO TẠO ĐẠI HỌC THEO HỆ THỐNG TÍN CHỈ
(HỆ 150 TC)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
18
Phần I. THỰC HÀNH
1.1. Mục đích thực hành:
- Giúp sinh viên củng cố các kiến thức về thiết kế và lập trình cho hệ vi điều khiển (trên nền
PIC) đồng thời tiếp cận với một môi trường thiết kế tích hợp chuyên nghiệp là phần mềm
PIC C Compile và phần mềm mô phỏng Proteus.
- Quang báo sử dụng LED matrận 8x8, cho phép lập trình chữ chạy trên 4 led8x8.
- Giúp Sinh viên chuyển đổi tư duy từ kiến thức lý thuyết đến tiếp cận với kiến thức thực tế.
- Giúp cho SV hiểu rõ được thực hành là một bộ phận công việc của người làm công tác
khoa học kỹ thuật.
1.2. Cơ sở lý thuyết:
Hệ thống nhúng là một hệ thống tích hợp cả phần cứng và phần mềm nhúng. Phần cứng là
hệ thống vi điều khiển PIC và thiết bị ngoại vi. Phần mềm nhúng dùng ngôn ngữ C, biên dịch
trên nền PIC C compile.
Trong bài này, chúng ta thiết kế phần mềm nhúng, dựa trên nền phần cứng nhúng đã có,
theo sơ đồ khối sau đây:
Bộ điều khiển
trung tâm
LED ma trận
Trong đó:
Bảng LED ma trận 8x8, hiển thị nội dung lập trình sẵn.
Bộ điều khiển trung tâm, là phần quan trọng nhất của hệ thống; là nơi phần mềm
nhúng vào, thể hiện thuật toán của chúng ta.
Để thực hiện tốt bài thực hành, chúng ta cần chuẩn bị trước các kiến thức cơ bản sau đây:
Cấu trúc máy tính nhúng, vi điều khiển, mạch logic cơ bản, mạch khuếch đại,
mạch lọc, LCD, cảm biến, ADC,...
Ngôn ngữ lập trình C cho PIC (CCS C). Các kiến thức về tập lệnh, cấu trúc rẽ
nhánh, vòng lặp, khai báo chương trình con, biến, hằng, mảng,...
1.3. Thực hành:
1.3.1. Nội quy an toàn thực hành:
- Người thực hiện thực hành kể cả Hướng dẫn viên và sinh viên đề phải nắm
vững các nội quy an toàn do phòng thực hành quy định, thông qua việc học nội quy có
kiểm tra sát hạch.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
19
- Các thiết bị thực hành chịu sự kiểm soát an toàn theo phân cấp của nhà nước
phải đảm bảo có đầy đủ biên bản kiểm định an toàn của cấp có thẩm quyền. Ví dụ:
Thiết bị điện cao thế (trên 1 kV), các thiết bị áp lực, chất hóa học đặc biệt...
1.3.2. Nội dung bài thực hành:
- Làm quen phần mềm PIC C Compile, Proteus
- Thiết kế phần cứng hệ thống nhúng trên Proteus, đáp ứng bài toán
- Tạo một project mới trên CCS
- Lập trình phần mềm nhúng, đáp ứng được bài toán.
- Nạp vào mạch thật
- Kiểm tra hoạt động và đánh giá kết quả
1.3.3. Phương pháp và cách thức thực hành:
1. Giới thiệu thiết bị và dụng cụ thực hành
2. Phân nhóm thực hành
3. Sơ đồ hay cách thức tiến hành TN
Thiết kế phần cứng hệ thống nhúng trên môi trường mô phỏng Proteus:
H
1
H
2
H
3
H
4
H
5
H
6
H
7
H
8
C
1
C
2
C
3
C
4
C
5
C
6
C
7
C
8
H
1
H
2
H
3
H
4
H
5
H
6
H
7
H
8
C
9
C
1
0
C
1
1
C
1
2
C
1
3
C
1
4
C
1
5
C
1
6
H
1
H
2
H
3
H
4
H
5
H
6
H
7
H
8
C
1
7
C
1
8
C
1
9
C
2
0
C
2
1
C
2
2
C
2
3
C
2
4
H
1
H
2
H
3
H
4
H
5
H
6
H
7
H
8
C
2
5
C
2
6
C
2
7
C
2
8
C
2
9
C
3
0
C
3
1
C
3
2
MCLR/VPP
1
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA3/AN3/VREF+
5
RA4/T0CKI
6
RA5/AN4/SS/LVDIN
7
RE0/RD/AN5
8
RE1/WR/AN6
9
RE2/CS/AN7
10
OSC1/CLKI
13
RA6/OSC2/CLKO
14
RC0/T1OSO/T1CKI
15
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RD2/PSP2
21
RD3/PSP3
22
RD4/PSP4
27
RD5/PSP5
28
RD6/PSP6
29
RD7/PSP7
30
RC4/SDI/SDA
23
RC5/SDO
24
RC6/TX/CK
25
RC7/RX/DT
26
RB0/INT0
33
RB1/INT1
34
RB2/INT2
35
RB3/CCP2B
36
RB4
37
RB5/PGM
38
RB6/PGC
39
RB7/PGD
40
RC1/T1OSI/CCP2A
16
U1
PIC18F452
H1
H2
H3
H4
H5
H6
H7
H8
A
2
B
3
C
2
1
D
2
2
IN
H
2
3
S
T
B
1
Q
0
1
1
Q
1
9
Q
2
1
0
Q
3
8
Q
4
7
Q
5
6
Q
6
5
Q
7
4
Q
8
1
8
Q
9
1
7
Q
1
0
2
0
Q
1
1
1
9
Q
1
2
1
4
Q
1
3
1
3
Q
1
4
1
6
Q
1
5
1
5
U2
4514
A
2
B
3
C
2
1
D
2
2
IN
H
2
3
S
T
B
1
Q
0
1
1
Q
1
9
Q
2
1
0
Q
3
8
Q
4
7
Q
5
6
Q
6
5
Q
7
4
Q
8
1
8
Q
9
1
7
Q
1
0
2
0
Q
1
1
1
9
Q
1
2
1
4
Q
1
3
1
3
Q
1
4
1
6
Q
1
5
1
5
U3
4514
A B C D
IN
H
1 A B C D
IN
H
2
A
B
C
D
INH1
INH2
C
1
C
2
C
3
C
4
C
5
C
6
C
7
C
8
C
9
C
10
C
11
C
12
C
13
C
14
C
15
C
16
C
17
C
18
C
19
C
20
C
21
C
22
C
23
C
24
C
25
C
26
C
27
C
28
C
29
C
30
C
31
C
32
Hình 3. Phần cứng hệ thống nhúng.
4. Trình tự tiến hành thực hành
Lựa chọn các linh kiện từ panel Libraries và đưa vào sơ đồ theo bảng sau:
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
20
Ký hiệu Tên linh kiện Giải thích Số lượng
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC18F452 Vi điều khiển 1
LED MATRIX LED am trận 4
A
2
B
3
C
21
D
22
IN
H
23
S
T
B
1
Q
0
11
Q
1
9
Q
2
10
Q
3
8
Q
4
7
Q
5
6
Q
6
5
Q
7
4
Q
8
18
Q
9
17
Q
1
0
20
Q
1
1
19
Q
1
2
14
Q
1
3
13
Q
1
4
16
Q
1
5
15
U2
4514
4514 Bộ giải mã 4
5. Tạo Dự án nhúng:
o Viết mã nguồn như sau:
const char Nmax=10;
const char mf[Nmax]={0xf8,0xfc,0x12,0x11,0x11,0x12,0xfc,0xf8,0x00},
DT=1;
Int8 i,j,Dau,cnt;
void main()
{SET_TRIS_B(0);SET_TRIS_D(0); // portb=portd=trisb=trisd=0;
Dau=cnt=0;
while(1)
{ j=128;
if(++cnt==20){Dau=(Dau+1)%Nmax;cnt=0;}
for(i=7;i>=0;i--){
output_d(~mf[(Dau+i)%Nmax]);
output_b(j); j/=2;
delay_ms(DT);
output_b(0);
} } }
Nạp vào Mạch mô phỏng, kiểm tra kết quả.
Nạp vào mạch thật, kiểm chứng kết quả có trùng khớp với mình mong muốn
hay không.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
21
1.4. Ghi chép số liệu, kết quả thực hành
1.5. Chuẩn bị của sinh viên:
- Đọc và nghiên cứu bài thực hành
- Đọc và nghiên cứu lý thuyết có liên quan đến nội dung bài thực hành
- Chuẩn bị các vật dụng, giấy vở ghi chép số liệu thực hành
- Mạch máy tính nhúng, phần lập trình nhúng.
- Sự chuẩn bị của sinh viên phải được thông qua kiểm tra của người hướng dẫn thực
hành. Nếu không đạt, sẽ không được tham gia thực hành và có được thực hành tiếp
vào buổi khác hay không sẽ do Bộ môn và Ban chủ nhiệm khoa giải quyết.
Phần II. VIẾT BÁO CÁO THỰC HÀNH
2.1. Quy định chung:
Báo cáo thực hành được viết một mặt trên khổ giấy A4, đóng quyển, bìa mềm
(theo mẫu ...). Mỗi sinh viên có một quyển báo cáo riêng.
2.2. Nội dung báo cáo:
2.2.1. Cơ sở lý thuyết
Phân tích cơ sở lý thuyết như mục 1.2.
2.2.2. Báo cáo kết quả thực hành
- Mỗi sinh viên (nhóm sinh viên) thiết kế 01 mạch (sơ đồ nguyên lý, phần lập
trình nhúng) ngẫu nhiên đã được chuẩn bị trước ở mục 1.4, trên phần mềm
Proteus và PICC Compile.
- Tổng hợp những kết quả chính cho nội dung báo cáo
- Phân tích sơ đồ nguyên lý, mã lệnh
- Lập bảng trạng thái đầu vào, đầu ra (nếu có)
- Nhận xét kết quả:
+ Các kết quả thu được từ thực hành
+ So sánh kết quả thực hành với lý thuyết
+ Mức độ kết quả đạt được so với yêu cầu đề ra
+ Đánh giá các sai số của dụng cụ, thiết bị thực hành, người thao tác...
- Kiến nghị.
Phần III. ĐÁNH GIÁ CHẤM ĐIỂM, BẢO VỆ THỰC HÀNH
Bộ môn hay tập thể hướng dẫn thực hành tổ chức đánh giá điểm thực hành thông
qua lựa chọn một trong những hình thức sau:
- Chấm điểm dựa trên nội dung bản báo cáo thực hành của từng sinh viên
- Chấm điểm theo hình thức bảo vệ vấn đáp.
Điểm thực hành của sinh viên được tổng hợp theo lớp có chữ ký xác nhận Trưởng bộ môn
chuyên môn.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
22
Biên soạn: Th.S Nguyễn Tuấn Anh
QUY TRÌNH THỰC HIỆN BÀI THỰC HÀNH
MÔN HỆ THỐNG NHÚNG
BÀI 4.
XỬ LÝ NGẮT VÀ GIAO TIẾP BÀN PHÍM
CHƯƠNG TRÌNH ĐÀO TẠO ĐẠI HỌC THEO HỆ THỐNG TÍN CHỈ
(HỆ 150 TC)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
23
Phần I. THỰC HÀNH
1.1. Mục đích thực hành:
- Giúp sinh viên củng cố các kiến thức về thiết kế và lập trình cho hệ vi điều khiển (trên nền
PIC) đồng thời tiếp cận với một môi trường thiết kế tích hợp chuyên nghiệp là phần mềm
PIC C Compile và phần mềm mô phỏng Proteus.
- Xử lý ngắt và giao tiếp bàn phím, cho phép lập trình quét 16 phím, cho phép hiển thị kết
quả trên LED 7 đoạn, cho phép lập trình cho 3 loại ngắt.
- Giúp Sinh viên chuyển đổi tư duy từ kiến thức lý thuyết đến tiếp cận với kiến thức thực tế.
- Giúp cho SV hiểu rõ được thực hành là một bộ phận công việc của người làm công tác
khoa học kỹ thuật.
1.2. Cơ sở lý thuyết:
Hệ thống nhúng là một hệ thống tích hợp cả phần cứng và phần mềm nhúng. Phần cứng là
hệ thống vi điều khiển PIC và thiết bị ngoại vi. Phần mềm nhúng dùng ngôn ngữ C, biên dịch
trên nền PIC C compile.
Trong bài này, chúng ta thiết kế phần mềm nhúng, dựa trên nền phần cứng nhúng đã có,
theo sơ đồ khối sau đây:
Trong đó:
Bàn phím 16 phím ghép dạng ma trận.
Hiển thị trạng thái lên LED 7 thanh
Bộ điều khiển trung tâm, là phần quan trọng nhất của hệ thống; là nơi phần mềm
nhúng vào, thể hiện thuật toán của chúng ta.
Để thực hiện tốt bài thực hành, chúng ta cần chuẩn bị trước các kiến thức cơ bản sau đây:
Cấu trúc máy tính nhúng, vi điều khiển, mạch logic cơ bản, mạch khuếch đại,
mạch lọc, LCD, cảm biến, ADC,...
Ngôn ngữ lập trình C cho PIC (CCS C). Các kiến thức về tập lệnh, cấu trúc rẽ
nhánh, vòng lặp, khai báo chương trình con, biến, hằng, mảng,...
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
24
1.3. Thực hành:
1.3.1. Nội quy an toàn thực hành:
- Người thực hiện thực hành kể cả Hướng dẫn viên và sinh viên đề phải nắm
vững các nội quy an toàn do phòng thực hành quy định, thông qua việc học nội quy có
kiểm tra sát hạch.
- Các thiết bị thực hành chịu sự kiểm soát an toàn theo phân cấp của nhà nước
phải đảm bảo có đầy đủ biên bản kiểm định an toàn của cấp có thẩm quyền. Ví dụ:
Thiết bị điện cao thế (trên 1 kV), các thiết bị áp lực, chất hóa học đặc biệt...
1.3.2. Nội dung bài thực hành:
- Làm quen phần mềm PIC C Compile, Proteus
- Thiết kế phần cứng hệ thống nhúng trên Proteus, đáp ứng bài toán
- Tạo một project mới trên CCS
- Lập trình phần mềm nhúng, đáp ứng được bài toán.
- Nạp vào mạch thật
- Kiểm tra hoạt động và đánh giá kết quả
1.3.3. Phương pháp và cách thức thực hành:
1. Giới thiệu thiết bị và dụng cụ thực hành
2. Phân nhóm thực hành
3. Sơ đồ hay cách thức tiến hành TN
Thiết kế phần cứng hệ thống nhúng trên môi trường mô phỏng Proteus:
MCLR/VPP
1
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-
4
RA3/AN3/VREF+
5
RA4/T0CKI
6
RA5/AN4/SS/LVDIN
7
RE0/RD/AN5
8
RE1/WR/AN6
9
RE2/CS/AN7
10
OSC1/CLKI
13
RA6/OSC2/CLKO
14
RC0/T1OSO/T1CKI
15
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RD2/PSP2
21
RD3/PSP3
22
RD4/PSP4
27
RD5/PSP5
28
RD6/PSP6
29
RD7/PSP7
30
RC4/SDI/SDA
23
RC5/SDO
24
RC6/TX/CK
25
RC7/RX/DT
26
RB0/INT0
33
RB1/INT1
34
RB2/INT2
35
RB3/CCP2B
36
RB4
37
RB5/PGM
38
RB6/PGC
39
RB7/PGD
40
RC1/T1OSI/CCP2A
16
U1
PIC18F452
H1
H2
H3
H4
C1
C2
C3
C4
A B C D
A
B
C
D
1 2 3
654
8 9
=
7
+CON 0
A
B
C
D
1 2 43
H1
H2
H3
H4
C
1
C
2
C
3
C
4
E F G H L
1
L
2
E
F
G
H
L1
L2
Hình 4. Phần cứng hệ thống nhúng.
4. Trình tự tiến hành thực hành
Lựa chọn các linh kiện từ panel Libraries và đưa vào sơ đồ theo bảng sau:
Ký hiệu Tên linh kiện Giải thích Số lượng
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
25
Ký hiệu Tên linh kiện Giải thích Số lượng
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC18F452 Vi điều khiển 1
1 2 3
654
8 9
=
7
+CON 0
A
B
C
D
1 2 43
Button MATRIX Bàn phím ma trận 1
LED 7 Segments LED 7 đoạn 1
5. Tạo Dự án nhúng:
o Viết mã nguồn như sau:
#include
#use delay(clock=8000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
const int8
LED7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
const int8 time=15;
int8 i,cnt,tmp, L1,L2,L3,L4;
void main()
{ SET_TRIS_b(0);SET_TRIS_C(0);
while(1){
cnt++; tmp=cnt;
L1=tmp % 10; tmp/=10;
L2=tmp % 10; tmp/=10;
for(i=0;i<10;i++){
output_b(LED7[L1]);output_high(PIN_E0);delay_ms(time);
output_low(PIN_D0);
output_b(LED7[L2]);output_high(PIN_E1);delay_ms(time);
output_low(PIN_D1);
} } }
Nạp vào Mạch mô phỏng, kiểm tra kết quả.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
26
Nạp vào mạch thật, kiểm chứng kết quả có trùng khớp với mình mong muốn
hay không.
1.4. Ghi chép số liệu, kết quả thực hành
1.5. Chuẩn bị của sinh viên:
- Đọc và nghiên cứu bài thực hành
- Đọc và nghiên cứu lý thuyết có liên quan đến nội dung bài thực hành
- Chuẩn bị các vật dụng, giấy vở ghi chép số liệu thực hành
- Mạch máy tính nhúng, phần lập trình nhúng.
- Sự chuẩn bị của sinh viên phải được thông qua kiểm tra của người hướng dẫn thực
hành. Nếu không đạt, sẽ không được tham gia thực hành và có được thực hành tiếp
vào buổi khác hay không sẽ do Bộ môn và Ban chủ nhiệm khoa giải quyết.
Phần II. VIẾT BÁO CÁO THỰC HÀNH
2.1. Quy định chung:
Báo cáo thực hành được viết một mặt trên khổ giấy A4, đóng quyển, bìa mềm
(theo mẫu ...). Mỗi sinh viên có một quyển báo cáo riêng.
2.2. Nội dung báo cáo:
2.2.1. Cơ sở lý thuyết
Phân tích cơ sở lý thuyết như mục 1.2.
2.2.2. Báo cáo kết quả thực hành
- Tổng hợp những kết quả chính cho nội dung báo cáo
- Phân tích sơ đồ nguyên lý, mã lệnh
- Lập bảng trạng thái đầu vào, đầu ra (nếu có)
- Nhận xét kết quả:
+ Các kết quả thu được từ thực hành
+ So sánh kết quả thực hành với lý thuyết
+ Mức độ kết quả đạt được so với yêu cầu đề ra
+ Đánh giá các sai số của dụng cụ, thiết bị thực hành, người thao tác...
- Kiến nghị.
Phần III. ĐÁNH GIÁ CHẤM ĐIỂM, BẢO VỆ THỰC HÀNH
Bộ môn hay tập thể hướng dẫn thực hành tổ chức đánh giá điểm thực hành thông
qua lựa chọn một trong những hình thức sau:
- Chấm điểm dựa trên nội dung bản báo cáo thực hành của từng sinh viên
- Chấm điểm theo hình thức bảo vệ vấn đáp.
Điểm thực hành của sinh viên được tổng hợp theo lớp có chữ ký xác nhận Trưởng bộ môn
chuyên môn.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
27
Biên soạn: Th.S Nguyễn Tuấn Anh
QUY TRÌNH THỰC HIỆN BÀI THỰC HÀNH
MÔN HỆ THỐNG NHÚNG
BÀI 5.
TRUYỀN THÔNG VỚI PC QUA CỔNG USB
CHƯƠNG TRÌNH ĐÀO TẠO ĐẠI HỌC THEO HỆ THỐNG TÍN CHỈ
(HỆ 150 TC)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
28
Phần I. THỰC HÀNH
1.1. Mục đích thực hành:
- Giúp sinh viên củng cố các kiến thức về thiết kế và lập trình cho hệ vi điều khiển (trên nền
PIC) đồng thời tiếp cận với một môi trường thiết kế tích hợp chuyên nghiệp là phần mềm
PIC C Compile và phần mềm mô phỏng Proteus.
- Truyền thông với PC qua cổng USB, Lập trình trên PC, truyền nhận dữ liệu theo chuẩn
USB, Lập trình trên hệ thống nhúng truyền thông theo chuẩn USB.
- Giúp Sinh viên chuyển đổi tư duy từ kiến thức lý thuyết đến tiếp cận với kiến thức thực tế.
- Giúp cho SV hiểu rõ được thực hành là một bộ phận công việc của người làm công tác
khoa học kỹ thuật.
1.2. Cơ sở lý thuyết:
Hệ thống nhúng là một hệ thống tích hợp cả phần cứng và phần mềm nhúng. Phần cứng là
hệ thống vi điều khiển PIC và thiết bị ngoại vi. Phần mềm nhúng dùng ngôn ngữ C, biên dịch
trên nền PIC C compile.
Trong bài này, chúng ta thiết kế phần mềm nhúng, dựa trên nền phần cứng nhúng đã có,
theo sơ đồ khối sau đây:
Trong đó:
Trên PC cần có phần mềm truyền thông USB
Bộ điều khiển trung tâm, là phần quan trọng nhất của hệ thống; là nơi phần mềm
nhúng vào, thể hiện thuật toán của chúng ta.
Để thực hiện tốt bài thực hành, chúng ta cần chuẩn bị trước các kiến thức cơ bản sau đây:
Cấu trúc máy tính nhúng, vi điều khiển, mạch logic cơ bản, mạch khuếch đại,
mạch lọc, LCD, cảm biến, ADC,...
Ngôn ngữ lập trình C cho PIC (CCS C). Các kiến thức về tập lệnh, cấu trúc rẽ
nhánh, vòng lặp, khai báo chương trình con, biến, hằng, mảng,...
1.3. Thực hành:
1.3.1. Nội quy an toàn thực hành:
- Người thực hiện thực hành kể cả Hướng dẫn viên và sinh viên đề phải nắm
vững các nội quy an toàn do phòng thực hành quy định, thông qua việc học nội quy có
kiểm tra sát hạch.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
29
- Các thiết bị thực hành chịu sự kiểm soát an toàn theo phân cấp của nhà nước
phải đảm bảo có đầy đủ biên bản kiểm định an toàn của cấp có thẩm quyền. Ví dụ:
Thiết bị điện cao thế (trên 1 kV), các thiết bị áp lực, chất hóa học đặc biệt...
1.3.2. Nội dung bài thực hành:
- Làm quen phần mềm PIC C Compile, Proteus
- Thiết kế phần cứng hệ thống nhúng trên Proteus, đáp ứng bài toán
- Tạo một project mới trên CCS
- Lập trình phần mềm nhúng, đáp ứng được bài toán.
- Nạp vào mạch thật
- Kiểm tra hoạt động và đánh giá kết quả
1.3.3. Phương pháp và cách thức thực hành:
1. Giới thiệu thiết bị và dụng cụ thực hành
2. Phân nhóm thực hành
3. Sơ đồ hay cách thức tiến hành TN
Thiết kế phần cứng hệ thống nhúng trên môi trường mô phỏng Proteus:
D1
D2
D3
D4
S3
S1
Reset
RXD
RTS
TXD
CTS
D7
32.0
SCK
2
CS
7
SI/O
1
U3
TC77
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA3/AN3/VREF+
5
RA4/T0CKI/C1OUT/RCV
6
RA5/AN4/SS/LVDIN/C2OUT
7
RA6/OSC2/CLKO
14
OSC1/CLKI
13
RB0/AN12/INT0/FLT0/SDI/SDA
33
RB1/AN10/INT1/SCK/SCL
34
RB2/AN8/INT2/VMO
35
RB3/AN9/CCP2/VPO
36
RB4/AN11/KBI0/CSSPP
37
RB5/KBI1/PGM
38
RB6/KBI2/PGC
39
RB7/KBI3/PGD
40
RC0/T1OSO/T1CKI
15
RC1/T1OSI/CCP2/UOE
16
RC2/CCP1/P1A
17
VUSB
18
RC4/D-/VM
23
RC5/D+/VP
24
RC6/TX/CK
25
RC7/RX/DT/SDO
26
RD0/SPP0
19
RD1/SPP1
20
RD2/SPP2
21
RD3/SPP3
22
RD4/SPP4
27
RD5/SPP5/P1B
28
RD6/SPP6/P1C
29
RD7/SPP7/P1D
30
RE0/AN5/CK1SPP
8
RE1/AN6/CK2SPP
9
RE2/AN7/OESPP
10
RE3/MCLR/VPP
1
U1
PIC18F4550
S2
VCC
D+
D-
GND
U2
USBCONN
Hình 5. Phần cứng hệ thống nhúng.
4. Trình tự tiến hành thực hành
Lựa chọn các linh kiện từ panel Libraries và đưa vào sơ đồ theo bảng sau:
Ký hiệu Tên linh kiện Giải thích Số lượng
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
30
Ký hiệu Tên linh kiện Giải thích Số lượng
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC18F452 Vi điều khiển 1
VCC
D+
D-
GND
U2
USBCONN
USB connector Đầu nối USB 1
5. Tạo Dự án nhúng:
o Viết mã nguồn như sau:
//set to 1 to use a PIC's internal USB Peripheral
//set to 0 to use a National USBN960x peripheral
#define __USB_PIC_PERIF__ 0
//if using a 16bit PIC on an Explorer 16 borad, set this to 1
#define __USB_PIC_EXPLORER16__ 1
#if __USB_PIC_PERIF__
#DEFINE LED1 PIN_A5
#if defined(__PCM__)
#include
#device *=16
#device ADC=8
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=24000000)
#elif defined(__PCH__)
#include
#device ADC=8
#fuses
HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGE
N
#use delay(clock=48000000)
#elif defined(__PCD__)
#include
#device ADC=8
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
31
#fuses HS,PR_PLL,NOWDT,DISUVREG,ICSP2
#if __USB_PIC_EXPLORER16__
#use delay(clock=32M) //8MHz clock is 4x because of PLL
#fuses PLL2 //Divide 8MHz by 2 to get the 4MHz required for USB
#pin_select U1TX = PIN_F5
#pin_select U1RX = PIN_F4
#endif
#endif
#else //use the National USBN960x peripheral
#DEFINE LED1 PIN_B3
#if defined(__PCM__)
#include
#device ADC=8
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#elif defined(__PCH__)
#include
#device ADC=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#endif
#use delay(clock=20000000)
#endif //endif check to see which peripheral to use
#use rs232(baud=9600, UART1, errors)
// you can change the tx and rx packet sizes here.
// in order to be compatbile with hiddemo.exe, these values must be 2.
#define USB_CONFIG_HID_TX_SIZE 2
#define USB_CONFIG_HID_RX_SIZE 2
///only the 18F4550 development kit has this pin
#if __USB_PIC_PERIF__ && defined(__PCH__)
#define USB_CON_SENSE_PIN PIN_B2
#endif
#if __USB_PIC_PERIF__
#if defined(__PCM__)
#include //Microchip PIC16C765 hardware layer for usb.c
#elif defined(__PCH__)
#include //Microchip PIC18Fxx5x hardware layer for usb.c
#elif defined(__PCD__)
#include //Microchip PIC24 hardware layer for usb.c
#endif
#else
#include //National 960x hardware layer for usb.c
#endif
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
32
#include //USB Configuration and Device descriptors for
this UBS device
#include //handles usb setup tokens and get descriptor reports
#if defined(__PCD__) && __USB_PIC_EXPLORER16__
#undef LED1
#define LED1 PIN_A0
#define LED2 PIN_A1
#define LED3 PIN_A2
#define LED_ON(x) output_high(x)
#define LED_OFF(x) output_low(x)
#define BUTTON_PRESSED() !input(PIN_D6)
#define HW_ADC_PORTS sAN5
#define HW_ADC_CHANNEL 5
#define HW_ADC_CONFIG ADC_CLOCK_INTERNAL | ADC_TAD_MUL_31
#else
#define LED2 PIN_B4
#define LED3 PIN_B5
#define LED_ON(x) output_low(x)
#define LED_OFF(x) output_high(x)
#define BUTTON_PRESSED() !input(PIN_A4)
#if defined(AN0)
#define HW_ADC_PORTS AN0
#elif defined(AN0_AN1_AN3)
#define HW_ADC_PORTS AN0_AN1_AN3
#elif defined(sAN0)
#define HW_ADC_PORTS sAN0
#else
#define define HW_ADC_PORTS for your hardware
#endif
#define HW_ADC_CONFIG ADC_CLOCK_INTERNAL
#define HW_ADC_CHANNEL 0
#endif
void usb_debug_task(void)
{
static int8 last_connected;
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
new_connected=usb_attached();
new_enumerated=usb_enumerated();
if (new_enumerated)
LED_ON(LED1);
else
LED_OFF(LED1);
if (new_connected && !last_connected)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
33
printf("\r\n\nUSB connected, waiting for enumaration...");
if (!new_connected && last_connected)
printf("\r\n\nUSB disconnected, waiting for connection...");
if (new_enumerated && !last_enumerated)
printf("\r\n\nUSB enumerated by PC/HOST");
if (!new_enumerated && last_enumerated)
printf("\r\n\nUSB unenumerated by PC/HOST, waiting for
enumeration...");
last_connected=new_connected;
last_enumerated=new_enumerated;
}
void main(void)
{
int8 out_data[2];
int8 in_data[2];
int8 send_timer=0;
LED_OFF(LED1);
LED_OFF(LED2);
LED_OFF(LED3);
printf("\r\n\nCCS Vendor Specific HID Example");
#ifdef __PCH__
printf("\r\nPCH: v");
printf(__PCH__);
#elif defined(__PCD__)
printf("\r\nPCD: v");
printf(__PCD__);
#else
printf("\r\nPCM: v");
printf(__PCM__);
#endif
usb_init_cs();
#if !(__USB_PIC_PERIF__)
printf("\r\nUSBN: 0x%X", usbn_get_version());
#endif
printf("\r\n");
setup_adc_ports(HW_ADC_PORTS);
setup_adc(HW_ADC_CONFIG);
set_adc_channel(HW_ADC_CHANNEL);
while (TRUE)
{
usb_task();
usb_debug_task();
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
34
if (usb_enumerated())
{
if (!send_timer)
{
send_timer=250;
out_data[0]=read_adc();
out_data[1]=BUTTON_PRESSED();
if (usb_put_packet(1, out_data, 2, USB_DTS_TOGGLE))
printf("\r\n<-- Sending 2 bytes: 0x%X 0x%X", out_data[0],
out_data[1]);
}
if (usb_kbhit(1))
{
usb_get_packet(1, in_data, 2);
printf("\r\n--> Received data: 0x%X 0x%X",in_data[0],in_data[1]);
if (in_data[0]) {LED_ON(LED2);} else {LED_OFF(LED2);}
if (in_data[1]) {LED_ON(LED3);} else {LED_OFF(LED3);}
}
send_timer--;
delay_ms(1);
}
}
}
Nạp vào Mạch mô phỏng, kiểm tra kết quả.
Nạp vào mạch thật, kiểm chứng kết quả có trùng khớp với mình mong muốn
hay không.
1.4. Ghi chép số liệu, kết quả thực hành
1.5. Chuẩn bị của sinh viên:
- Đọc và nghiên cứu bài thực hành
- Đọc và nghiên cứu lý thuyết có liên quan đến nội dung bài thực hành
- Chuẩn bị các vật dụng, giấy vở ghi chép số liệu thực hành
- Mạch máy tính nhúng, phần lập trình nhúng.
- Sự chuẩn bị của sinh viên phải được thông qua kiểm tra của người hướng dẫn thực
hành. Nếu không đạt, sẽ không được tham gia thực hành và có được thực hành tiếp
vào buổi khác hay không sẽ do Bộ môn và Ban chủ nhiệm khoa giải quyết.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
35
Phần II. VIẾT BÁO CÁO THỰC HÀNH
2.1. Quy định chung:
Báo cáo thực hành được viết một mặt trên khổ giấy A4, đóng quyển, bìa mềm
(theo mẫu ...). Mỗi sinh viên có một quyển báo cáo riêng.
2.2. Nội dung báo cáo:
2.2.1. Cơ sở lý thuyết
Phân tích cơ sở lý thuyết như mục 1.2.
2.2.2. Báo cáo kết quả thực hành
- Mỗi sinh viên (nhóm sinh viên) thiết kế 01 mạch (sơ đồ nguyên lý, phần lập
trình nhúng) ngẫu nhiên đã được chuẩn bị trước ở mục 1.4, trên phần mềm
Proteus và PICC Compile.
- Tổng hợp những kết quả chính cho nội dung báo cáo
- Phân tích sơ đồ nguyên lý, mã lệnh
- Lập bảng trạng thái đầu vào, đầu ra (nếu có)
- Nhận xét kết quả:
+ Các kết quả thu được từ thực hành
+ So sánh kết quả thực hành với lý thuyết
+ Mức độ kết quả đạt được so với yêu cầu đề ra
+ Đánh giá các sai số của dụng cụ, thiết bị thực hành, người thao tác...
- Kiến nghị.
Phần III. ĐÁNH GIÁ CHẤM ĐIỂM, BẢO VỆ THỰC HÀNH
Bộ môn hay tập thể hướng dẫn thực hành tổ chức đánh giá điểm thực hành thông
qua lựa chọn một trong những hình thức sau:
- Chấm điểm dựa trên nội dung bản báo cáo thực hành của từng sinh viên
- Chấm điểm theo hình thức bảo vệ vấn đáp.
Điểm thực hành của sinh viên được tổng hợp theo lớp có chữ ký xác nhận Trưởng bộ môn
chuyên môn.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
36
Biên soạn: Th.S Nguyễn Tuấn Anh
QUY TRÌNH THỰC HIỆN BÀI THỰC HÀNH
MÔN HỆ THỐNG NHÚNG
BÀI 6.
ĐỌC DỮ LIỆU TRONG THẺ NHỚ SD/MMC
CHƯƠNG TRÌNH ĐÀO TẠO ĐẠI HỌC THEO HỆ THỐNG TÍN CHỈ
(HỆ 150 TC)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
37
Phần I. THỰC HÀNH
1.1. Mục đích thực hành:
- Giúp sinh viên củng cố các kiến thức về thiết kế và lập trình cho hệ vi điều khiển (trên nền
PIC) đồng thời tiếp cận với một môi trường thiết kế tích hợp chuyên nghiệp là phần mềm
PIC C Compile và phần mềm mô phỏng Proteus.
- Truyền thông với PC qua cổng USB, Ghi/đọc dữ liệu theo định dạng FAT, Lập trình
truyền thông.
- Giúp Sinh viên chuyển đổi tư duy từ kiến thức lý thuyết đến tiếp cận với kiến thức thực tế.
- Giúp cho SV hiểu rõ được thực hành là một bộ phận công việc của người làm công tác
khoa học kỹ thuật.
1.2. Cơ sở lý thuyết:
Hệ thống nhúng là một hệ thống tích hợp cả phần cứng và phần mềm nhúng. Phần cứng là
hệ thống vi điều khiển PIC và thiết bị ngoại vi. Phần mềm nhúng dùng ngôn ngữ C, biên dịch
trên nền PIC C compile.
Trong bài này, chúng ta thiết kế phần mềm nhúng, dựa trên nền phần cứng nhúng đã có,
theo sơ đồ khối sau đây:
Trong đó:
Module thẻ nhớ đã được ghép nối và chuẩn hoá tín hiệu.
Truyền thông dữ liệu lên PC
Bộ điều khiển trung tâm, là phần quan trọng nhất của hệ thống; là nơi phần mềm
nhúng vào, thể hiện thuật toán của chúng ta.
Để thực hiện tốt bài thực hành, chúng ta cần chuẩn bị trước các kiến thức cơ bản sau đây:
Cấu trúc máy tính nhúng, vi điều khiển, mạch logic cơ bản, mạch khuếch đại,
mạch lọc, LCD, cảm biến, ADC,...
Ngôn ngữ lập trình C cho PIC (CCS C). Các kiến thức về tập lệnh, cấu trúc rẽ
nhánh, vòng lặp, khai báo chương trình con, biến, hằng, mảng,...
1.3. Thực hành:
1.3.1. Nội quy an toàn thực hành:
- Người thực hiện thực hành kể cả Hướng dẫn viên và sinh viên đề phải nắm
vững các nội quy an toàn do phòng thực hành quy định, thông qua việc học nội quy có
kiểm tra sát hạch.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
38
- Các thiết bị thực hành chịu sự kiểm soát an toàn theo phân cấp của nhà nước
phải đảm bảo có đầy đủ biên bản kiểm định an toàn của cấp có thẩm quyền. Ví dụ:
Thiết bị điện cao thế (trên 1 kV), các thiết bị áp lực, chất hóa học đặc biệt...
1.3.2. Nội dung bài thực hành:
- Làm quen phần mềm PIC C Compile, Proteus
- Thiết kế phần cứng hệ thống nhúng trên Proteus, đáp ứng bài toán
- Tạo một project mới trên CCS
- Lập trình phần mềm nhúng, đáp ứng được bài toán.
- Nạp vào mạch thật
- Kiểm tra hoạt động và đánh giá kết quả
1.3.3. Phương pháp và cách thức thực hành:
1. Giới thiệu thiết bị và dụng cụ thực hành
2. Phân nhóm thực hành
3. Sơ đồ hay cách thức tiến hành TN
Thiết kế phần cứng hệ thống nhúng trên môi trường mô phỏng Proteus:
D1
D2
D3
D4
S1
Reset
D7
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA3/AN3/VREF+
5
RA4/T0CKI/C1OUT/RCV
6
RA5/AN4/SS/LVDIN/C2OUT
7
RA6/OSC2/CLKO
14
OSC1/CLKI
13
RB0/AN12/INT0/FLT0/SDI/SDA
33
RB1/AN10/INT1/SCK/SCL
34
RB2/AN8/INT2/VMO
35
RB3/AN9/CCP2/VPO
36
RB4/AN11/KBI0/CSSPP
37
RB5/KBI1/PGM
38
RB6/KBI2/PGC
39
RB7/KBI3/PGD
40
RC0/T1OSO/T1CKI
15
RC1/T1OSI/CCP2/UOE
16
RC2/CCP1/P1A
17
VUSB
18
RC4/D-/VM
23
RC5/D+/VP
24
RC6/TX/CK
25
RC7/RX/DT/SDO
26
RD0/SPP0
19
RD1/SPP1
20
RD2/SPP2
21
RD3/SPP3
22
RD4/SPP4
27
RD5/SPP5/P1B
28
RD6/SPP6/P1C
29
RD7/SPP7/P1D
30
RE0/AN5/CK1SPP
8
RE1/AN6/CK2SPP
9
RE2/AN7/OESPP
10
RE3/MCLR/VPP
1
U1
PIC18F4550
CD
VCC
D+
D-
GND
U2
USBCONN
M
u
lt
im
e
d
ia
C
a
rd
CS
DI
DO
CLK
M1
MMC
WD
Hình 6. Phần cứng hệ thống nhúng.
4. Trình tự tiến hành thực hành
Lựa chọn các linh kiện từ panel Libraries và đưa vào sơ đồ theo bảng sau:
Ký hiệu Tên linh kiện Giải thích Số lượng
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
39
Ký hiệu Tên linh kiện Giải thích Số lượng
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC18F452 Vi điều khiển 1
VCC
D+
D-
GND
U2
USBCONN
USB connector Đầu nối USB 1
M
u
lt
im
e
d
ia
C
a
rd
CS
DI
DO
CLK
M1
MMC
MMC Thẻ nhớ 1
5. Tạo Dự án nhúng:
o Viết mã nguồn như sau:
//These settings are for the CCS PICEEC development kit which contains
//an MMC/SD connector.
#include
#device PASS_STRINGS = IN_RAM
#fuses NOWDT, HS, NOPROTECT
#use delay(clock=25M)
#use rs232(baud=9600, UART1, errors)
#include // for atoi32
//media library, a compatable media library is required for FAT.
#use fast_io(c)
#define MMCSD_PIN_SCL PIN_C3 //o
#define MMCSD_PIN_SDI PIN_C4 //i
#define MMCSD_PIN_SDO PIN_C5 //o
#define MMCSD_PIN_SELECT PIN_C2 //o
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
40
#include
//FAT library.
#include
#define COMMAND_SIZE 10
#define NUM_COMMANDS 11
char g_CWD[200] = "/"; //current working directory
char commands[NUM_COMMANDS][COMMAND_SIZE]=
{
"del", //option1=filename. delete file.
"make", //option1=filename. create an empty file, give error if file
already exists
"append", //option1=filename, option2=string. append string to end of
file
"cd", //option1=new cwd. change working directory. / is root.
"dir", //show files in directory
"cat", //option1=filename. display full contents in ascii
"tail", //option1=filename. display the last 20 lines of file.
"mkdir", //option1=dir. create directory. see 'cd' for rules on dir
"rmdir", //option1=dir. remove directory. see 'cd' for rules on dir.
"format", // option1=media size in bytes. formats the media.
"help" // help!
};
int FindCommand(char *cmd)
{
char buf[COMMAND_SIZE];
int i;
for (i=0; i<NUM_COMMANDS; i++)
{
strcpy(buf, &commands[i][0]);
if (stricmp(buf, cmd)==0)
return(i);
}
return(0xFF);
}
/*
Summary: Displays the current working directory.
Param: None.
Returns: None.
*/
void DisplayPrompt(void)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
41
{
printf("\r\n\n%s> ", g_CWD);
}
/*
Summary: Deletes a file.
Param: The full path of the file to delete.
Returns: None.
*/
void DeleteFile(char *fileName)
{
printf("\r\nDeleting '%s': ", fileName);
if(rm_file(fileName) != GOODEC)
{
printf("Error deleting file");
return;
}
printf("OK");
}
/*
Summary: Creates a file.
Param: The full path of the file to create.
Returns: None.
Example Usage: \> make "Log.txt"
*/
void MakeFile(char *fileName)
{
printf("\r\nMaking file '%s': ", fileName);
if(mk_file(fileName) != GOODEC)
{
printf("Error creating file");
return;
}
printf("OK");
}
/*
Summary: Append a string to a file.
Param: The full path of the file to append to.
Param: A pointer to a string to append to the file.
Returns: None.
Example Usage: \> append "Log.txt" "This will be appended to the end of
Log.txt"
Note: A "\r\n" will be appended after the appendString.
*/
void AppendFile(char *fileName, char *appendString)
{
FILE stream;
printf("\r\nAppending '%s' to '%s': ", appendString, fileName);
if(fatopen(fileName, "a", &stream) != GOODEC)
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
42
{
printf("Error opening file");
return;
}
fatputs(appendString, &stream);
fatputs("\r\n", &stream);
if(fatclose(&stream) != GOODEC)
{
printf("Error closing file");
return;
}
printf("OK");
}
/*
Summary: Change the working directory.
Param: The new working directory to switch to.
Returns: None.
Example Usage: \> cd ftp/ -> /ftp/
\ftp\> cd files/ -> /ftp/files/
\ftp\files> cd.. -> /ftp/
\ftp\> cd .. -> /
\> cd /ftp/files/ -> /ftp/files/
Note: Changing the directory to .. will go up a directory.
*/
void ChangeDirectory(char *newCWD)
{
FILE stream;
//append a / to the end of the filename if it doesn't exist
//making an assumption here that newCWD can hold 1 more character
if (newCWD[strlen(newCWD)-1] != '/')
strcat(newCWD, "/");
if((strstr(newCWD, "../") != 0) && (strcmp(g_CWD, "/") != 0))
{
g_CWD[strlen(g_CWD) - 1] = '\0';
g_CWD[strrchr(g_CWD, '/') - g_CWD + 1] = '\0';
}
else
{
if(fatopen(newCWD, "r", &stream) != GOODEC)
{
printf("\r\nError changing directory");
return;
}
strcpy(g_CWD, newCWD);
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
43
}
}
void DisplayDirectory(char *dir)
{
disp_folder_contents(dir);
}
void MakeDirectory(char *dir)
{
//append a / to the end of the filename if it doesn't exist
//making an assumption here that newCWD can hold 1 more character
if (dir[strlen(dir)-1] != '/')
strcat(dir, "/");
printf("\r\nMaking directory '%s': ", dir);
if(mk_dir(dir) != GOODEC)
{
printf("Error creating directory");
return;
}
printf("OK");
}
void RemoveDirectory(char *dir)
{
printf("\r\nRemoving directory '%s': ", dir);
if (dir[strlen(dir)-1] != '/')
strcat(dir, "/");
if(rm_dir(dir) != GOODEC)
{
printf("Error removing directory");
return;
}
printf("OK");
}
#define CAT_FROM_START FALSE
#define CAT_FROM_END TRUE
void PrintFile(char *fileName, int1 startFromEnd)
{
FILE stream;
if(fatopen(fileName, "r", &stream) != GOODEC)
{
printf("\r\nError opening file");
return;
}
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
44
printf("\r\n");
if(startFromEnd)
fatseek(&stream, 80, SEEK_END);
fatprintf(&stream);
fatclose(&stream);
}
/*
Summary: Formats the media to a specified size.
Param: The size of the media, in kB, in string form.
Returns: None.
Example Usage: /> format 524288 (format a 512MB card)
*/
void FormatMedia(char *mediaSize)
{
int32 size;
size = atoi32(mediaSize);
printf("\r\nFormatting media (size=%LU): ", size);
if(format(size) != GOODEC)
{
printf("Error formatting media");
return;
}
printf("OK");
}
void ShowHelp()
{
printf("\r\nFAT Shell Help");
printf("\r\n del filename --- Deletes the file");
printf("\r\n make filename --- Creates an empty file");
printf("\r\n append filename string --- Appends string to the end of the
file");
printf("\r\n cd dir --- Change the working directory");
printf("\r\n dir --- Shows the contents of the directory");
printf("\r\n cat filename --- Displays content of file");
printf("\r\n tail filename --- Displays the last 80 characters of file");
printf("\r\n mkdir dir --- Create a directory");
printf("\r\n rmdir dir --- Deletes the directory");
printf("\r\n format size --- Format card. (Example: 'format 5524288'
formats a 512MB card)");
printf("\r\n help\tYou are here");
printf("\r\n\n Put a parameter in quotes if it has spaces");
}
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
45
char * GetCMD(char *in)
{
char tokens[]=" \r\n";
return(strtok(in,tokens));
}
char * GetOption(char *in)
{
char tokensSpace[]=" \r\n";
char tokensQuote[]="\"\r\n";
//trim leading spaces
while (*in==' ')
in++;
//if first char is a quote, then end token on a quote. ELSE end token on a
space
if (*in == '\"')
return(strtok(in,tokensQuote));
else
return(strtok(in,tokensSpace));
}
void main(void)
{
char buffer[255];
char opt_buffer[255];
char *cmd, *option1, *option2;
int i; // pointer to the buffer
// initialize the FAT
// keep in mind that this will automagically initialize the media
i = fat_init();
if (i)
printf("\r\n\nERROR INITIALIZING FAT\r\n\n");
// main loop
while(TRUE)
{
i = 0;
DisplayPrompt();
do
{
buffer[i] = getch();
// check for a backspace
if(buffer[i] != 8)
{
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
46
printf("%c", buffer[i]);
i++;
}
else if(i > 0)
{
// delete the last character
i--;
putc(8);
putc(' ');
putc(8);
}
buffer[i] = '\0';
} while(buffer[i - 1] != '\r');
// parse the command and options
cmd = GetCMD(buffer);
option1 = GetOption(cmd + strlen(cmd) + 1);
option2 = GetOption(option1 + strlen(option1) + 1);
//if option1 starts with a '/', that means the file in the option includes
//the full path to the file. if the file doesn't start with a '/', the
//current working directory must be added.
if (option1 && (option1[0]=='/'))
{
//option1 is a full path
strcpy(opt_buffer, option1);
}
else if (option1)
{
// tack on the current working directory to option1
strcpy(opt_buffer, g_CWD);
strcat(opt_buffer, option1);
}
if (cmd)
{
switch(FindCommand(cmd))
{
case 0: //del
DeleteFile(opt_buffer);
break;
case 1: //make
MakeFile(opt_buffer);
break;
case 2: //append
AppendFile(opt_buffer, option2);
break;
case 3: //change directory
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
47
ChangeDirectory(opt_buffer);
break;
case 4: //show directory contents
DisplayDirectory(g_CWD);
break;
case 5: //cat, display file
PrintFile(opt_buffer, CAT_FROM_START);
break;
case 6: //tail, display last 80 charachters
PrintFile(opt_buffer, CAT_FROM_END);
break;
case 7: //mkdir, make a directory
MakeDirectory(opt_buffer);
break;
case 8: //rmdir, make a directory
RemoveDirectory(opt_buffer);
break;
case 9: //format, format the card
FormatMedia(option1);
break;
case 10: //help, display help
ShowHelp();
break;
default:
printf("\r\nUnkown Command '%s'", cmd);
break;
}
}
}
}
Nạp vào Mạch mô phỏng, kiểm tra kết quả.
Nạp vào mạch thật, kiểm chứng kết quả có trùng khớp với mình mong muốn
hay không.
1.4. Ghi chép số liệu, kết quả thực hành
1.5. Chuẩn bị của sinh viên:
- Đọc và nghiên cứu bài thực hành
- Đọc và nghiên cứu lý thuyết có liên quan đến nội dung bài thực hành
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
THIẾT KẾ HỆ THỐNG NHÚNG TRÊN NỀN FPGA
48
- Chuẩn bị các vật dụng, giấy vở ghi chép số liệu thực hành
- Mạch máy tính nhúng, phần lập trình nhúng.
- Sự chuẩn bị của sinh viên phải được thông qua kiểm tra của người hướng dẫn thực
hành. Nếu không đạt, sẽ không được tham gia thực hành và có được thực hành tiếp
vào buổi khác hay không sẽ do Bộ môn và Ban chủ nhiệm khoa giải quyết.
Phần II. VIẾT BÁO CÁO THỰC HÀNH
2.1. Quy định chung:
Báo cáo thực hành được viết một mặt trên khổ giấy A4, đóng quyển, bìa mềm
(theo mẫu ...). Mỗi sinh viên có một quyển báo cáo riêng.
2.2. Nội dung báo cáo:
2.2.1. Cơ sở lý thuyết
Phân tích cơ sở lý thuyết như mục 1.2.
2.2.2. Báo cáo kết quả thực hành
- Mỗi sinh viên (nhóm sinh viên) thiết kế 01 mạch (sơ đồ nguyên lý, phần lập
trình nhúng) ngẫu nhiên đã được chuẩn bị trước ở mục 1.4, trên phần mềm
Proteus và PICC Compile.
- Tổng hợp những kết quả chính cho nội dung báo cáo
- Phân tích sơ đồ nguyên lý, mã lệnh
- Lập bảng trạng thái đầu vào, đầu ra (nếu có)
- Nhận xét kết quả:
+ Các kết quả thu được từ thực hành
+ So sánh kết quả thực hành với lý thuyết
+ Mức độ kết quả đạt được so với yêu cầu đề ra
+ Đánh giá các sai số của dụng cụ, thiết bị thực hành, người thao tác...
- Kiến nghị.
Phần III. ĐÁNH GIÁ CHẤM ĐIỂM, BẢO VỆ THỰC HÀNH
Bộ môn hay tập thể hướng dẫn thực hành tổ chức đánh giá điểm thực hành thông
qua lựa chọn một trong những hình thức sau:
- Chấm điểm dựa trên nội dung bản báo cáo thực hành của từng sinh viên
- Chấm điểm theo hình thức bảo vệ vấn đáp.
Điểm thực hành của sinh viên được tổng hợp theo lớp có chữ ký xác nhận Trưởng bộ môn
chuyên môn.
Bộ môn Kỹ thuật Máy tính, Khoa Điện Tử
49
TÀI LIỆU THAM KHẢO
1. Bài giảng Hệ thống nhúng, Bộ môn Kỹ thuật Máy tính
2. Bài giảng vi xử lý – vi điều khiển, bộ môn Kỹ thuật Máy tính
3. Bình, N. T. (2008). Bài giảng: Các kỹ thuật đặc tả. Đại học Bách khoa Đà nẵng.
4. Công, N. H. (2007). Hệ thống nhúng và sự phát triển của lĩnh vực công nghệ cao "3C".
ĐH KTCN Thái Nguyên.
5. John Regehr, Assist.Prof.Dr.Osman Kaan EROL. (2009). Embedded System Design.
6. Việt, T. L. (2008). HỆ THỐNG ĐIỀU KHIỂN NHÚNG. Hà Nội: ĐH BKHN.
7. Wikipedia. (2010). Retrieved from Wikipedia, Bách khoa toàn thư mở:
Các file đính kèm theo tài liệu này:
- Unlock-thi_nghiem_htn_bai_1_6_10_2011__5016.pdf