Vùng phát hiện của SRF05 :
• Nếu ngưỡng để phát hiện đối tượng được đặt quá gần với cảm biến, các đối tượng trên một đường có thể bị va chạm tại một điểm mù. Nếu ngưỡng này được đặt ở một khoảng cách quá lớn từ các cảm biến thì đối tượng sẽ được phát hiện mà không phải là trên một đường va chạm.
• Một kỹ thuật phổ biến để làm giảm các điểm mù và đạt được phát hiện chiều rộng lớn hơn cự ly gần là thêm một cải tiến bằng cách thêm một đơn vị SRF05 bổ sung và gắn kết của hai đơn vị hướng về phía trước. Thiết lập như vậy thì có một khu vực mà hai khu vực phát hiện chồng chéo lên nhau.
d.Một số ứng dụng của SRF05 và bộ vi điều khiển.
Chế độ 1 hoạt động:
Trong sơ đồ sau đây, hai kỹ thuật số I/O pins của một BrainStem GP 2,0 được cấu hình để xử lý các ECHO và dòng Init của SRF05 module khác nhau. Pin ECHO là dây dẫn đến cổng số pin GP 1. Đây là dòng mà sẽ nhận được giá trị được đo bằng SRF05. Các pin ECHO phải có khả năng sử dụng các đầu vào Ptimer chụp để đo chiều rộng của xung được tạo ra bởi cá SRF05. Các pin Init là dây vào các chân lỹ thuật số GP 0, pin này sẽ gửi một xung 10uS để bắt đầu vỡ âm, mạch được hỗ trợ bởi một 6C Battery Pack.
Chế độ 2 hoạt động:
Trong sơ đồ sau đây, một pin duy nhất cổng số được sử dụng cho Init và cả đường ECHO của SRF05. Đối với sơ đồ này, init/ line ECHO là dây vào chân số 1 GP. Pin này có khả năng đo chuyển động của hệ thống.
29 trang |
Chia sẻ: hachi492 | Ngày: 07/01/2022 | Lượt xem: 474 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đồ án Phát triển thiết bị phân loại xe dựa trên chiều cao đặt tại cổng thu phí, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
ĐỀ TÀI: PHÁT TRIỂN THIẾT BỊ PHÂN LOẠI XE DỰA TRÊN CHIỀU CAO ĐẶT TẠI CỔNG THU PHÍ
Giảng viên hướng dẫn : TS. Nguyễn Tiến Dũng
Sinh viên thực hiện : Hoàng Đức Long
Lớp : ĐTVT 2-K55
MSSV : 20101795
Hà Nội T5 Ngày 9 Tháng 1 Năm 2014
Mục Lục
Trang
GIỚI THIỆU ĐỀ TÀI VÀ TÌM HIỂU VỀ MSP. page1
GIỚI THIỆU ĐỀ TÀI..page1
TÌM HIỂU VỀ MSP page1
TỔNG QUAN VỀ MSP...page1
CÁC DÒNG MSP..page4
THIẾT KẾ ĐỀ TÀI..page5
TỔNG QUAN VỀ MSP 430G2553page5
SƠ ĐỒ CHÂNpage6
CẤP NGUỒN CHO MẠCH...page8
TỔNG QUAN VỀ CẢM BIẾN SIÊU ÂM SRF05..page10
ĐẶC TÍNH KỸ THUẬT page10
CÁC CHẾ ĐỘ CHÂN CỦA SRF05 page10
HOẠT ĐỘNG PHÁT VÀ NHẬN PHẢN HỒI
SÓNG ÂM CƠ BẢN CỦA SRF05.page12
MỘT SỐ ỨNG DỤNG CỦA SRF05
VÀ VI ĐIỀU KHIỂN..page15
HIỂN THỊ LCDpage16
KẾT QUẢ..page17
MẠCH IN.page17
CODE LCD VỚI MSP.page18
Code SRF05 với MSP..page22
Giới thiệu đề tài và tìm hiểu về MSP
Giới thiệu đề tài
Hiện nay trên hệ thống quốc lộ nước ta có 59 trạm thu phí các loại. Trong đó 42 trạm thu phí do cá Khi quản lý Đường Bộ trực thuộc cục đường bộ Việt Nam quản lý; 6 trạm do Cục ủy quyền cho các sở GTVT/GTCC quản lý,2 trạm do UBND tỉnh quản lý và 9 trạm do các doanh nghiệp BOT quản lý.
Một thực trạng hiện nay là ở các trạm thu phí hiện nay chưa có tiêu chuẩn chung về chiều cao của từng loại xe. Dẫn đến không kiểm soát được các loại xe thực tế và phát sinh nhiều tiêu cực.
Vì vậy xác định,phát triển phân loại các loại xe dựa trên chiều cao của xe đặt tại các trạm thu phí là cơ sở cho việc xây dựng quy trình thu phí thuận tiện,an toàn và hiệu quả nhất cần phải được tiến hành.
Tìm hiểu về MSP
Tổng qua về MSP
MSP 430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởi công ty Texas Instruments. MSP là chữ viết tắt của “MIXED SIGNAL MICROCONTROLLER”. Là dòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng điện áp nguồn cấp từ 1.8V – 3.6V. MSP 430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các module ngoại vi. Đặc biệt Chíp MSP 430 là giải pháp thích hợp cho những ứng dụng yêu cầu trộn tín hiệu.
Những đặc tính của dòng MSP 430 bao gồm:
- Điện áp nguồn: 1.8V – 3.6 V.
- Mức tiêu thụ năng lượng cực thấp:
* Chế độ hoạt động: 270 μA tại 1MHz, 2,2 V.
* Chế độ chờ: 0.7 μA.
* Chế độ tắt (RAM vẫn được duy trì): 0.1 μA.
* Thời gian đánh thức từ chế độ Standby nhỏ hơn 1μs.
- Cấu trúc RISC-16 bit, Thời gian một chu kỳ lệnh là 62.5 ns
- Cấu hình các module Clock cơ bản:
* Tần số nội lên tới 16 MHz với 4 hiệu chỉnh tần số +- 1%.
* Thạch anh 32 KHz.
* Tần số làm việc lên tới 16 MHz.
* Bộ cộng hưởng.
* Nguồn tạo xung nhịp bên ngoài.
* Điện trở bên ngoài.
- Timer_A 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit
- Timer_B 16 bit với 3 thanh ghi hình, 3 thanh ghi so sánh độ rộng 16 bit
- Giao diện truyền thông nối tiếp:
* Hỗ trợ truyền thông nối tiếp nâng cao UART, tự động dò tìm tốc độ Baud.
* Bộ mã hóa và giải mã IrDA (Infrared Data Associatio).
* Chuẩn giao tiếp động bộ SPI.
* Chuẩn giao tiếp I2C.
- Bộ chuyển đổi ADC 10 bit, 200 ksps với điện áp tham chiếu nội, Lấy mẫu và chốt. Tự động quét kênh, điều khiển chuyển đổi dữ liệu.
- Hai bộ khuếch đại thuật toán (hoạt động) có thể định cấu hình (Đối với MSP 430x22x4).
- Bảo vệ sụt áp.
- Bộ nạp chương trình.
- Module mô phỏng trên chip.
- Các thành viên của dòng MSP 430 bao gồm:
- MSP430F2232: 8KB + 256B Flash Memory 512B RAM.
- MSP430F2252: 16KB + 256B Flash Memory 512B RAM.
- MSP430F2272: 32KB + 256B Flash Memory 1KB RAM.
- MSP430F2234: 8KB + 256B Flash Memory 512B RAM.
- MSP430F2254: 16KB + 256B Flash Memory 512B RAM.
- MSP430F2274: 32KB + 256B Flash Memory 1KB RAM.
MSP430 được sử dụng và biết đến đặc biệt trong những ứng dụng về thiết bị đo có sử dụng hoặc không sử dụng LCD với chế độ nguồn nuôi rất thấp. Với chế độ nguồn nuôi từ khoảng 1,8 đến 3,6v và 5 chế độ bảo vệ nguồn.
Với sự tiêu thụ dòng rất thấp trong chế độ tích cực thì dòng tiêu thụ là 200uA, 1Mhz, 2.2v; với chế độ standby thì dòng tiêu thụ là 0.7uA. Và chế độ tắt chỉ duy trì bộ nhớ Ram thì dòng tiêu thụ rất nhỏ 0.1uA.
MSP430 có ưu thế về chế độ nguồn nuôi. Thời gian chuyển chế độ từ chế độ standby sang chế độ tích cực rất nhỏ (< 6us). Và có tích hợp 96 kiểu hình cho hiển thị LCD. 16 bit thanh ghi, 16 bit RISC CPU.
Có một đặc điểm của họ nhà MSP là khi MCU không có tín hiệu dao động ngoại, thì MSP sẽ tự động chuyển sang hoạt động ở chế độ dao động nội.
Các dòng của MSP
MSP430 có 5 thế hệ chip, được gọi là 1xx, 2xx, 3xx, 4xx, 5xx. Thường là mấy số xx càng lớn thì chức năng + chân cẳng càng nhiều.
MSP430x1xx Series
o 1.8–3.6V
o Tốc độ Flash/ROM: 8 MIPS
o Feature Fast Wake-Up From Standby Mode in <6 μs
o Flash Options: 1–60 KB
o ROM Options: 1–16 KB
o RAM Options: 512 B –10 KB
o GPIO Options: 14, 22, 48 pins
o ADC Options: Slope, 10 & 12-bit SAR
o Other Integrated peripherals: Analog Comparator, DMA, Hardware Multiplier, SVS, 12-bit DAC
MSP430F2xx Series
Series 2xx cũng tương tự như 1xx nhưng tiêu thụ năng lượng ít hơn, tốc độ có thể lên tới 16MHz, đồng hồ on-chip có độ chính xác cao hơn (±2%) nên có thể hoạt động mà không cần thạch anh gắn ngoài.
o 1.8–3.6 V
o Tốc độ Flash/ROM: 16 MIPS
o Có tích hợp điện trở kéo lên/kéo xuống (pull-up/pull-down)
o Ultra-Fast Wake-Up From Standby Mode in <1 μs
o Device Parameters
o Flash Options: 1–120 KB
o RAM Options: 128 B–8 KB
o GPIO Options: 10, 16, 24, 32, 48, 64 pins
o ADC Options: Slope, 10 & 12-bit SAR, 16-bit Sigma Delta
o Other Integrated peripherals: Analog Comparator, Hardware Multiplier, DMA, SVS, 12-bit DAC, Op Amps
MSP430G2xx Series
Tương tự F2xx, chức năng ít hơn và giá thấp hơn:
o Flash Options: 0.5–16 KB
o RAM Options: 128–512 B
o GPIO Options: 10, 16, 24 pins
o ADC Options: Slope, 10-bit SAR
o Other Integrated peripherals: Analog Comparator
MSP430x3xx Series
Đây là thế hệ lâu đời nhất (già cả nhất) của dòng MSP430, tích hợp LCD controller. Không hỗ trợ EEPROM.
o Feature Fast Wake-Up From Standby Mode in <6 μs
o 2.5–5.5 V
o ROM Options: 2–32 KB
o RAM Options: 512 B–1 KB
o GPIO Options: 14, 40 pins
o ADC Options: Slope, 14-bit SAR
o Other Integrated peripherals: LCD controller, Hardware Multiplier
MSP430x4xx Series
Có tích hợp LCD controller, nhiều chức năng hơn 3xx.
o 1.8-3.6V
o FLL, SVS
o Feature Fast Wake-Up From Standby Mode in <6 μs
o Tốc độ Flash/ROM 8-16 MIPS.
o Flash/ROM Options: 4 kB – 120 KB
o RAM Options: 256 B – 8 KB
o GPIO Options: 14, 32, 48, 56, 68, 72, 80 pins
o ADC Options: Slope, 10 &12-bit SAR, 16-bit Sigma Delta
o LCD Controller, Analog Comparator, 12-bit DAC, DMA, Hardware Multiplier, Op Amp, USCI Modules.
MSP430x5xx Series
Tốc độ lên tới 25 MHz. Đây là dòng có mức tiêu thụ năng lượng thấp nhất trong họ MSP430, được tích hợp Module Giám sát Năng lượng (Power Management Module) để tối ưu điện năng tiêu thụ. Một số chip tích hợp USB.
o Fast Wake-Up From Standby Mode in <5 μs
o 1.8-3.6V
o Flash Options: up to 256 KB
o RAM Options: up to 16 KB
o ADC Options: 10 & 12-bit SAR
o USB, Analog Comparator, DMA, Hardware Multiplier, RTC, USCI, 12-bit DAC
Thiết kế đề tài.
TỔNG QUAN VỀ MSP430G2553.
Một kit LaunchPad gồm hai thành phần, với GND được phủ chung:
Nửa trên: Là phần mạch nạp theo chuẩn spy-bi-wire Jtag (2 dây), kết hợp với chuyển đổi giao tiếp UART với máy tính. Trên cùng là đầu USB mini để nối với máy tính, phía dưới là hàng Header để nối ra đối tượng cần giao tiếp, bao gồm các chân:
TXD, RXD: phục vụ giao tiếp UART với máy tính.
RST, TEST: phục vụ nạp và debug (sửa lỗi) theo chuẩn spy-bi-wire Jtag.
VCC: cấp nguồn 3.3V cho đối tượng (thường là nửa dưới LaunchPad).
Nửa dưới: là một mạch phát triển MSP430 đơn giản, bao gồm:
Socket cắm MSP430 (thường gắn sẵn chip MSP430G2553), Pad hàn thạch anh, nút nhấn Reset chip.
Nút nhấn gắn vào P1.3, hai Led hiển thị có jumper để gắn vào P1.0 và P1.6. Hai hàng header để kết nối hai hàng chân của chip ra ngoài, một hàng header nguồn GND-GND-VCC để lấy nguồn 3.3V trên LaunchPad.
Sơ đồ chân.
Chip MSP430 có kích thước nhỏ gọn , chỉ với 20 chân đối với kiểu chân DIP.
Bao gồm 2 port I/O (hay GPIO general purprose input/ output : cổng nhập xuất chung).
Ta thấy rằng mỗi port đều có 8 chân.
Port 1 : có 8 chân từ P1.0 đến P1.7 tương ứng với các chân từ 2-7 và 14 , 15.
Port 2 : cũng gồm có 8 chân P2.0 – P2.7 ứng với các chân 8 – 13 , 18,19.
Ngoài chức năng I/O thì trên mỗi pin của các port đều là những chân đa chức năng, ta thể thấy rõ trong bảng sau :
Cấp nguồn cho mạch main.
Việc cấp nguồn cho mạch main có thể tiến hành bằng 3 cách:
Cấp nguồn ngoài vào mạch Main:
Nguồn ngoài được cấp qua Domino J1 trong khối nguồn của mạch. Nguồn vào có thể là AC hay DC, dải điện áp từ 8V đến 30V. Với phương án này, tổng dòng tiêu thụ của mạch giới hạn ở khoảng 1A (giới hạn của 7805). Cụ thể, chúng ta có thể lựa chọn biến áp 220V/12-24V; các cục sạc (adapter) AC, DC 9V, 12V, 19V, ; Ac-quy 12-24V; Pin 9V,
Ngoài ra, nếu có nguồn DC 5V, 3V3 bên ngoài thì có thể cắm vào header nguồn J2 (5V) hay J14 (3V3) để sử dụng. Khi làm cách làm này cần phải chắc chắn, đảm bảo điện áp cấp là gần 5V hay 3V3.
Sau khi cấp nguồn, Led D1, D2 sẽ sáng. Ta gạt công tắc để Led D4 sáng, cấp nguồn cho MSP430.
Tận dụng nguồn 3.3V trên LauchPad:
Nguồn 3V3 LaunchPad được cấp qua header J11, với dòng tối đa khoảng 250mA.
Nguồn trên Launch Pad có thể lấy từ nhiều điểm, được đánh dấu là VCC và GND (chú ý trạng thái của jumper VCC khi lấy nguồn). Thông thường, ta giữ jumper VCC và lấy nguồn tự cụm header GND-GND-VCC phía dưới kit.
Sau khi cấp nguồn vào J11, Led D3 sẽ sáng. Ta gạt công tắc để Led D4 sáng, cấp nguồn cho MSP430.
Chú ý là khi mạch chỉ được cấp nguồn 3V3, các module dùng nguồn 5V (LCD, Buzzer, ..) sẽ không hoạt động.
Tận dụng cọc nguồn 5V trên Lauchpad:
LaunchPad có thiết kế lỗ TP1 (5V), TP3 (GND) để người dùng lấy nguồn USB-5V từ máy tính khi cần thiết. Chúng ta có thể hàn thêm header để lấy nguồn tại đây (chỉ cần hàn header vào TP1 là đủ, GND có thể lấy từ nhiều vị trí khác TP3).
Nguồn USB-5V có dòng tối đa khoảng 500mA, đủ cho việc chạy LCD trên mạch Main. Tuy nhiên, khi sử dụng nguồn này cần phải cẩn thận, tránh để chập nguồn, ảnh hưởng đến hoạt động của máy tính. Đặc biệt chú ý phần vỏ ngoài của đầu cắm USBmini được bắt dính với GND, không để cho header ở TP1 dính vào đây.
Chúng ta cấp nguồn 5V-USB này vào mạch Main ở header nguồn J2 (5V). Sau khi cấp nguồn, Led D1, D2 sẽ sáng. Ta gạt công tắc để Led D4 sáng, cấp nguồn cho MSP430
Tổng quang về SRF 05
a. Đặc tính kỹ thuật.
SRF05 là một bước phát triển từ SRF04, được thiết kế làm tăng tính linh hoạt, tăng phạm vi, ngoài ra còn giảm bớt chi phí. SRF05 là hoàn toàn tương thích với SRF04. Khoảng cách được tăng từ 3 – 4m.
SRF05 cho phép sử dụng một chân duy nhất cho cả kích hoạt và phản hồi, do đó tiết kiệm giá trị trên chân điều khiển. Khi chân chế độ không kết nối, thì SRF05 hoạt động riêng biệt chân kích hoạt và chân hồi tiếp, như SRF04. SRF05 bao gồm một thời gian trễ trước khi xung phản hồi để mang lại điều khiển chậm hơn hẳn như bộ điều khiển thời gian cơ bản Stamps và Picaxe để thực hiện các xung lệnh.
b.Các chế độ của SRF05.
Chế đô 1: tách biệt kích hoạt và phản hồi.
Chế độ này sử dụng riêng biệt chân kích hoạt và chân phản hồi, và là chế độ đơn giản nhất để sử dụng. Tất cả các chương trình điển hình cho SRF04 sẽ làm việc cho SRF05 ở chế độ này. Để sử dụng chế độ này, chỉ cần chân chế độ không kết nối – SRF05 có một nội dừng trên chân này.
Chế độ 2: Dùng một chân cho cả kích hoạt và phản hồi.
Chế độ này sử dụng một chân duy nhất cho cả tín hiệu kích hoạt và hồi tiếp, và được thiết kế để lưu các giá trị trên chân lên bộ điều khiển nhúng. Để sử dụng chế độ này, chân chế độ kết nối vào chân mass. Tín hiệu hồi tiếp sẽ xuất hiện trên cùng một chân với tín hiệu kích hoạt. SRF05 sẽ không tăng dòng phản hồi cho đến 700uS sau khi kết thúc các tín hiệu kích hoạt.
Để sử dụng chế độ 2 với các Stamps BS2 cơ bản, ta chỉ cần sử dụng PULSOUT và PULSIN trên cùng 1 chân, như sau:
SRF05 PIN 15: sử dụng pin cho cả hai và kích hoạt echo.
Range VAR Word: xác định phạm vi biến 16 bit.
SRF05 = 0: bắt đầu bằng PIN thấp.
PULSOUT SRF05, 5: đưa ra kích hoạt pulse 10uS (5x2uS).
PULSIN SRF05, 1, Range: echo đo thời gian.
Range = Range/29: để chuyển đổi sang cm (chia 74 cho inch).
c.Hoạt động phát và nhận phản hồi sóng âm cơ bản của SRF05.
Nguyên tắc cơ bản của sonar: là tạo ra một xung âm thanh điện tử và sau đó lắng nghe tiếng vọng tạo ra khi các làn sóng âm thanh số truy cập một đối tượng và được phản xạ trở lại. Để tính thời gian cho phản hồi trở về, một ước tính chính xác có thể được làm bằng khoảng cách tới đối tượng. Xung âm thanh tạo ra bởi SRF05 là siêu âm, nghĩa là nó ở trên phạm vi nhận xét của con người. Trong khi tần số thấp hơn có thể được sử dụng trong các loại ứng dụng, tần số cao hơn thực hiện tốt hơn cho phạm vi ngắn, nhu cầu độ chính xác cao.
Một số đặc điểm khác của cảm biến siêu âm SRF05:
Mức độ của sóng âm hồi tiếp phụ thuộc vào cấu tạo của đối tượng và góc phản xạ của nó.
Một đối tượng mềm có thể cho ra tín hiệu phản hồi yếu hoặc không có phản hồi. Một đối tượng ở một góc cân đối thì mới có thể chuyển thành tín hiệu phản chiếu một chiều cho cảm biến nhận.
Vùng phát hiện của SRF05 :
Nếu ngưỡng để phát hiện đối tượng được đặt quá gần với cảm biến, các đối tượng trên một đường có thể bị va chạm tại một điểm mù. Nếu ngưỡng này được đặt ở một khoảng cách quá lớn từ các cảm biến thì đối tượng sẽ được phát hiện mà không phải là trên một đường va chạm.
Một kỹ thuật phổ biến để làm giảm các điểm mù và đạt được phát hiện chiều rộng lớn hơn cự ly gần là thêm một cải tiến bằng cách thêm một đơn vị SRF05 bổ sung và gắn kết của hai đơn vị hướng về phía trước. Thiết lập như vậy thì có một khu vực mà hai khu vực phát hiện chồng chéo lên nhau.
d.Một số ứng dụng của SRF05 và bộ vi điều khiển.
Chế độ 1 hoạt động:
Trong sơ đồ sau đây, hai kỹ thuật số I/O pins của một BrainStem GP 2,0 được cấu hình để xử lý các ECHO và dòng Init của SRF05 module khác nhau. Pin ECHO là dây dẫn đến cổng số pin GP 1. Đây là dòng mà sẽ nhận được giá trị được đo bằng SRF05. Các pin ECHO phải có khả năng sử dụng các đầu vào Ptimer chụp để đo chiều rộng của xung được tạo ra bởi cá SRF05. Các pin Init là dây vào các chân lỹ thuật số GP 0, pin này sẽ gửi một xung 10uS để bắt đầu vỡ âm, mạch được hỗ trợ bởi một 6C Battery Pack.
Chế độ 2 hoạt động:
Trong sơ đồ sau đây, một pin duy nhất cổng số được sử dụng cho Init và cả đường ECHO của SRF05. Đối với sơ đồ này, init/ line ECHO là dây vào chân số 1 GP. Pin này có khả năng đo chuyển động của hệ thống.
Hiển thị LCD
Sơ đồ mạch:
Kết quả thử nghiệm.
Phần cứng: _ MSP 430G2553
_ Cảm biến siêu âm: SRF 05
_LCD 16x2
_ Dây nối
Phần mềm: _sử dụng phần mềm IAR
_Phần mềm Putty(thay cho LCD)
Sơ đồ mạch:
Mạch in:
Code LCD với MSP
1. File LCD.h
PHP Code:
//*******************dinh nghia bit************************
union reg
{ unsigned char _byte; //khai bao 1byte
struct bit
{ //dinh nghia bit trong byte vua khai bao
unsigned char b0:1; //bit 0 trong byte
unsigned char b1:1; //bit 1 trong byte
unsigned char b2:1; //bit 2 trong byte
unsigned char b3:1; //bit 3 trong byte
unsigned char b4:1; //bit 4 trong byte
unsigned char b5:1; //bit 5 trong byte
unsigned char b6:1; //bit 6 trong byte
unsigned char b7:1; //bit 7 trong byte
} _bit;
};
union reg* P2_dir=(union reg*)0x2a; //khai bao dia chi o nho
union reg* P2_out=(union reg*)0x29;
union reg* P2_sel=(union reg*)0x2e;
union reg* P2_in=(union reg*)0x28;
union reg* P1_sel=(union reg*)0x26;
union reg* P1_dir=(union reg*)0x22; //khai bao dia chi o nho
union reg* P1_out=(union reg*)0x21;
union reg* P1_in=(union reg*)0x20;
//**************************define Pin_LCD*******************
#define RS P2_out->_bit.b4 //0-->thanh ghi lenh lenh;1-->thanh ghi data
#define EN P2_out->_bit.b5 //phan biet giua 2lan gui data
#define DATA_4 P2_out->_bit.b0
#define DATA_5 P2_out->_bit.b1
#define DATA_6 P2_out->_bit.b2
#define DATA_7 P2_out->_bit.b3
#define line_1 0x80
#define line_2 0xC0
#define clr_scr 0x01
//********************delay************************
void delay(unsigned long int t);
//********************LCD Funtion***********************
//********************tao xung*******************************************
void enable();
//**********convert data-->send to Pin of microcontrol****************************
void set_data_lsb(unsigned char data); //ham gui byte data thap
void set_data_msb(unsigned char data); //ham gui byte data cao
//************************HAM GUI LENH******************************************
void put_cmd(unsigned char cmd);
//**************************ham gui data*************************************
void lcd_putchar(unsigned char data);
void lcd_putsf(uchar *s);
//****************HTLCD************************************************
//****************************ham khoi tao lcd*************************
void lcd_init();
//************************************************
#define RS P2_out->_bit.b4 //0-->thanh ghi lenh lenh;1-->thanh ghi data
#define EN P2_out->_bit.b5 //phan biet giua 2lan gui data
#define DATA_4 P2_out->_bit.b0
#define DATA_5 P2_out->_bit.b1
#define DATA_6 P2_out->_bit.b2
#define DATA_7 P2_out->_bit.b3
#define line_1 0x80
#define line_2 0xC0
#define clr_scr 0x01
//********************delay************************
void delay(unsigned long int t);
//********************LCD Funtion***********************
//********************tao xung*******************************************
void enable();
//**********convert data-->send to Pin of microcontrol****************************
void set_data_lsb(unsigned char data); //ham gui byte data thap
void set_data_msb(unsigned char data); //ham gui byte data cao
//************************HAM GUI LENH******************************************
void put_cmd(unsigned char cmd);
//**************************ham gui data*************************************
void lcd_putchar(unsigned char data);
void lcd_putsf(uchar *s);
//****************HTLCD************************************************
//****************************ham khoi tao lcd*************************
void lcd_init();
//************************************************
2. File LCD.c
PHP Code:
#include
#include "TVLCD.h"
//********************delay************************
void delay(unsigned long int t)
{
unsigned long int i=0;
for(i=0;i<t;i++);
}
//********************LCD Funtion***********************
//********************tao xung*******************************************
void enable()
{
EN=1;
delay(10);
EN=0;
delay(20);
}
//**********convert data-->send to Pin of microcontrol****************************
void set_data_lsb(unsigned char data) //ham gui byte data thap
{
unsigned char convert=0;
convert=data&0x01;
if(convert==0x01)DATA_4=1;
else DATA_4=0;
convert=data&0x02;
if(convert==0x02)DATA_5=1;
else DATA_5=0;
convert=data&0x04;
if(convert==0x04)DATA_6=1;
else DATA_6=0;
convert=data&0x08;
if(convert==0x08)DATA_7=1;
else DATA_7=0;
}
void set_data_msb(unsigned char data) //ham gui byte data cao
{
unsigned char convert=0;
convert=data&0x10;
if(convert==0x10)DATA_4=1;
else DATA_4=0;
convert=data&0x20;
if(convert==0x20)DATA_5=1;
else DATA_5=0;
convert=data&0x40;
if(convert==0x40)DATA_6=1;
else DATA_6=0;
convert=data&0x80;
if(convert==0x80)DATA_7=1;
else DATA_7=0;
}
//************************HAM GUI LENH******************************************
void put_cmd(unsigned char cmd)
{
RS=0; //chon thanh ghi lenh
set_data_msb(cmd);
enable();
set_data_lsb(cmd);
enable();
}
//**************************ham gui data*************************************
void lcd_putchar(unsigned char data)
{
RS=1;
set_data_msb(data);
enable();
set_data_lsb(data);
enable();
}
void lcd_putsf(uchar *s)
{
while(*s)
{
lcd_putchar(*s);
s++;
};
}
//****************HTLCD************************************************
//****************************ham khoi tao lcd*************************
void lcd_init()
{
delay(100);
RS=0; // che do gui lenh
set_data_lsb(0x03);
enable();
enable();
enable();
set_data_lsb(0x02);
enable();
put_cmd ( 0x28 ); //cd 4bit,2dong,5x7
put_cmd ( 0x0C); //bat hien thi,tat con tro
put_cmd ( 0x06 ); //* entry mode set, increment & scroll left
put_cmd ( 0x01 ); //* clear display
}
//************************************************
convert=data&0x10;
if(convert==0x10)DATA_4=1;
else DATA_4=0;
convert=data&0x20;
if(convert==0x20)DATA_5=1;
else DATA_5=0;
convert=data&0x40;
if(convert==0x40)DATA_6=1;
else DATA_6=0;
convert=data&0x80;
if(convert==0x80)DATA_7=1;
else DATA_7=0;
}
void put_cmd(unsigned char cmd)
{
RS=0; //chon thanh ghi lenh
set_data_msb(cmd);
enable();
set_data_lsb(cmd);
enable();
}
void lcd_putchar(unsigned char data)
{
RS=1;
set_data_msb(data);
enable();
set_data_lsb(data);
enable();
}
void lcd_putsf(uchar *s)
{
while(*s)
{
lcd_putchar(*s);
s++;
};
}
void lcd_init()
{
delay(100);
RS=0; // che do gui lenh
set_data_lsb(0x03);
enable();
enable();
enable();
set_data_lsb(0x02);
enable();
put_cmd ( 0x01 ); //* clear display
}
//************************************************
put_cmd ( 0x28 ); //cd 4bit,2dong,5x7
put_cmd ( 0x0C); //bat hien thi,tat con tro
put_cmd ( 0x06 ); //* entry mode set, increment & scroll left
put_cmd ( 0x01 ); //* clear display
}
}
//************************************************
Code SRF05 với MSP(kết quả hiển thị ra màn hình thay cho LCD)
#include
#include
////////////////Defines////////////////
#define LED1 BIT6
#define LED0 BIT0
#define DAT BIT0 //P2.0 //input signal port
#define VCC BIT5 //P1.5
#define GND BIT4 //P1.4
#define KICH BIT1
char charbuffer[8];
int i=0;
int j=0;
unsigned int capture_array[51]; // RAM array for captures
int tick=0;
int cap=0;
int pre_cap=0;
int first_pulse=0;
////////////////Function Protos////////////////
void TX(char *tx_message);
void DO_KHOANG_CACH(void);
static char *i2a(unsigned i, char *a, unsigned r);
char *itoa(int i, char *a, int r);
static char *i2a(unsigned i, char *a, unsigned r)
{
if (i/r > 0) a = i2a(i/r,a,r);
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
return a+1;
}
char *itoa(int i, char *a, int r)
{
if ((r 36)) r = 10;
if (i < 0)
{
*a = '-';
*i2a(-(unsigned)i,a+1,r) = 0;
}
else *i2a(i,a,r) = 0;
return a;
}
void TX(char *tx_message)
{
unsigned int i=0; //Define end of string loop int
char *message; // message variable
unsigned int message_num; // define ascii int version variable
message = tx_message; // move tx_message into message
while(1)
{
if(message[i]==0) // If end of input string is reached, break loop.
{break;}
message_num = (int)message[i]; //Cast string char into a int variable
UCA0TXBUF = message_num; // write INT to TX buffer
i++; // increase string index
__delay_cycles(10000); //transmission delay
if(i>50) //prevent infinite transmit
{
// P1OUT |= (LED1+LED0);
break;
}
} // End TX Main While Loop
} // End TX Function
int main(void)
{ WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
//setup clock to 1MHZ
BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz
DCOCTL = CALDCO_1MHZ;
////////////////USCI setup////////////////
P1SEL = BIT1 + BIT2; // Set P1.1 to RXD and P1.2 to TXD
P1SEL2 = BIT1 + BIT2; //
UCA0CTL1 |= UCSSEL_2; // Have USCI use SMCLK AKA 1MHz main CLK
UCA0BR0 = 104; // Baud: 9600, N= CLK/Baud, N= 10^6 / 9600
UCA0BR1 = 0; // Set upper half of baud select to 0
UCA0MCTL = UCBRS_1; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // Start USCI
////////////////General GPIO Defines////////////////
P1DIR |= (LED0 + LED1+GND+VCC); //define output ports
P1OUT &= ~(LED0 + LED1+GND); //turn ports low
P2DIR |= KICH;
P2IE |= DAT;
P2IFG &= ~DAT;
P2SEL = DAT; // Set P2.0 to TA0
/////////////////SETUP TIMER
TA1CCTL0 = CM_3 + SCS + CCIS_0 + CAP + CCIE; // falling edge + CCI0A (P2.0)// + Capture Mode +
Interrupt
TA1CTL = TASSEL_2 + MC_2; // SMCLK + Continuous Mode
__enable_interrupt();
while(1)
{
__delay_cycles(100000);
DO_KHOANG_CACH();
}
}
// Timer1 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1(void)
{
if ( (first_pulse==0) & (DAT == 1) )
{
P1OUT |= LED1;
pre_cap=TA1CCR0;
first_pulse=1;
}
else
{
P1OUT &= ~LED1;
tick = TA1CCR0;
cap = (tick- pre_cap)/58;
first_pulse =0;
TA1CCR0=0;
itoa(cap, charbuffer, 10);
TX(charbuffer);
TX("\r\n");
}
}
void DO_KHOANG_CACH(void)
{
P2OUT |= KICH;
__delay_cycles(20);
P2OUT &= ~KICH;
}
Kết nối MSP430G2553 với SRF 05
Sau khi kết nối và đổ code xuống MSP,tín hiệu được đưa ra màn hình bởi phần mềm PUTTY.
Chương trình sử dụng Timer1 ở chế độ Capture để bắt xung từ chân P2.0. Cứ mỗi 100ms chương trình sẽ phát xung (20us) ra chân P1.1 để kích cho SRF05 hoạt động. SRF05 trả về giá trị đo được ở chân P2.0.Giá trị đo được sẽ được chia cho 58 để ra khoảng cách tính bằng centimet. Sau đó giá trị được gửi lên máy tính.
Kết quả thực nghiệm:
Các file đính kèm theo tài liệu này:
- do_an_phat_trien_thiet_bi_phan_loai_xe_dua_tren_chieu_cao_da.doc