Tải bản đầy đủ (.pdf) (8 trang)

Bai tap hệ thống nhúng và cách giải chi tiết

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (197.95 KB, 8 trang )

Câu 1: (2 điểm):
1. Hãy trình bày về pha phân tích trong quy trình thiết kế Top-Down.
2. Hãy trình bày về pha thiết kế nguyên lý trong quy trình thiết kế Top-Down.
3. Hãy trình bày về pha thiết kế kỹ thuật trong quy trình thiết kế Top-Down.
4. Hãy trình bày về pha xây dựng hệ thống trong quy trình thiết kế Top-Down.
5. Hãy trình bày về pha kiểm thử trong quy trình thiết kế Top-Down.
Câu 2: (3 điểm):
Xây dựng sơ đồ tổng thể của hệ thống khóa số tự động cho cửa nhà riêng.
Xây dựng sơ đồ tổng thể của hệ thống đóng mở cửa tự động.
Xây dựng sơ đồ tổng thể của hệ thống điều khiển ổn định nhiệt độ phịng trong mùa đơng.
Xây dựng sơ đồ tổng thể của hệ thống đếm sản phẩm trong dây truyền sản xuất.
Xây dựng sơ đồ tổng thể của hệ thống chuông báo giảng đường tự động.
(Kèm theo đặc tả khối).
Câu 3: (5 điểm)
1.
2.
3.
4.
5.

1. Vẽ sơ đồ ghép nối một vi điều khiển PIC 18F452 với các thiết bị như sau. Chân RA0 nối
với cảm biến nhiệt độ LM35, nguồn nuôi là Vcc. Chân RC6, RC7 nối với một bộ
truyền/nhận nối tiếp RS232. Chân RB4÷RB7 nối với 4 nút bấm được nối lên 5V. Chân
RD0÷RD7 nối qua 8 LED đơn, qua trở, xuống GND
Viết chương trình điều khiển cho vi điều khiển PIC18F452 trong sơ đồ trên thực hiện liên tục
theo yêu cầu sau:
-

-

Mỗi khi phím B4 được bấm thì đọc giá trị 8 bit ở kênh AN0 của ADC và xuất ra cổng


RD.
Mỗi khi phím B5 được bấm thì đọc giá trị nhiệt độ ở cảm biến LM35, tính tốn nhiệt
độ thực tế và xuất ra cổng RS232 chuỗi “Nhiet do: <nhiệt độ>”. Trong đó <nhiệt độ>
là nhiệt độ thực tế đo được. Biết rằng giải đo của LM35 là -50 ÷ 150oC, điện áp ra là
tuyến tính. Điện áp tham chiếu Vref+ = Vcc, Vref- =GND.
Việc kiểm tra phím bấm thực hiện bằng ngắt.
Thông số truyền của RS232 là: Tốc độ 4800 baud, 8 bit dữ liệu, không parity, 1 bit
stop.

2. Vẽ sơ đồ ghép nối một vi điều khiển PIC 18F452 với các thiết bị như sau. Chân RA0 nối
với cảm biến trọng lượng (điện áp ra tuyến tính trong dải 0..100mV). Chân RC6, RC7 nối
với một bộ truyền/nhận nối tiếp RS232. Chân RB7 với một cảm biến đếm sản phẩm (tích
cực mức 1). Chân RD0÷RD7 nối với 2 led 7 đoạn qua IC giải mã BCD 7447.
Viết chương trình điều khiển cho vi điều khiển PIC18F452 trong sơ đồ trên thực hiện liên tục
theo yêu cầu sau:
-

Mỗi khi có một sản phẩm đi qua thì tăng biến đếm và hiển thị số đếm được lên led 7
đoạn. Đồng thời đọc giá trị cảm biến trọng lượng, tính tốn trọng lượng thực tế và
truyền ra cổng RS232 chuỗi “San pham thu <số sp> co trong luong <trọng lượng>”.
Trong đó <số sp> là số sản phẩm đếm được, <trọng lượng> là trọng lượng đo được


-

Biết rằng giải đo của cảm biến trọng lượng là 0 ÷ 50kg. Điện áp tham chiếu Vref+ =
Vcc, Vref- =GND.
Việc kiểm tra đếm sản phẩm thực hiện bằng ngắt.
Thông số truyền của RS232 là: Tốc độ 9600 baud, 8 bit dữ liệu, không parity, 1 bit
stop.


3. Vẽ sơ đồ ghép nối một vi điều khiển PIC 18F452 với các thiết bị như sau. Chân RA0 nối
với cảm biến nhiệt độ LM35. Chân RC6, RC7 nối với một bộ truyền/nhận nối tiếp
RS232. RD0,RD1,RD2 lần lượt nối với 3 led đơn màu Xanh, Vàng và Đỏ.
Viết chương trình điều khiển cho vi điều khiển PIC18F452 trong sơ đồ trên thực hiện liên tục
sau mỗi 500ms theo yêu cầu sau:
-

-

Đo nhiệt độ thực tế T. Nếu T < 50oC thì bật đèn xanh, nếu 50oC ≤ T ≤ 60oC thì bật
đèn vàng, nếu T > 60oC thì bật đèn đỏ.
Xuất ra cổng RS232 chuỗi “Nhiet do: <nhiệt độ>”. Trong đó <nhiệt độ> là nhiệt độ
thực tế đo được. Biết rằng giải đo của LM35 là -50 ÷ 150oC. Điện áp tham chiếu Vref+
= Vcc, Vref- =GND.
Thông số truyền của RS232 là: Tốc độ 19200 baud, 8 bit dữ liệu, không parity, 1 bit
stop.
Chu kỳ 500ms được tính tốn bằng ngắt Timer0, thạch anh 20MHz


BÀI GIẢI:
Câu 3: (5 điểm)
CÂU 3(1). Vẽ sơ đồ ghép nối một vi điều khiển PIC 18F452 với các thiết bị như sau. Chân
RA0 nối với cảm biến nhiệt độ LM35, nguồn nuôi là Vcc. Chân RC6, RC7 nối với một bộ
truyền/nhận nối tiếp RS232. Chân RB4÷RB7 nối với 4 nút bấm được nối lên 5V. Chân
RD0÷RD7 nối qua 8 LED đơn, qua trở, xuống GND
Viết chương trình điều khiển cho vi điều khiển PIC18F452 trong sơ đồ trên thực hiện liên tục
theo yêu cầu sau:
-


-

Mỗi khi phím B4 được bấm thì đọc giá trị 8 bit ở kênh AN0 của ADC và xuất ra cổng
RD.
Mỗi khi phím B5 được bấm thì đọc giá trị nhiệt độ ở cảm biến LM35, tính tốn nhiệt
độ thực tế và xuất ra cổng RS232 chuỗi “Nhiet do: <nhiệt độ>”. Trong đó <nhiệt độ>
là nhiệt độ thực tế đo được. Biết rằng giải đo của LM35 là -50 ÷ 150oC, điện áp ra là
tuyến tính. Điện áp tham chiếu Vref+ = Vcc, Vref- =GND.
Việc kiểm tra phím bấm thực hiện bằng ngắt.
Thơng số truyền của RS232 là: Tốc độ 4800 baud, 8 bit dữ liệu, không parity, 1 bit
stop.

Sơ đồ:
U2

1

U1
13
1

27.0

VOUT

3

B4
B5
B6

B7

2

LM35

2
3
4
5
6
7
14
33
34
35
36
37
38
39
40

C1
15
16
17
18
23
24
25

26

OSC1/CLKI
MCLR/VPP

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2A
RC2/CCP1
RA0/AN0
RC3/SCK/SCL
RA1/AN1
RC4/SDI/SDA
RA2/AN2/VREFRC5/SDO
RA3/AN3/VREF+
RC6/TX/CK
RA4/T0CKI
RC7/RX/DT
RA5/AN4/SS/LVDIN
RA6/OSC2/CLKO
RD0/PSP0
RD1/PSP1
RB0/INT0
RD2/PSP2
RB1/INT1
RD3/PSP3
RB2/INT2
RD4/PSP4
RB3/CCP2B
RD5/PSP5
RB4

RD6/PSP6
RB5/PGM
RD7/PSP7
RB6/PGC
RB7/PGD
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7

1

10u

C1+
11
12
10
9

19
20
21
22
27
28
29
30
8
9
10


T1OUT
R1IN
T2OUT
R2IN
VS+
VS-

R4
10k

C2

D6

D5

D4

D3

D2

D1

D0

D7

D8


D7

D6

D5

D4

D3

D2

D1

LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW

R1
280

ERROR

5


10u

10k

2
6

DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI

COMPIM

R3
10k
10k
R5

1
6
2
7
3
8

4
9

14
13
7
8

C2-

PIC18F452

R2

P1

C1-

T1IN
R1OUT
T2IN
R2OUT

D0
D1
D2
D3
D4
D5
C2+

D6
MAX232
D7
4

U3

3

C3

C4

10u

10u


#include <18F452.h>
#device adc=8
#use delay(oscillator=11059200)
#use rs232(baud=4800,xmit=PIN_C6,rcv=PIN_C7)
int8 Butt, iAD;
float fAD;
#int_RB
void RB_isr(void){
Butt=input_b();
Butt=(Butt>>4)&0x0F;
}
void main()

{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
set_tris_b(0xFF);
set_tris_d(0);
set_adc_channel(0);
while(TRUE)
{
switch(Butt){
case 1: output_d(read_adc()); break;
case 2: iAD=read_adc();
fAD=(iAD*200.0)/255.0;
printf("Nhiet do=%6.2f",fAD);
break;
case 4: break;
case 8: break;
}
Butt=0;
delay_ms(10);
}
}


Câu 3.2. Vẽ sơ đồ ghép nối một vi điều khiển PIC 18F452 với các thiết bị như sau. Chân
RA0 nối với cảm biến trọng lượng (điện áp ra tuyến tính trong dải 0..100mV). Chân RC6,
RC7 nối với một bộ truyền/nhận nối tiếp RS232. Chân RB7 với một cảm biến đếm sản phẩm
(tích cực mức 1). Chân RD0÷RD7 nối với 2 led 7 đoạn qua IC giải mã BCD 7447.
Viết chương trình điều khiển cho vi điều khiển PIC18F452 trong sơ đồ trên thực hiện liên tục

theo yêu cầu sau:
-

-

Mỗi khi có một sản phẩm đi qua thì tăng biến đếm và hiển thị số đếm được lên led 7
đoạn. Đồng thời đọc giá trị cảm biến trọng lượng, tính toán trọng lượng thực tế và
truyền ra cổng RS232 chuỗi “San pham thu <số sp> co trong luong <trọng lượng>”.
Trong đó <số sp> là số sản phẩm đếm được, <trọng lượng> là trọng lượng đo được
Biết rằng giải đo của cảm biến trọng lượng là 0 ÷ 50kg. Điện áp tham chiếu Vref+ =
Vcc, Vref- =GND.
Việc kiểm tra đếm sản phẩm thực hiện bằng ngắt.
Thông số truyền của RS232 là: Tốc độ 9600 baud, 8 bit dữ liệu, không parity, 1 bit
stop.

Sơ đồ:
-12v

C1
1

4
LoadCell
0..100mV

R6

U2:A

3


10k
13
1

1
2
LM324

11

0..5V

R7

RV1

+12v
50%

10k
200k

R2
10k

2
3
4
5

6
7
14
33
34
35
36
37
38
39
40

LDR1
TORCH_LDR

U1
OSC1/CLKI
MCLR/VPP

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2A
RC2/CCP1
RA0/AN0
RC3/SCK/SCL
RA1/AN1
RC4/SDI/SDA
RA2/AN2/VREFRC5/SDO
RA3/AN3/VREF+
RC6/TX/CK
RA4/T0CKI

RC7/RX/DT
RA5/AN4/SS/LVDIN
RA6/OSC2/CLKO
RD0/PSP0
RD1/PSP1
RB0/INT0
RD2/PSP2
RB1/INT1
RD3/PSP3
RB2/INT2
RD4/PSP4
RB3/CCP2B
RD5/PSP5
RB4
RD6/PSP6
RB5/PGM
RD7/PSP7
RB6/PGC
RB7/PGD
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7

15
16
17
18
23
24
25

26

11
12
10
9

10u

U3

3

C1+

C1-

T1IN
R1OUT
T2IN
R2OUT

T1OUT
R1IN
T2OUT
R2IN
VS+
VS-

19

20
21
22
27
28
29
30

D0
D1
D2
D3
D4
D5
D6
D7

C2+

C2-

4

5

P1
1
6
2
7

3
8
4
9

14
13
7
8
2
6

DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI

ERROR

MAX232

C2

COMPIM

C3


C4

10u

10u

10u

8
9
10

R1

PIC18F452

R3

220

220

U4
D0
D1
D2
D3

7

1
2
6
4
5
3

A
B
C
D
BI/RBO
RBI
LT
7447

U5
QA
QB
QC
QD
QE
QF
QG

13
12
11
10
9

15
14

D4
D5
D6
D7

7
1
2
6
4
5
3

A
B
C
D
BI/RBO
RBI
LT
7447

QA
QB
QC
QD
QE

QF
QG

13
12
11
10
9
15
14


#include <18F452.h>
#device adc=8
#use delay(oscillator=11059200)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
int8 iDem,Butt,iKL;
float fKL;
#int_RB
void RB_isr(void){
Butt=input_b();
Butt=(Butt>>4)&0x0F;
}
void main(){
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
set_tris_b(0xFF);
set_tris_d(0);

set_adc_channel(0);
while(TRUE)
{
switch(Butt){
case 1: break;
case 2: break;
case 4: break;
case 8:
iDem++;
output_d(iDem);
iKL=read_adc();
fKL=(iKL*50.0)/255.0;
printf("San pham thu:%3u co trong luong:%6.2f",iDem,fKL);
break;
}
Butt=0;
delay_ms(10);
}
}


BÀI 3.3. Vẽ sơ đồ ghép nối một vi điều khiển PIC 18F452 với các thiết bị như sau. Chân
RA0 nối với cảm biến nhiệt độ LM35. Chân RC6, RC7 nối với một bộ truyền/nhận nối tiếp
RS232. RD0,RD1,RD2 lần lượt nối với 3 led đơn màu Xanh, Vàng và Đỏ.
Viết chương trình điều khiển cho vi điều khiển PIC18F452 trong sơ đồ trên thực hiện liên tục
sau mỗi 500ms theo yêu cầu sau:
Đo nhiệt độ thực tế T. Nếu T < 50oC thì bật đèn xanh, nếu 50oC ≤ T ≤ 60oC thì bật
đèn vàng, nếu T > 60oC thì bật đèn đỏ.
- Xuất ra cổng RS232 chuỗi “Nhiet do: <nhiệt độ>”. Trong đó <nhiệt độ> là nhiệt độ
thực tế đo được. Biết rằng giải đo của LM35 là -50 ÷ 150oC. Điện áp tham chiếu Vref+

= Vcc, Vref- =GND.
- Thông số truyền của RS232 là: Tốc độ 19200 baud, 8 bit dữ liệu, không parity, 1 bit
stop.
Chu kỳ 500ms được tính tốn bằng ngắt Timer0, thạch anh 20MHz.
-

Sơ đồ:
U2

VOUT

3

2

LM35

2
3
4
5
6
7
14
33
34
35
36
37
38

39
40

U1

C1
15
16
17
18
23
24
25
26

OSC1/CLKI
MCLR/VPP

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2A
RC2/CCP1
RA0/AN0
RC3/SCK/SCL
RA1/AN1
RC4/SDI/SDA
RA2/AN2/VREFRC5/SDO
RA3/AN3/VREF+
RC6/TX/CK
RA4/T0CKI
RC7/RX/DT

RA5/AN4/SS/LVDIN
RA6/OSC2/CLKO
RD0/PSP0
RD1/PSP1
RB0/INT0
RD2/PSP2
RB1/INT1
RD3/PSP3
RB2/INT2
RD4/PSP4
RB3/CCP2B
RD5/PSP5
RB4
RD6/PSP6
RB5/PGM
RD7/PSP7
RB6/PGC
RB7/PGD
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
PIC18F452

10u

C1-

T1IN
R1OUT
T2IN

R2OUT

T1OUT
R1IN
T2OUT
R2IN

D0
D1
D2
D3
D4
D5
C2+
D6
MAX232
D7
4

VS+
VS-

D2

XANH

D1

P1
1

6
2
7
3
8
4
9

14
13
7
8
2
6

DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI

C2ERROR

C2
10u

VANG


U3

3

C1+

8
9
10

D3

280

11
12
10
9

19
20
21
22
27
28
29
30

DO


R1

1

D0

10k
13
1

50.0

D1

R6

D2

1

5

COMPIM

C3

C4

10u


10u


#include <18F452.h>
#device adc=8
#use delay(oscillator=20MHz)
#use rs232(baud=19200 ,xmit=PIN_C6,rcv=PIN_C7)
int8 Butt, iAD;
float fAD;
#int_TIMER0 // Timer 0 overflow (using TIMER0 name)
void TMR0_isr(void){
iAD=read_adc();
fAD=(iAD*200.0)/255.0;
if(fAD<50){
output_d(1); // Xanh
}else{
if(fAD>60){
output_d(4); // Do
}else{
output_d(2); // Vang
}
}
printf("Nhiet do=%6.2f",fAD);
set_timer0(26472);
}
void main()
{
setup_adc_ports(AN0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);

set_tris_b(0xFF);
set_tris_d(0);
set_adc_channel(0);
set_timer0(26472);
enable_interrupts(int_TIMER0);
enable_interrupts(GLOBAL);
while(TRUE){}
}

//840 ms overflow



×