LỜI MỞ ĐẦU
Để đơn giản trong việc thiết kế số, người thiết kế cần một ngôn ngữ chuẩn để mô
tả các mạch điện. Từ đó Hardware Description Languages (HDLs) hay còn gọi là ngôn
ngữ mô tả phần cứng ra đời. Ngôn ngữ mô tả phần cứng (HDL) là một loại ngôn ngữ
để thể hiện các thiết kế Phần cứng thông qua bằng các phát biểu bằng lời.
Có 2 ngôn ngữ thông dụng: Verilog HDL và VHDL. Ngôn ngữ mô tả phần cứng
ngày càng thông dụng được đánh dấu sự phát triển mạnh mẽ của hệ thống nhúng.
Nắm được tầm quan trọng của vấn đề cùng với định hướng giáo viên hướng dẫn
đề ra nhóm chúng em tiến hành nghiên cứu và triển khai hệ thồng nhúng trên kit
Spartan-3E, với mong muốn là xây dựng được mô hình “Giám sát và điều khiển thiết
bị theo nhiệt độ phòng ” và lấy đó làm đề tài tốt nghiệp cho mình.
Nội dung đề tài bao gồm những phần sau:
Tìm hiểu về cấu trúc kít
Vi điều khiển nhúng Microblaze
Tìm hiểu về phần mềm EDK
Thiết kế ứng dụng nhúng trên kit
Mặc dù đã cố gắng để hoàn thành tập đề tài, nhưng không tránh khỏi những thiếu
sót mong quí thầy cô thông cảm. Rất mong được sự góp ý của thầy cô.
MỤC LỤC
Trang
Chương 1: GIỚI THIỆU VỀ CHIP FPGA VÀ NGÔN NGỮ ĐẶC TẢ PHẦN
CỨNG VHDL . .1
1.1 KHÁI QUÁT VỀ CHIP FPGA: . .1
1.1.1 Khái niệm: . 1
1.1.2 Ứng dụng: . .2
1.2 NGÔN NGỮ ĐẶC TẢ PHẦN CỨNG VHDL: . .2
1.2.1 Giới thiệu: . .2
1.2.2 Cấu trúc một file VHDL: . 3
1.2.3 Cấu trúc từ vựng: . .4
1.2.4 Các đối tượng dữ liệu trong VHDL: . .5
1.2.5 Kiểu dữ liệu: . 6
1.2.6 Các lệnh tuần tự: . 10
Chương 2: CẤU TRÚC KIT SPARTANT-3E, VI ĐIỀU KHIỂN MICROBLAZE
VÀ PHẦN MỀM EDK CỦA HÃNG XILINK . 14
2.1 CẤU TRÚC KIT SPARTANT-3E CỦA XILINX: . 14
2.1.1 Các thành phần chính của kit SPARTANT - 3E: . 14
2.1.2 Bộ tạo xung clock cho FPGA: . .15
2.1.3 Các nút chuyển nút nhấn và Led: . 15
2.1.4 Khối LCD: . .17
2.1.5 Bộ biến đổi tương tự sang số: . 18
2.2 VI ĐIỀU KHIỂN NHÚNG MICROBLAZE: . .23
2.2.1 Giới thiệu về vi điều khiển Microblaze: . 23
2.2.2 Kiến trúc cơ bản của MicrroBlaze: . 24
2.2.3 Kiến trúc Pipeline của vi điều khiển MicroBlaze: . .25
2.2.4 Giao tiếp tính hiệu trong MicroBlaze: . 25
2.3 PHẦN MỀM EDK: . 27
2.3.1 Giới thiệu Phần mềm EDK: . 27
2.3.2 Các tập lệnh trong EDK: . .27
2.3.3 Cách tạo Project với phần mềm EDK: . 32
Chương 3: PHẦN MỀM VB VÀ GIAO DIỆN ĐIỀU KHIỂN . .39
3.1 GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH VB.NET: . .39
3.2 LẬP TRÌNH GIAO TIẾP CỔNG NỐI TIẾP VB.NET: . .39
3.2.1 Tự động dò tìm cổng COM: . .39
3.2.2 Đóng mở cổng COM: . .39
3.2.3 Nhận dữ liệu từ cổng COM: . .40
3.2.4 Gửi dữ liệu ra cổng COM: . .40
3.2.5 Cài đặt tham số cho cổng COM: . .41
3.2.6 Viết chương trình: . .41
Chương 4: TRIỂN KHAI XÂY DỰNG HỆ THỐNG NHÚNG TRÊN KIT
SPARTANT 3E . .53
4.1 SƠ ĐỒ TỔNG QUÁT VỀ ỨNG DỤNG NHÚNG: . 53
4.2 XÂY DỰNG CÁC CHIP NHÚNG: . .54
4.2.1 Khối cảm biến nhiệt: . .54
4.2.2 Khối điều khiển Camera: . .58
4.3 XÂY DỰNG CÁC ỨNG DỤNG NHÚNG: . .61
4.3.1 Sơ đồ giải thuật: . .61
KẾT LUẬN . .70
PHỤ LỤC CÁC TỪ VIẾT TẮC . 71
DANH MỤC TÀI LIỆU THAM KHẢO . .72
80 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2886 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Đề tài Nghiên cứu và triển khai hệ thồng nhúng trên kit Spartan - 3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 hoặc 2)
Data: giá trị để ghi lên thanh ghi dữ liệu tạ vị trí con trỏ đang trỏ tới.
Chú ý:
Hàm không có gái trị trả về.
Nếu hàm này không sử dụng kênh 1, thì phần cứng phải được xây dựng ở chế
độ kênh đôi.
XGpio_Discreteset(XGpio * InstancePtr, unsigned Channel, u32 Mask)
Chức năng:
Định các đầu ra riêng biêt lên mức logic 1, tương ứng với 1 kênh được chon
của thiết bị.
Thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2)
Mask:set các bit ngõ ra lên mức cao, các bit khác của thanh ghi dữ liệu không
bị ảnh hưởng.
XGpio_Discreteclear(XGpio * InstancePtr, unsigned Channel, u32 Mask)
Chức năng:
Định các đầu ra riêng biệt xuống mức logic 0, tương ứng với 1 kênh được chọn
của thiết bị.
Thông số:
InstancePtr: là con trỏ chỉ tới ngoại vi đang làm việc.
Channel: bao gồm 2 kênh (1 hoặc 2)
Mask:set các bit ngõ ra xuống mức thấp, các bit khác của thanh ghi dữ liệu
không bị ảnh hưởng.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 30
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XGpio_mGetDataReg(BaseAddress, Channel)
Chức năng:
Lấy dữ liệu của một thanh ghi của một kênh đã được xác định.
Thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
Channel: bao gồm 2 kênh (1 hoặc 2).
Chú ý:
Hàm trả về giá trị dữ liệu 32bits
XGpio_mReadReg(BaseAddress, RegOffset)
Chức năng:
Đọc một giá trị từ thanh ghi GPIO. Kết quả thu được một dữ liệu 32bits. Nếu
thiết bị hoạt động với độ rộng bit nhỏ hơn 32bits thì chỉ có lấy những bit có trọng số
nhỏ, các bit còn lại sẽ là bit 0.
Thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
RegOffset: địa chỉ của thanh ghi được đọc cách địa chỉ nền một khoảng
XGpio_mWriteReg(BaseAddress, RegOffset, Data)
Chức năng:
Ghi một giá trị từ thanh ghi GPIO, một dữ liệu 32bits được ghi. Nếu thiết bị
hoạt động với độ rộng bit nhỏ hơn 32bits thì chỉ có lấy những bit có trọng số nhỏ hơn
mới được ghi.
Thông số:
BaseAddress: chứa địa chỉ nền của thiết bị GPIO.
RegOffset: địa chỉ của thanh ghi được ghi cách địa chỉ nền một khoảng.
Data: dữ liệu được ghi vào thanh ghi.
XUartLite_ClearStats(XUartLite *InstancePtr)
Chức năng:
Đưa về không các số liệu của các phần cứng được chỉ tới.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 31
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XUartLite_DisableInterrupt(XUartLite *InstancePtr)
Chức năng:
Hàm này có tác dụng vô hiệu hóa các ngắt khi truyền dẫn nối tiếp. Sau khi hàm
này được gọi thì việc nhận các dữ liệu nối tiếp sẽ không gặp phải bất cứ ngắt nào.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
XUartLite_EnableInterrupt(XUartLite *InstancePtr)
Chức năng:
Hàm này cho phép các ngắt được hoạt động trong quá trình nhận và truyền dữ
liệu nối tiếp. Đối với một thiết bị có chứa 16 byte để truyền nhận dữ liệu theo kiểu
FIFO thì bất cứ lúc nào cũng có thể có ngắt được cho phép trong quá trình truyền nhận
dữ liệu.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
XUartLite_IsSending(XUartLite *InstancePtr)
Chức năng:
Hàm sẽ xác định liệu thiết bị truyền dẫn nối tiếp được chỉ ra có đang gửi dữ liệu
hay không. Nếu thanh ghi truyền dẫn không bỏ trống tức là nó đang gửi dữ liệu.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
Chú ý:
Hàm trả về giá trị đúng khi thiết bị đang gửi dữ liệu, ngược lại là sai.
XUartLite_ResetFifos(XUartLite *InstancePtr)
Chức năng:
Hàm có tác dụng reset bộ nhớ FIFO, việc truyền và nhận dữ liệu sẽ bị xóa. Hàm
này có thể được sử dụng trong các ứng dụng nhằm xóa các dữ liệu không mong muốn
trong bộ nhớ FIFO.
Thông số:
InstancePtr: con trỏ chỉ tới thiết bị truyền dẫn nối tiếp.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 32
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XUartLite_RecvByte(u32 BaseAddress)
Chức năng:
Hàm nhận một byte đơn từ cổng truyền dẫn nối tiếp. Hàm đọc giá trị 8 bits từ
thanh ghi nhận.
Thông số:
BaseAddress: là địa chỉ nền của thiết bị được xác định.
Chú ý:
Hàm trả lại giá trị byte mong muốn.
XUartLite_RecvByte(u32 BaseAddress, u8 Data )
Chức năng:
Hàm gửi đi một byte đơn qua cổng truyền dẫn nối tiếp. Hàm sẽ ghi giá trị 8 bits
vào thanh ghi truyền.
Thông số:
BaseAddress: là địa chỉ nền của thiết bị được xác định.
Data : byte dữ liệu gửi đi.
Tạo hệ thống phần cứng cơ bản trong XPS (Xilinx Platform Studio): khi các bạn
cho chạy chương trình EDK thì một cửa sổ xuất hiên gọi là cửa sổ XPS, chúng ta sẽ
bắt đầu tạo Project ở đây, màn hình khởi đông chương trình như sau :
2.3.3 Cách tạo Project với phần mềm EDK:
Hình 2.10: Cửa sổ XPS
Trong hôp thoại đầu tiên xuất hiện, cho phép chúng ta thao tác cơ bản :
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 33
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Base System Builder Wizard :hộp thoại này sẽ cho phép chúng ta tao một Project
mới.
Open A Recent Project : mở một Project đã có sẵn. Ở đây sẽ bắt đầu với bước tạo
một Project mới: nhấn Ok khi hôp chọn ở Base System…, hộp thoại tiếp theo sẽ hiện
ra:
Hình 2.11: Hộp thoại Create New XPS Project
Ở hộp thoại này, phần mềm sẽ yêu cầu đặt tên cho thư mục chứa Project và các
thư mục liên quan, nhần Browse và tạo một thư mục với một đường dẫn cụ thể, ở đây,
mình sẽ đặt tên cho thư mục doan, lưu ý nhấn Open 2 lần, chương trình sẽ tự động tạo
ra file doan.xmp trong thư mục chúng ta vừa tạo.
Click Next xuất hiện hộp thoại Select Board, lần lượt chọn:
Board vendor: Xilinx
Board name: Spartan-3E Starter Board
Board revision: C
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 34
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.12: Hộp thoại Select Board
Click Next xuất hiện hộp thoại Select Processor.
Hình 2.13: Hộp thoại Select Processor
Click Next xuất hiện hộp thoại Configure MicroBlaze Processor. Lần lượt
chọn
Reference clock frequency: 50 MHz
Processor–Bus clock frequency: 50 MHz
Debug interface: On-Chip H/W debug module
Local Data and Instruction memory: 8 KB
Cache setup: Enable - unchecked
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 35
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.14: Hộp thoại Configure MicroBlaze Processor
Click Next xuất hiện hộp thoại Configure IO Interfaces, đánh dấu chọn
RS232_DCE và LEDs_8Bit.
RS232_DCE: 115200 bits per second, 8 data bits, no parity, no interrupt
LEDs_8Bit: XPS GPIO peripheral, no interrupt.
Tương tự chọn ngoại vi Dip_switchs_4bit và các ngoại vi khác bỏ trống.
Hình 2.15: Hộp thoại Configure IO Interfaces
Click Next cho đến khi xuất hiện hộp thoại Add Internal Peripherals. Bạn có
thể click Add Peripheral để thêm ngoại vi.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 36
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Click Next xuất hiện hộp thoại Software Setup, cho phép Memory test được
chọn và không chọn Peripheral selftest.
Hình 2.16: Hộp thoại Software Setup
Click Next xuất hiện hộp thoại Configure Memory Test Application.
Hình 2.17: Hộp thoại Configure Memory Test Application
Click Next xuất hiện hộp thoại System Created, tổng kết phần cứng mà ta vừa
tạo ra.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 37
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.18: Hộp thoại System Created
Click Generate, xuất hiện hộp thoại Finish.
Click Finish để kết thúc quá trình tạo project. Nếu hộp thoại Next Step
xuất hiện thì chọn muc Start Using Platform Studio và click OK.
Cửa sổ System Assembly View1 xuất hiện, thể hiện sự kết nối của hệ
thống ngoại vi và hệ thống bus.
Hình 2.19: Cửa sổ System Assembly View
Chọn Project → Generate and View Block Diagram để thể hiện sơ đồ khối phần
cứng.
Chương 2: Cấu trúc kit SPARTANT-3E, vi điều khiển MICROBLAZE và phần mềm EDK 38
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hình 2.20: Block Diagram View of the Generated Project
Như vậy ta đã xây dựng xong phần cứng cơ bản. Trong thực tế, nếu người dùng
cần thêm ngoại vi cho thiết kế thì có nhiều cách thêm ngoại vi (có hướng dẫn trong
video kèm theo).
Chương 3: Phần mền VB và giao diện điều khiển 39
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Chƣơng 3: PHẦN MỀM VB VÀ GIAO DIỆN ĐIỀU KHIỂN
3.1 GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH VB.NET:
Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng
(Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không.
Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà
là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft ‟s .NET Framework. Do
đó, nó cũng không phải là VB phiên bản 7.
Thật sự, đây là ngôn ngữ lập trình mới, không những lập nền tảng vững chắc
theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác như C++, Java
mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những
vấn đề khúc mắc khi lập trình.
3.2 LẬP TRÌNH GIAO TIẾP CỔNG NỐI TIẾP VB.NET:
3.2.1 Tự động dò tìm cổng COM:
Tự động dò tìm cổng COM và add vào listbox, sử dụng đoạn mã sau:
Sub GetSerialPortNames()
' Show all available COM ports.
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Hoặc đoạn mã sau:
For n As Integer = 0 To _
My.Computer.Ports.SerialPortNames.Count - 1
cbport.Items.Add( _
My.Computer.Ports.SerialPortNames(n))
3.2.2 Đóng mở cổng COM:
Để mở cổng COM sử dụng đoạn lệnh sau:
If SerialPort1.IsOpen Then
SerialPort1.Close() ’ đóng cổng COM
SerialPort1.Open() ’ mở cổng COM
Else
Chương 3: Phần mền VB và giao diện điều khiển 40
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
SerialPort1.Open()
End If
3.2.3 Nhận dữ liệu từ cổng COM:
Khi có sự kiện nhận dữ liệu từ cổng COM sẽ hiển thị ra textbox. Dữ liệu
nhận được dạng string.
Private Sub SerialPort1_DataReceived(ByVal sender As Object,
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles
SerialPort1.DataReceived
Control.CheckForIllegalCrossThreadCalls = False
txtreceiver.Text = SerialPort1.ReadExisting
End Sub
Hoặc sử dụng hàm sau với cổng COM 1:
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
End Using
End Function
3.2.4 Gửi dữ liệu ra cổng COM:
Dữ liệu truyền đi mã ASCII.
Mã lệnh: phải mở cổng COM trước khi truyền dữ liệu.
SerialPort1.Write(Tx.Text)
Chương 3: Phần mền VB và giao diện điều khiển 41
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Hoặc sử dụng hàm sau:
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using
End Sub
3.2.5 Cài đặt tham số cho cổng COM:
Với cbbaud, cbdat, cbstop, cbport là các combobox. Và cài trước các tham số
(add item) vào các combox tương ứng.
Tốc độ baud:
SerialPort1.BaudRate = CInt(cbbaud.Text)
Số data bit:
SerialPort1.DataBits = CInt(cbdat.Text)
Số stop bit:
If cbstop.Text = 1 Then
SerialPort1.StopBits = IO.Ports.StopBits.One ‘ số stop bit là 1
ElseIf cbstop.Text = 1.5 Then
SerialPort1.StopBits = IO.Ports.StopBits.OnePointFive ‘ stop bit là
1.5
ElseIf cbstop.Text = 2 Then
SerialPort1.StopBits = IO.Ports.StopBits.Two ‘ stop bit là 2
Else
SerialPort1.StopBits = IO.Ports.StopBits.None ‘ không có stop bit
End If
3.2.6 Viết chƣơng trình:
Chương trình gồm hai chế độ hoạt động điều khiển thứ nhất là chế độ giám sát,
thứ hai là chế độ điều khiển.
Chế độ giám sát : nhận dữ liệu và hiển thị trạng thái các thiết bị, nhiệt độ, góc
xoay của camera theo một thông số được thiết lập thông qua chương trình từ trước.
Chương 3: Phần mền VB và giao diện điều khiển 42
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Chế độ điều khiển: điều khiển các thiết bị theo mong muốn của người dùng.
Chương trình có giao diện như bên dưới.
Hình 3.1: Giao diện điều khiển và giám sát trên máy tính
Chƣơng trình trên form điều khiển và giám sát:
Dim data As String
Dim tam As String
Dim achar As String
Dim Received As String
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Using tam As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM15")
Do
Dim Incoming As String = tam.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
Chương 3: Phần mền VB và giao diện điều khiển 43
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
End Using
Return returnStr
End Function
If SerialPort1.IsOpen Then
SerialPort1.Close()
End If
End Sub
Private Sub send()
If SerialPort1.IsOpen = True Then
If ((rdmodenhiet.Checked = False) And (rdmodegoc.Checked = False) And
(rdmodenhiet2.Checked = False)) Then
MsgBox("Pleases check", , "Warning")
Else
SerialPort1.Write(txtSend.Text)
'txtSend.Text = ""
End If
Else
MsgBox("Pleases connect COM", , "Warning")
rdmodenhiet.Checked = False
rdmodegoc.Checked = False
rdmodenhiet2.Checked = False
End If
'If SerialPort1.CDHolding = False Then
' MsgBox("Pleases connect terminal")
'End If
End Sub
Private Sub continue_start()
'khai bao cho toc do baud , databit stop bit
SerialPort1.Encoding = System.Text.Encoding.Default
SerialPort1.ReceivedBytesThreshold = 1
SerialPort1.BaudRate = CInt(Cblbaud.Text)
SerialPort1.DataBits = CInt(CblDatabit.Text)
' SerialPort1.ReceivedBytesThreshold = 1
If CDbl(CblStopbit.Text) = 1 Then
SerialPort1.StopBits = IO.Ports.StopBits.One
ElseIf CDbl(CblStopbit.Text) = 1.5 Then
SerialPort1.StopBits = IO.Ports.StopBits.OnePointFive
ElseIf CDbl(CblStopbit.Text) = 2 Then
SerialPort1.StopBits = IO.Ports.StopBits.Two
Else
SerialPort1.StopBits = IO.Ports.StopBits.None
End If
'------------------------------------------------------
lblSate.Text = "Connected"
PictureBox2.Visible = False
Chương 3: Phần mền VB và giao diện điều khiển 44
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
PictureBox3.Visible = True
If SerialPort1.IsOpen Then
SerialPort1.Close()
SerialPort1.PortName = cblPort.Text
'khai bao cho toc do baud , databit stop bit
SerialPort1.ReceivedBytesThreshold = 1
SerialPort1.BaudRate = CInt(Cblbaud.Text)
SerialPort1.DataBits = CInt(CblDatabit.Text)
'SerialPort1.ReceivedBytesThreshold = 1
If CDbl(CblStopbit.Text) = 1 Then
SerialPort1.StopBits = IO.Ports.StopBits.One
ElseIf CDbl(CblStopbit.Text) = 1.5 Then
SerialPort1.StopBits = IO.Ports.StopBits.OnePointFive
ElseIf CDbl(CblStopbit.Text) = 2 Then
SerialPort1.StopBits = IO.Ports.StopBits.Two
Else
SerialPort1.StopBits = IO.Ports.StopBits.None
End If
'--------------------------------------------------
SerialPort1.Open()
Else
SerialPort1.PortName = cblPort.Text
'khai bao cho toc do baud , databit stop bit
SerialPort1.ReceivedBytesThreshold = 1
SerialPort1.BaudRate = CInt(Cblbaud.Text)
SerialPort1.DataBits = CInt(CblDatabit.Text)
'SerialPort1.ReceivedBytesThreshold = 1
If CDbl(CblStopbit.Text) = 1 Then
SerialPort1.StopBits = IO.Ports.StopBits.One
ElseIf CDbl(CblStopbit.Text) = 1.5 Then
SerialPort1.StopBits = IO.Ports.StopBits.OnePointFive
ElseIf CDbl(CblStopbit.Text) = 2 Then
SerialPort1.StopBits = IO.Ports.StopBits.Two
Else
SerialPort1.StopBits = IO.Ports.StopBits.None
End If
'--------------------------------------------------
SerialPort1.Open()
End If
Timer3.Interval = 100
Timer3.Enabled = True
End Sub
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ToolStripButton1.Click
Chương 3: Phần mền VB và giao diện điều khiển 45
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
ToolStripButton2.Image =
System.Drawing.Image.FromFile("D:\netluanvan\start.bmp")
ToolStripButton2.Text = "Start"
Me.Hide()
SOTP_DUNG()
Form2.Show()
End Sub
Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ToolStripButton3.Click
exit_thoat()
End
End Sub
Private Sub SettingToolStripMenuItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles SettingToolStripMenuItem.Click
ToolStripButton2.Image =
System.Drawing.Image.FromFile("D:\netluanvan\start.bmp")
ToolStripButton2.Text = "Start"
Me.Hide()
SOTP_DUNG()
Form2.Show()
End Sub
Private Sub ExitToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles ExitToolStripMenuItem1.Click
ToolStripButton2.Image =
System.Drawing.Image.FromFile("D:\netluanvan\start.bmp")
ToolStripButton2.Text = "Start"
SOTP_DUNG()
End Sub
Private Sub ExitToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles ExitToolStripMenuItem2.Click
exit_thoat()
End
End Sub
Private Sub AboutAuthourToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
AboutAuthourToolStripMenuItem.Click
Dialog1.Show()
End Sub
Private Sub cmdSend_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles cmdSend.Click
send()
nhanthu.Text = ""
Received = ""
If SerialPort1.IsOpen = True Then
If rdmodenhiet.Checked = True Then
TxtStem.Text = txtSend.Text
Chương 3: Phần mền VB và giao diện điều khiển 46
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
txtSend.Text = ""
ElseIf rdmodegoc.Checked = True Then
txtSAngle.Text = txtSend.Text
txtSend.Text = ""
ElseIf rdmodenhiet2.Checked = True Then
Txtdv2.Text = txtSend.Text
txtSend.Text = ""
End If
End If
'SendSerialData(txtSend.Text)
End Sub
' ham send chuoi du lieu xuong cong com (cong com duoc chon la cblPort.Text)
Private Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using thu As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort(cblPort.Text)
thu.WriteLine(data)
End Using
End Sub
Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Timer2.Tick
lbltimer.Text = TimeString
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Control.CheckForIllegalCrossThreadCalls = False
achar = SerialPort1.ReadExisting
Received = Received & achar
nhanthu.Text = Received
If Received = "" Then
Else
If Mid(Received, Len(Received), 1) = "F" Or Mid(Received, Len(Received), 1)
= "Y" Then
'nhanthu.Text = Received
txtCAngle.Text = Mid(Received, 1, 3)
txtCtem.Text = Mid(Received, 4, 3)
If Mid(Received, 7, 1) = "M" Then
Picdevice1.Visible = True
ElseIf Mid(Received, 7, 1) = "N" Then
Picdevice1.Visible = False
End If
If Mid(Received, 8, 1) = "M" Then
Picdevice1.Visible = True
ElseIf Mid(Received, 8, 1) = "N" Then
Picdevice1.Visible = False
End If
Chương 3: Phần mền VB và giao diện điều khiển 47
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Received = ""
Exit Sub
Else
End If
End If
End Sub
'ketqua = Mid(chuoi, 3, 4)
Private Sub cmdprocess_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdprocess.Click
rdmodenhiet.Checked = False
rdmodegoc.Checked = False
rdmodenhiet2.Checked = False
If SerialPort1.IsOpen = True Then
SerialPort1.Write("C")
Timer1.Interval = 100
Timer3.Interval = 100
Timer1.Enabled = True
Timer3.Enabled = True
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End Sub
Private Sub cmdset_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdset.Click
Timer3.Enabled = False
Timer1.Enabled = False
If SerialPort1.IsOpen = True Then
SerialPort1.Write("I")
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End Sub
Private Sub cmdonoff_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
If SerialPort1.IsOpen = True Then
SerialPort1.Write("F")
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End Sub
Private Sub cmdmode_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdmode.Click
Timer3.Enabled = False
Timer1.Enabled = False
Chương 3: Phần mền VB và giao diện điều khiển 48
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
If cmdmode.Text = "Manual" Then
If SerialPort1.IsOpen = True Then
SerialPort1.Write("D")
cmdmode.Text = "Auto"
Timer4.Interval = 100
Timer4.Enabled = True
'ChDevice1.Checked = True
'ChDevice2.Checked = True
Else
MsgBox("Pleases connect COM", , "Warning")
End If
Else
If SerialPort1.IsOpen = True Then
Timer3.Interval = 100
Timer3.Enabled = True
SerialPort1.Write("E")
cmdmode.Text = "Manual"
Timer4.Interval = 100
Timer4.Enabled = False
ChDevice1.Checked = False
ChDevice2.Checked = False
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End If
End Sub
Private Sub cmdstop_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdstop.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Write("G")
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End Sub
Private Sub cmdrun_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdrun.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Write("H")
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End Sub
Private Sub rdmodenhiet_CheckedChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles rdmodenhiet.CheckedChanged
If rdmodenhiet.Checked = True Then
Chương 3: Phần mền VB và giao diện điều khiển 49
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
If SerialPort1.IsOpen = True Then
SerialPort1.Write("A")
Else
rdmodenhiet.Checked = False
rdmodegoc.Checked = False
rdmodenhiet2.Checked = False
MsgBox("Pleases connect COM", , "Warning")
End If
End If
End Sub
Private Sub rdmodegoc_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles rdmodegoc.CheckedChanged
If rdmodegoc.Checked = True Then
If SerialPort1.IsOpen = True Then
SerialPort1.Write("B")
Else
rdmodenhiet.Checked = False
rdmodegoc.Checked = False
rdmodenhiet2.Checked = False
MsgBox("Pleases connect COM", , "Warning")
End If
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Timer1.Tick
nhanthu.Text = ""
Received = ""
SerialPort1.Write("Z")
'Timer1.Enabled = False
Timer1.Interval = 100
Timer1.Enabled = False
End Sub
Private Sub Timer3_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Timer3.Tick
If nhanthu.Text = "" Then
Else
If Mid(nhanthu.Text, Len(nhanthu.Text), 1) = "F" Then
Timer1.Interval = 100
Timer1.Enabled = True
End If
End If
End Sub
Private Sub Timer4_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Timer4.Tick
If nhanthu.Text = "" Then
Else
Chương 3: Phần mền VB và giao diện điều khiển 50
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
If Mid(nhanthu.Text, Len(nhanthu.Text), 1) = "Y" Then
Timer1.Interval = 100
Timer1.Enabled = True
End If
End If
End Sub
Private Sub rdmodenhiet2_CheckedChanged(ByVal sender As System.Object, Private
Sub ChDevice1_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ChDevice1.CheckedChanged
If cmdmode.Text = "Manual" Then
ChDevice1.Checked = False
Else
If SerialPort1.IsOpen = True Then
If Picdevice1.Visible = True Then
Picdevice1.Visible = False
Else
Picdevice1.Visible = True
End If
SerialPort1.Write("F")
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End If
End Sub
Private Sub ChDevice2_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles ChDevice2.CheckedChanged
If cmdmode.Text = "Manual" Then
ChDevice2.Checked = False
Else
If SerialPort1.IsOpen = True Then
If Picdevice2.Visible = True Then
Picdevice2.Visible = False
Else
Picdevice2.Visible = True
End If
SerialPort1.Write("L")
Else
MsgBox("Pleases connect COM", , "Warning")
End If
End If
End Sub
Private Sub ChDevice3_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles ChDevice3.CheckedChanged
If ChDevice3.Checked = True Then
Chương 3: Phần mền VB và giao diện điều khiển 51
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
If SerialPort1.IsOpen = True Then
SerialPort1.Write("K")
End If
End Sub
Private Sub txtSend_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles txtSend.TextChanged
If (Len(txtSend.Text)) > 3 Then
MsgBox("Number only 3 charter", , "Warning")
txtSend.Text = Mid(txtSend.Text, 1, 3)
Else
End If
End Sub
End Class
Chương 3: Phần mền VB và giao diện điều khiển 52
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Giao diện và chƣơng trình Setting COM:
Hình 3.2: Giao diện form setting Com
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
MaximizeBox = False
For i As Integer = 0 To _
My.Computer.Ports.SerialPortNames.Count - 1
CboPort.Items.Add( _
My.Computer.Ports.SerialPortNames(i))
Next
'Form1.Hide()
End Sub
Private Sub cmdCancel_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdCancel.Click
Form1.Show()
Me.Hide()
End Sub
Private Sub CmdOk_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdOk.Click
Form1.Cblbaud.Text = CboBaud.Text
Form1.CblDatabit.Text = Cbodatabit.Text
Form1.CblStopbit.Text = CboStopbit.Text
Form1.CblFlow.Text = CboFlow.Text
Me.Hide()
End Sub
End Class
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 53
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
Chƣơng 4: TRIỂN KHAI XÂY DỰNG HỆ THỐNG NHÚNG TRÊN KIT
SPARTANT 3E
4.1 SƠ ĐỒ TỔNG QUÁT VỀ ỨNG DỤNG NHÚNG:
Hình 4.1: Sơ đồ tổng quát về ứng dụng nhúng
Giao
diện VB
IP cảm biến
nhiệt
Kit Spartan
3E
IC
cảm
biến
nhiệt
Thiết
bị
IP encoder
LCD
encode
r
Moto
camera
Cổng
nối
tiếp
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 54
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
4.2 XÂY DỰNG CÁC CHIP NHÚNG:
4.2.1 Khối cảm biến nhiệt:
Sơ đồ giải thuật:
Hình 4.2: Sơ đồ giải thuật Khối cảm biến nhiệt
Chƣơng trình:
TYPESTATE_TYPEis (RESET,CMD_CC,WRITE_BYTE,WRITE_LOW,
WRITE_HIGH,READ_BIT,CMD_44,WAIT800MS,CMD_BE
GET_TMP,WAIT4MS);
signal STATE: STATE_TYPE:=RESET;
signal temp_h : std_logic_vector(7 downto 0);
signal temp_l : std_logic_vector(7 downto 0);
signal clk_temp : std_logic:='0';
signal clk1m : std_logic;
signal write_temp : std_logic_vector(7 downto 0):="00000000";
signal TMP : std_logic_vector(11 downto 0);
signal tmp_bit : std_logic;
signal WRITE_BYTE_CNT : integer range 0 to 8:=0;
signal WRITE_LOW_CNT : integer range 0 to 2:=0;
signal WRITE_HIGH_CNT : integer range 0 to 2:=0;
signal READ_BIT_CNT : integer range 0 to 3:=0;
Begin
Reset DS1820
Ghi lệnh đổi nhiệt độ
Chờ 750ms
Gửi lệnh đọc nhiệt dộ
END
Reset DS1820
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 55
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
signal GET_TMP_CNT : integer range 0 to 12:=0;
signal cnt : integer range 0 to 100001:=0;
signal count : integer range 0 to 25:=0;
signal WRITE_BYTE_FLAG : integer range 0 to 4:=0;
------------------------------------------
-- Signals for user logic slave model s/w accessible register example
------------------------------------------
signal slv_reg0 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg_write_sel : std_logic_vector(0 to 0);
signal slv_reg_read_sel : std_logic_vector(0 to 0);
signal slv_ip2bus_data : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_read_ack : std_logic;
signal slv_write_ack : std_logic;
begin
--USER logic implementation added here
ClkDivider:process (clk)
begin
if rising_edge(clk) then
if (count = 24) then
count <= 0;
clk_temp<= not clk_temp;
else
count <= count +1;
end if;
end if;
clk1m<=clk_temp;
end Process;
STATE_TRANSITION:process(STATE,clk1m)
begin
when CMD_CC=>
write_temp<="11001100";
STATE<=WRITE_BYTE;
when WRITE_BYTE=>
case WRITE_BYTE_CNT is
when 0 to 7=>
if (write_temp(WRITE_BYTE_CNT)='0') then
STATE<=WRITE_LOW;
else
STATE<=WRITE_HIGH;
end if;
WRITE_BYTE_CNT<=WRITE_BYTE_CNT+1;
when 8=>
if (WRITE_BYTE_FLAG=0) then -- ????0XCC??
STATE<=CMD_44;
WRITE_BYTE_FLAG<=1;
elsif (WRITE_BYTE_FLAG=1) then --?0X44??
STATE<=RESET;
WRITE_BYTE_FLAG<=2;
elsif (WRITE_BYTE_FLAG=2) then --????0XCC??
STATE<=CMD_BE;
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 56
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
WRITE_BYTE_FLAG<=3;
elsif (WRITE_BYTE_FLAG=3) then --?0XBE??
STATE<=GET_TMP;
WRITE_BYTE_FLAG<=0;
end if;
WRITE_BYTE_CNT<=0;
end case;
when WRITE_LOW=>
case WRITE_LOW_CNT is
when 0=>
dq_O<='0';
if (cnt=78) then
cnt<=0;
WRITE_LOW_CNT<=1;
else
cnt<=cnt+1;
end if;
when 1=>
dq_O<='Z';
if (cnt=2) then
cnt<=0;
WRITE_LOW_CNT<=2;
else
cnt<=cnt+1;
end if;
when 2=>
STATE<=WRITE_BYTE;
WRITE_LOW_CNT<=0;
when others=>WRITE_LOW_CNT<=0;
end case;
when WRITE_HIGH=>
case WRITE_HIGH_CNT is
when 0=>
dq_O<='0';
if (cnt=8) then
cnt<=0;
WRITE_HIGH_CNT<=1;
else
cnt<=cnt+1;
end if;
when 1=>
dq_O<='Z';
if (cnt=72) then
cnt<=0;
WRITE_HIGH_CNT<=2;
else
cnt<=cnt+1;
end if;
when 2=>
STATE<=WRITE_BYTE;
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 57
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
WRITE_HIGH_CNT<=0;
when others=>WRITE_HIGH_CNT<=0;
end case;
when READ_BIT=>
case READ_BIT_CNT is
when 0=>
when 1=>
dq_O<='Z';
cnt<=cnt+1;
end if;
when others=>READ_BIT_CNT<=0;
end case;
when CMD_44=>
write_temp<="01000100";
STATE<=WRITE_BYTE;
when WAIT800MS=>
if (cnt>=100000) then
STATE<=RESET;
cnt<=0;
else
cnt<=cnt+1;
STATE<=WAIT800MS;
end if;
when CMD_BE=>
write_temp<="10111110";
STATE<=WRITE_BYTE;
when GET_TMP=>
case GET_TMP_CNT is
when 0 to 11=>
STATE<=READ_BIT;
TMP(GET_TMP_CNT)<=TMP_BIT;
GET_TMP_CNT<=GET_TMP_CNT+1;
when 12=>
GET_TMP_CNT<=0;
STATE<=WAIT4MS;
end case;
when WAIT4MS=>
if (cnt>=4000) then
STATE<=RESET;
cnt<=0;
else
cnt<=cnt+1;
STATE<=WAIT4MS;
end if;
when others=>STATE<=RESET;
end case;
end if;
end process;
end IMP
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 58
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
4.2.2 Khối điều khiển Camera:
Sơ đồ giải thuật:
Hình 4.3: Sơ đồ giải thuật khối điều khiển Camera
Chƣơng trình:
entity user_logic is
port
(
-- ADD USER PORTS BELOW THIS LINE ------------------
--USER ports added here
CONTR : out std_logic_vector(0 to 1);
EN_CLK : in std_logic;
-- ADD USER PORTS ABOVE THIS LINE ------------------
-- DO NOT EDIT BELOW THIS LINE ---------------------
Begin
Nhận số xung chuẩn
Nạp cho counter
Counter <= counter - 1
Xung
encoder
Có
Không
có
Cập nhật số xung đã
đếm lên phần mềm
Counter
= 0
không
đúng
Đổi chiều quay moto
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 59
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
-- Bus protocol ports, do not add to or delete
Bus2IP_Clk : in std_logic;
Bus2IP_Reset : in std_logic;
Bus2IP_Data : in std_logic_vector(0 to C_SLV_DWIDTH-1);
Bus2IP_BE : in std_logic_vector(0 to C_SLV_DWIDTH/8-1);
Bus2IP_RdCE : in std_logic_vector(0 to C_NUM_REG-1);
Bus2IP_WrCE : in std_logic_vector(0 to C_NUM_REG-1);
IP2Bus_Data : out std_logic_vector(0 to C_SLV_DWIDTH-1);
IP2Bus_RdAck : out std_logic;
IP2Bus_WrAck : out std_logic;
IP2Bus_Error : out std_logic
-- DO NOT EDIT ABOVE THIS LINE ---------------------
);
attribute SIGIS : string;
attribute SIGIS of Bus2IP_Clk : signal is "CLK";
attribute SIGIS of Bus2IP_Reset : signal is "RST";
end entity user_logic;
------------------------------------------------------------------------------
-- Architecture section
------------------------------------------------------------------------------
architecture IMP of user_logic is
--USER signal declarations added here, as needed for user logic
signal counter :STD_LOGIC_vector(6 downto 0):="0000000";
signal tam : STD_LOGIC_vector(1 downto 0):= "01";
signal tam1 : STD_LOGIC_vector(6 downto 0);
signal temp : STD_LOGIC_vector(6 downto 0);
signal temp_pulse : STD_LOGIC_vector(6 downto 0);
--------------------------------------------------
-- Signals for user logic slave model s/w accessible register example
--------------------------------------------------
signal slv_reg0 : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_reg_write_sel : std_logic_vector(0 to 0);
signal slv_reg_read_sel : std_logic_vector(0 to 0);
signal slv_ip2bus_data : std_logic_vector(0 to C_SLV_DWIDTH-1);
signal slv_read_ack : std_logic;
signal slv_write_ack : std_logic;
begin
tam1 <= temp;
CONTR <= tam;
DEM_PRO : PROCESS (EN_CLK,tam,counter) is
begin
if (EN_CLK' event and EN_CLK = '1') then
if (counter >0) then
counter <=counter-1;
else
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 60
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
counter<=tam1;
if (tam="10")then
tam <="01";
else
tam <="10";
end if;
end if;
end if;
end process DEM_PRO;
XUNG_PROC : process( Bus2IP_Clk ) is
begin
if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
if Bus2IP_Reset = '1' then
temp <= temp;
else
if Bus2IP_WrCE(0) = '1' then
temp <= Bus2IP_Data(25 to 31);
end if;
end if;
end if;
end process XUNG_PROC;
end IM
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 61
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
4.3 XÂY DỰNG CÁC ỨNG DỤNG NHÚNG:
4.3.1 Sơ đồ giải thuật:
Khối điều khiển camera:
Hình 4.4: Sơ đồ giải thuật khối điều khiển camera giao tiếp vb
Khối điều khiển điều khiển nhiệt độ:
Hình 4.5: Sơ đồ giải thuật khiển điều khiển nhiệt độ giao tiếp vb
Chƣơng trình lập trình:
#include "xparameters.h"
#include "xgpio.h"
#include "xgpio_l.h"
#include "xutil.h"
#include "xuartlite_l.h"
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 62
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
#define NHIET_BASEADDR XPAR_NHIET_IP_0_BASEADDR
#define LCD_BASEADDR XPAR_LCD_IP_0_BASEADDR //
#define LED_BASEADDR XPAR_LEDS_8BIT_BASEADDR
#define ADC_BASEADDR XPAR_ADC_IP_0_BASEADDR
#define INIT_DELAY 1000 //delay time during initiaton
#define INST_DELAY 500 //delay tim between instructons
#define DATA_DELAY 250 //delay time between data packages
//====================================================
// INTERNAL FUNCTIONS
// delay function
void usleep(unsigned int delay)
{
unsigned int j, i;
for(i=0; i<delay; i++)
for(j=0; j<26; j++);
}
// initial statements is in the form of manufacturer
void XromInitInst(void)
{
XGpio_mSetDataReg(LCD_BASEADDR, 1, 0x00000003);
usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, 0x00000043); //set enable
usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, 0x00000003);
usleep(INIT_DELAY);// delay used for initialization
}
void XromWriteInst(unsigned long inst1, unsigned long inst2)
{
unsigned long printinst;
printinst = 0x00000040 | inst1;
XGpio_mSetDataReg(LCD_BASEADDR, 1, inst1);
usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, printinst); //set enable and send 4-bit
higher
usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, inst1); //turn off enable
usleep(1);
printinst = 0x00000040 | inst2;
XGpio_mSetDataReg(LCD_BASEADDR, 1, printinst); usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, inst2); //turn off enable
usleep(INST_DELAY);//delay used for writing commands
}
// writing data with: E=1, RS=1, RW=0
void XromWriteData(unsigned long data1, unsigned long data2)
{
unsigned long rs_data, enable_rs_data;
rs_data = (0x00000020 | data1); //contain RS=1
enable_rs_data = (0x00000060 | data1);//contain E=1, RS=1
XGpio_mSetDataReg(LCD_BASEADDR, 1, rs_data);
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 63
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, enable_rs_data); usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, rs_data); //turn off enable
usleep(1);
rs_data = (0x00000020 | data2); //sets rs, data2
enable_rs_data = (0x00000060 | data2); //sets rs, data2
XGpio_mSetDataReg(LCD_BASEADDR, 1, enable_rs_data); // usleep(1);
XGpio_mSetDataReg(LCD_BASEADDR, 1, rs_data); //turn off enable
usleep(DATA_DELAY);//delay used for writing data
}
// EXTERNAL FUNCTIONS
//set the position of cursor
void XromMoveCursorHome()
{
XromWriteInst(0x00000000, 0x00000002);//write code: 0000.0010, return home
}
void XromMoveCursorLeft()
{
XromWriteInst(0x00000001, 0x00000000);//write code: 0001.0000, shirf the cursor
toward left
}
void XromMoveCursorRight()
{
XromWriteInst(0x00000001, 0x00000004); //write code: 0001.0100, shirf the cursor
toward right
}
void XromLCDOn()
void XromLCDOff()
{
//xil_printf("DISPLAY OFF\r\n");
XromWriteInst(0x00000000, 0x00000008);//writing code: 0000.1000, put out the
screen and //cursor, remain the DRAM
}
void XromLCDClear()
{
//xil_printf("DISPLAY CLEAR\r\n");
XromWriteInst(0x00000000, 0x00000001);//code: 0000.0001, clear the screen and
DRAM
XromWriteInst(0x00000000, 0x00000010);//0000.0000, with E=1, RW=1, RS=0,
read BF status
XromMoveCursorHome();//return home
}
void XromLCDInit()
{
XGpio_mSetDataDirection(LCD_BASEADDR, 1, 0x00000000);
XGpio_mSetDataReg(LCD_BASEADDR, 1, 0x00000000); usleep(15000);
XromInitInst();
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 64
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
usleep(4100); //Wait 4.1ms
XromInitInst();
usleep(100); //Wait 100us
XromInitInst();
XromInitInst();
XromWriteInst(0x00000002, 0x00000008);//code: 0010.1000, display the 4-bit
protocol, two- line, 5x8-type
XromWriteInst(0x00000000, 0x00000006);//code: 0000.0110, increase AC when
writing, not shirf the displayed data.
XromWriteInst(0x00000000, 0x00000008);
XromWriteInst(0x00000000, 0x0000000F);
XromWriteInst(0x00000000, 0x00000001);
}
void XromLCDSetLine(int line)
{
XromMoveCursorHome();
for(i=0; i<40; i++)
XromMoveCursorRight();//after shirfing forty characters, th cursor is at the
beginning of the second line
}
else
XromMoveCursorHome();//in the case displaying on the first line
}
//display a character
void XromLCDPrintChar(char c)
{
XromWriteData(((c >> 4) & 0x0000000F), (c & 0x0000000F));
}
//display a string on the first line
void XromLCDPrintString(char * line)
{
int i=0;
while(line[i])
{
XromLCDPrintChar(line[i]);
i++;
}
return;
}
// display two string on two lines
void XromLCDPrint2Strings(char * line1, char * line2)
{
int i=0;
XromLCDSetLine(1);
for(i=0; i<16; i++)
{
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 65
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
if(line1[i])
XromLCDPrintChar(line1[i]);
else break;
}
XromLCDSetLine(2);
for(i=0; i<16; i++)
{
if(line2[i])
XromLCDPrintChar(line2[i]);
else break;
}
return;
}
// //////////////////// MAIN ////////////////////////////////////////
main()
{
extern char a[3];
extern char b;
unsigned char adc;
XGpio DIP_Switches_4Bit, push, LEDs_8bit;
int i,ketqua,ketqua1, ketqua2, c1, c2, c3, tam, hien, hien1, tam1, tam2, tam3, tam4,
tam5, tam6, tam7, goc_chuan, so_xung, devi1_32bit, devi2_32bit, nhiet_chuan1,
nhiet_chuan2, cua_cotr,
nhiet, nhiet1, nhiet32bit,nhiet_chuan, sta_quay, quay32bit, angle1, angle11,
angle2, angle22, angle3, angle33, cur_angle, so_xung1, dk1, dk2;
XGpio_Initialize(&LEDs_8bit, XPAR_LEDS_8BIT_DEVICE_ID);
XGpio_SetDataDirection(&LEDs_8bit, 1, 0x000000ff);
XromLCDInit();
XromLCDOn();
XromLCDClear();
XromLCDPrintString("Embedded Systems");
sta_quay = 0x00000003;
XGpio_mSetDataReg(XPAR_ENCODER0_IP_0_BASEADDR + 0x4,1,sta_quay);
again1:
XromLCDSetLine(2);
XromLCDPrintString("nhiet do22:");
nhiet = XGpio_mGetDataReg (NHIET_BASEADDR,1);
tam = nhiet / 10;
hien = 0x00000030 + tam;
XromLCDPrintChar(hien);
tam1 = nhiet % 10;
hien = 0x00000030 + tam1;
XromLCDPrintChar(hien);
XromLCDPrintString("oC");
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 66
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
while (!XUartLite_mIsReceiveEmpty(STDIN_BASEADDRESS))
{
b = XUartLite_RecvByte(STDIN_BASEADDRESS);
tam1 = b + 0x00000000;
switch(tam1)
{
case 0x00000041:
goto nhietdevi1;
case 0x0000004a:
goto nhietdevi2;
case 0x00000042:
goto quay;
case 0x00000043:
goto xuly;
}
goto again1;
}
goto again1;
quay:
i = 0;
quay1:
a[i] = XUartLite_RecvByte(STDIN_BASEADDRESS);
quay32bit = a[i] + 0x00000000;
switch(i)
{
case 2:
{
c1 = quay32bit & 0x0000000f;
ketqua = c1 + c2 + c3;
goc_chuan = ketqua;
so_xung = goc_chuan / 4;
i = 0;
XromLCDPrintString("vu");
goto again1;
break;
}
case 1:
{
c2 = quay32bit & 0x0000000f;
c2 = c2 * 10;
break;
}
case 0:
{
c3 = quay32bit & 0x0000000f;
c3 = c3 * 100;
break;
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 67
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
}
i= i+1;
goto quay1;
}
goto quay;
nhietdevi1:
i = 0;
a[i] = XUartLite_RecvByte(STDIN_BASEADDRESS);
devi1_32bit = a[i] + 0x00000000;
switch(i)
{
case 2:
{
c1 = devi1_32bit & 0x0000000f;
ketqua1 = c1 + c2 + c3;
nhiet_chuan1 = ketqua1;
i = 0;
goto again1;
break;
}
case 1:
{
c2 = devi1_32bit & 0x0000000f;
c2 = c2 * 10;
break;
}
case 0:
{
c3 = devi1_32bit & 0x0000000f;
c3 = c3 * 100;
}
}
i= i+1;
goto nhietdevi11;
goto nhietdevi1;
nhietdevi2:
i = 0;
a[i] = XUartLite_RecvByte(STDIN_BASEADDRESS);
devi2_32bit = a[i] + 0x00000000;
xuly:
XromLCDClear();
XromLCDPrintString("Embedded Systems");
XromLCDSetLine(2);
nhiet = XGpio_mGetDataReg (NHIET_BASEADDR,1);
tam = nhiet / 10;
hien1 = 0x00000030 + tam;
tam1 = nhiet % 10;
hien = 0x00000030 + tam1;
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 68
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
XGpio_mSetDataReg(XPAR_ENCODER0_IP_0_BASEADDR,1,so_xung);
XGpio_mSetDataReg(XPAR_ENCODER0_IP_0_BASEADDR + 0x4,1,sta_quay);
so_xung1 = XGpio_mGetDataReg (XPAR_ENCODER0_IP_0_BASEADDR + 0x8,1);
cur_angle = (so_xung - so_xung1) * 4;
angle1 = cur_angle / 100;
angle11 = 0x00000030 + angle1;
angle2 = (cur_angle / 10) - (angle1 * 10);
angle22 = 0x00000030 + angle2;
angle3 = cur_angle - (angle1 * 100) + (angle2 * 10);
angle33 = 0x00000030 + angle3;
xil_printf("%c", 0x00000046);
xuly1:
XromLCDSetLine(2);
nhiet = XGpio_mGetDataReg (NHIET_BASEADDR,1);
tam = nhiet / 10;
hien1 = 0x00000030 + tam;
tam1 = nhiet % 10;
hien = 0x00000030 + tam1;
XGpio_mSetDataReg(XPAR_ENCODER0_IP_0_BASEADDR,1,so_xung);
XGpio_mSetDataReg(XPAR_ENCODER0_IP_0_BASEADDR + 0x4,1,sta_quay);
so_xung1 = XGpio_mGetDataReg (XPAR_ENCODER0_IP_0_BASEADDR + 0x8,1);
cur_angle = (so_xung - so_xung1) * 4;
XromLCDSetLine(2);
angle1 = cur_angle / 100;
angle11 = 0x00000030 + angle1;
XromLCDPrintChar(angle11);
angle2 = (cur_angle / 10) - (angle1 * 10);
angle22 = 0x00000030 + angle2;
XromLCDPrintChar(angle22);
angle3 = cur_angle - ((angle1 * 100) + (angle2 * 10));
angle33 = 0x00000030 + angle3;
XromLCDPrintChar(angle33);
if (nhiet <= nhiet_chuan1)
dk1 = 0x0000004d;// mo thiet bi 1 (M)
tam3 = 0x00000003;
XGpio_mSetDataReg (XPAR_LEDS_8BIT_BASEADDR,1,0x00000003);
}
else
{
dk1 = 0x0000004e;//dong thiet bi 1 (N)
tam3 = 0x00000000;
XGpio_mSetDataReg (XPAR_LEDS_8BIT_BASEADDR,1,0x00000000);
}
if (nhiet <= nhiet_chuan2)
{
dk2 = 0x0000004d;//dong thiet bi 2 (M)
tam6 = 0x0000000c;
XGpio_mSetDataReg (XPAR_LEDS_8BIT_BASEADDR,1,tam6 + tam3);
}
else
Chương 4: Triển khai xây dựng hệ thống nhúng trên kit SPARTANT 3E 69
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
{
dk2 = 0x0000004e;//dong thiet bi 2 (N)
tam6 = 0x00000000;
XGpio_mSetDataReg (XPAR_LEDS_8BIT_BASEADDR,1,tam6 + tam3);
}
b = XUartLite_RecvByte(STDIN_BASEADDRESS);
tam4 = b + 0x00000000;
if(tam4 == 0x00000044)//ngat che do tu dong(D)
{
xil_printf ("Y");
xuly2:
nhiet = XGpio_mGetDataReg (NHIET_BASEADDR,1);
tam = nhiet / 10;
hien1 = 0x00000030 + tam;
tam1 = nhiet % 10;
hien = 0x00000030 + tam1;
angle1 = cur_angle / 100;
angle11 = 0x00000030 + angle1;
sta_quay = 0x00000000;
goto xuly1;
goto xuly1;
}
else if (tam4 == 0x0000005a)// ma cho phep gui len(Z)
{
goto xuly1;
}
else
goto xuly1;
}
goto xuly1;
}
KẾT LUẬN 70
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
KẾT LUẬN
Theo nhận định chủ quan của nhóm thực hiện thì tập đồ án này đã trình bày các
nội dung, những kiến thức liên quan, giải quyết đƣợc những yêu cầu đặt ra như sau:
Hiểu được khái niệm hệ thống nhúng và tầm quan trọng của hệ thống
nhúng ngày nay.
Hiểu và biết cách sử dụng phần mềm EDK của hãng Xilinx.
Sử dụng được vi điều khiển Microblaze.
Vận dụng kiến thức để xây dựng những ứng dụng nhúng bằng phần mềm
EDK trên kit SPARTAN 3E của hãng Xilinx.
Tuy nhiên do thời gian cũng như trình độ chuyên môn có hạn vẫn còn nhiều vấn
đề mà nhóm vẫn chƣa giải quyết đƣợc.
Chưa khai thác hết những tiện ích của phần mềm EDK và kit SPARTAN
3E.
Chưa phát triển những ứng dụng nhúng ở mức độ cao hơn.
Hƣớng phát triển đề tài:
Để đề tài này thêm phong phú và tăng hiệu quả sử dụng thì cần đáp ứng được
những yêu cầu sau:
Tìm hiểu để xây dựng hệ thống nhúng trên những kit khác nhau.
Xây dựng các ứng dụng nhúng ở mức độ cao hơn, như nhúng uClinux vào
kit với phần mềm EDK và vi điều khiển Microblaze ,..đặc biệt là có khă
năng ứng dụng trong thực tế.
Sau cùng một lần nữa chúng em xin chân thành cảm ơn Cô Phạm Trần Bích
Thuận cùng qúy thầy cô trong khoa đã tận tình hướng dẫn chúng em.
Chân thành cảm ơn các bạn sinh viên đã đóng góp những ý kiến quí báu để đề
tài này hoàn thành tốt đẹp.
PHỤ LỤC CÁC TỪ VIẾT TẮC 71
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
PHỤ LỤC CÁC TỪ VIẾT TẮC
ADC: Analog digital converter.
BTN_EAST : Button east.
BRAM: block RAM.
Bus IF: Bus interface.
CPLD : Complex Programable Logic Device.
DAC: Digital analog converter.
DCM: Digital Clock Manager.
DCR: Device Control Register.
DLMB: Data-side Local Memory Bus.
DOPB: Data-side On-chip Peripheral Bus.
EDK: Embedded Development Kit.
EDIF: Electronic Data Interchange Format file.
EST: Embedded System Tools.
FPGA: Field Programable Gate Arrays .
FSL: MicroBlaze Fast Simplex Link.
GDB: GNU Debugger.
GPIO General Purpose Input and Output.
HDL: Hardware Description Language.
ILMB: Instruction-side Local Memory Bus.
IP: Intellectual property.
IOPB: Instruction-side On-chip Peripheral Bus.
OCM: On Chip Memory.
RISC : Reduced Instruction Set Computer.
UART: Universal Asynchronus receiver
transmitter.
UCF: User Constraints File.
XCL: Xilinx® CacheLink.
XMD: Xilinx Microprocessor Debug.
DANH MỤC TÀI LIỆU THAM KHẢO 72
GVHD: Phạm Trần Bích Thuận SVTH: Nguyễn Ngọc Vũ – Võ Xuân Văn
DANH MỤC TÀI LIỆU THAM KHẢO
1) Công nghệ vi điện tử –Phạm Trần Bích Thuận,
TP.HCM.
2) EDK_Tutorial, www.xilinx.com
3) MicroBlaze Tutorial,
4) MicroBlaze Overview ,
Các file đính kèm theo tài liệu này:
- Nghiên cứu và triển khai hệ thồng nhúng trên kit Spartan-3E, xây dựng mô hình Giám sát và điều khiển thiết bị theo nhiệt độ phòng.pdf