Truyền dữ liệu không dây là một mảng lớn trong điện tử thông tin, dữ liệu được truyền đi có thể là tương tự cũng có thể là số. Trong truyền dữ liệu không dây, hiệu quả nhất vẫn là truyền bằng sóng điện từ hay sóng Radio, bởi những ưu điểm là truyền ở khoảng cách xa, đa hướng, tần số hoạt động cao.
Hiện nay, xử lí và truyền dữ liệu được ứng dụng rất rộng rãi, nhất là trong lĩnh vực điều khiển, thông tin số. Nhiều thiết bị xử lí và truyền tín hiệu đã ra đời nhưng mỗi thiết bị chỉ có những chức năng hoặc nhiệm vụ phục vụ cho yêu cầu riêng của công việc. Để giải quyết vấn đề cho công việc đa nhiệm nhiều thiết bị đã được ra đời như vi điều khiển, vi xử lí Cùng với đó nhiều thiết bị truyền tín hiệu đa kênh cũng được ứng dụng rộng rãi.
Sử dụng khả năng của vi điều khiển ATmega8 về xử lí truyền nhận dữ liệu tốc độ cao và khả năng truyền đa kênh của thiết bị CYWM6935 em xây dựng một hệ thống đơn giản gồm board phát dữ liệu và board thu dữ liệu. Dữ liệu bên phát được mã hoá bằng vi điều khiển. Một module phát sẽ được nối vào vi điều khiển thực hiện việc phát dữ liệu tới bên thu. Bên thu thu nhận tín hiệu RF bằng một mạch thu, dữ liệu thu được sẽ được vi điều khiển hiển thị qua LCD.
25 trang |
Chia sẻ: lethao | Lượt xem: 1894 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Khóa luận vật lý vô tuyến, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TƯ NHIÊN
KHOA VẬT LÍ
NGUYỄN THÀNH TIẾN
TRUYỀN DỮ LIỆU QUA THIẾT BỊ CYWM6935
KHÓA LUẬN TỐT NGHIỆP HỆ ĐẠI HỌC CHÍNH QUY
CHUYÊN NGÀNH: VẬT LÝ VÔ TUYẾN
Hà Nội – 2011
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TƯ NHIÊN
KHOA VẬT LÍ
NGUYỄN THÀNH TIẾN
TRUYỀN DỮ LIỆU QUA THIẾT BỊ CYWM6935
KHÓA LUẬN TỐT NGHIỆP HỆ ĐẠI HỌC CHÍNH QUY
CHUYÊN NGÀNH: VẬT LÝ VÔ TUYẾN
Cán bộ hướng dẫn: Thầy Võ Lý Thanh Hà
Hà Nội – 2011
LỜI CẢM ƠN
Lời đầu tiên em xin chân thành bày tỏ lòng cảm ơn và kính trọng sâu sắc đối với Thầy Võ Lý Thanh Hà. Thầy đã hết lòng giúp đỡ, dạy bảo, động viên và tạo mọi điều kiện thuận lợi cho em trong suốt quá trình học tập và hoàn thành luận văn tốt nghiệp.Thầy đã mở ra cho em những vấn đề khoa học rất lý thú, hướng em vào nghiên cứu các lĩnh vực hết sức thiết thực và vô cùng bổ ích. Em đã học hỏi được rất nhiều ở Thầy phong cách làm việc, cũng như phương pháp nghiên cứu khoa học… Em luôn được Thầy cung cấp các tài liệu, dụng cụ, các chỉ dẫn hết sức quý báu khi cần thiết trong suốt thời gian thực hiện luận văn. Có những lúc cần thiết bị để thực hành thầy luôn sẵn sàng giúp đỡ.
Em cũng xin thể hiện sự kính trọng và lòng biết ơn đến các Thầy Cô trong bộ môn Vật Lý Vô Tuyến, những người đã trang bị cho em rất nhiều kiến thức chuyên ngành, cũng như sự chỉ bảo, giúp đỡ tận tình của các Thầy Cô đối với em trong suốt quá trình học tập. Tất cả các kiến thức mà em lĩnh hội được từ bài giảng của các Thầy Cô là vô cùng quý giá.
Xin gửi lời cảm ơn đến các thầy cô giáo trong hội đồng chấm luận văn đã cho em những đóng góp quý giá để em có thể hoàn chỉnh được luận văn này
Xin chân thành cảm ơn bố mẹ, anh chị em và các bạn đã luôn ở bên cạnh động viên và giúp đỡ em học tập và hoàn thành luận văn...
MỤC LỤC
MỞ ĐẦU
Truyền dữ liệu không dây là một mảng lớn trong điện tử thông tin, dữ liệu được truyền đi có thể là tương tự cũng có thể là số. Trong truyền dữ liệu không dây, hiệu quả nhất vẫn là truyền bằng sóng điện từ hay sóng Radio, bởi những ưu điểm là truyền ở khoảng cách xa, đa hướng, tần số hoạt động cao.
Hiện nay, xử lí và truyền dữ liệu được ứng dụng rất rộng rãi, nhất là trong lĩnh vực điều khiển, thông tin số. Nhiều thiết bị xử lí và truyền tín hiệu đã ra đời nhưng mỗi thiết bị chỉ có những chức năng hoặc nhiệm vụ phục vụ cho yêu cầu riêng của công việc. Để giải quyết vấn đề cho công việc đa nhiệm nhiều thiết bị đã được ra đời như vi điều khiển, vi xử lí… Cùng với đó nhiều thiết bị truyền tín hiệu đa kênh cũng được ứng dụng rộng rãi.
Sử dụng khả năng của vi điều khiển ATmega8 về xử lí truyền nhận dữ liệu tốc độ cao và khả năng truyền đa kênh của thiết bị CYWM6935 em xây dựng một hệ thống đơn giản gồm board phát dữ liệu và board thu dữ liệu. Dữ liệu bên phát được mã hoá bằng vi điều khiển. Một module phát sẽ được nối vào vi điều khiển thực hiện việc phát dữ liệu tới bên thu. Bên thu thu nhận tín hiệu RF bằng một mạch thu, dữ liệu thu được sẽ được vi điều khiển hiển thị qua LCD.
CHƯƠNG I: LÝ THUYẾT CHUNG VỀ THIẾT BỊ CYWM6935 VÀ VI ĐIỀU KHIỂN AVR ATMEGA8
I. Giới thiệu về Module WirelessUSB CYWM6935
Hiện nay các thiết bị truyền số liệu không dây đã được ứng dụng rất rộng rãi và vô cùng thân thiện với cuộc sống hàng ngày. Nhưng những thiết bị ấy chỉ có thể làm 1 nhiệm vụ là truyền hoặc nhận dữ liệu và cũng chỉ có thể truyền đơn kênh như thế sẽ tốn kém rất nhiều thiết bị nếu cần truyền và xử lí nhiều số liệu trong 1 công việc. Thiết bị CYWM6935 với đặc điểm có thể truyền đa kênh nên với 1 thiết bị xử lí có thể xử lí nhiều số liệu của các thiết bị khác truyền về. Sau đây là các đặc điểm chung và tính năng nổi bật của CYWM6935
1.1. Các đặc điểm chung của thiểt bị CYWM6935:
Thiết bị CYWM6935 được dùng trong lĩnh vực công nghiệp, y khoa, khoa học với băng tần từ 2.4GHz-2.483GHz và độ nhạy là -95dBm. Hoạt động với công suất ra tối đa là 0dBm. Khoảng cách truyền và nhận dữ liệu tối đa là 50m. Với, tốc độ truyền dữ liệu đạt đến 62.5kbps.
Độ tích hợp cao với giá thành thấp, yêu cầu số thành phần bên ngoài là nhỏ nhất.
Sử dụng giao thức truyền SPI.
Tần số hoạt động xung clock đầu vào là 13MHz.
Dòng dự phòng dưới 1A.
Nhiệt độ hoạt động từ -400C đến 850C.
1.2. Các ứng dụng:
+Trong lĩnh vực tự động:
- Điều khiển khí hậu và ánh sáng.
- Các thiết bị thông minh.
- Hệ thống cảnh báo và bảo vệ.
+Điều khiển trong công nghiệp:
- Quản lý trong kiểm kê.
- Nhà máy tự động.
- Tiếp nhận dữ liệu.
+Trong đo lường tự động.
+Máy tính:
- Điều khiển từ xa.
- Các công cụ dẫn chương trình.
- Hệ thống cảnh báo.
1.3. Mô hình thiết bị CYWM6935
Mô hình ứng dụng
Mô hình sử dụng trong việc truyền và xử lí dữ liệu đa kênh
Thiết bị CYWM6935 được điều khiển bởi Module WirelessUSB CYWM6935. Sơ đồ khối, chức năng và cấu trúc của CYWUSB6935 được mô tả như sau:
1.3.1Sơ đồ khối của CYWUSB6935
1.3.2. Chức năng tổng quát của CYWUSB6935:
CYWUSB6935 được thiết kế thành thiết bị wireless hoạt động trong công nghiệp, khoa học, y khoa với băng tần 2.4GHz-2.4835GHz. CYWUSB6935 bao gồm 1 bộ thu phát sóng vô tuyến tần số 2.4GHz, 1 modem GFSK. CYWUSB6935 hỗ trợ khoảng cách truyền tối đa là 50m.
Máy thu phát 2.4GHz: Bộ truyền và nhận là bộ chuyển đổi đơn, kiến trúc tần số trung tần thấp kết hợp với bộ lọc nhiễu. Tích hợp bộ khuyếch đại công suất để điều khiển công suất ra trong phạm vi 30dB. Cả bộ truyền và nhận đều tích hợp bộ VCO (dao động điều khiển bởi điện áp) và bộ tổng hợp. Bộ tổng hợp tần số cung cấpbộ dao động nhảy tần nội tại cho bộ phát và bộ nhận.
Modem GFSK: Máy phát sử dụng bộ điều chế DSP cơ sở để chuyển đổi tần số 1MHz chip thành sóng mang GFSK. Máy thu sử dụng bộ tách sóng FM với bộ tự động chia dữ liệu để giải điều chế tín hiệu GSFK.
Bộ chuyển đổi nối tiếp Serializer và bộ chuyển đổi ngợc nối tiếp Deserialzer: CYWUSB6935 cung cấp dữ liệu cho bộ Serialzer/Deserialzer (SERDES), nó cung cấp khung byte của dữ liệu truyền và nhận. Các byte truyền được đưa vào SERDES và các byte nhận được đọc từ SERDES bên ngoài qua giao thức SPI. SERDES cung cấp cặp dữ liệu đệm truyền và nhận. Trong khi 1 byte được truyền bởi sóng vô tuyến thì byte tiếp theo có thể được viết đến thanh ghi SERDES để đảm bảo chắc chắn không đứt dữ liệu đã truyền. Sau khi nhận 1 byte thì nó sẽ được đưa vào thanh ghi SERDES và có thể đọc bất kỳ lúc nào cho đến khi byte tiếp theo được nhận, khi đó nội dung cũ của thanh ghi sẽ được viết đè lên.
Các giao thức ứng dụng: CYWUSB6935 có đầy đủ các giao thức SPI thụ động đồng bộ cho các kết nối đến ứng dụng của MCU. Cấu hình và dữ liệu byte truyền có thể được thực hiện thông qua giao thức này. Kiểu SERDES (DIO) được cung cấp cho các ứng dụng yêu cầu đồng bộ đường dữ liệu nối tiếp. Giao thức này chỉ được dùng cho truyền bit dữ liệu.
Bộ chỉ thị độ dài tín hiệu nhận RSSI (Receive signal strength indicator): Thanh ghi RSSI (Reg 0x22) trả lại độ dài của tín hiệu nhận kênh ON và được dùng để:
- Xác định chất lượng kết nối.
- Xác định giá trị nhiễu.
- Kiểm tra kênh trước khi truyền.
Điện áp trong RSSI được lấy mẫu qua 5 bit của bộ chuyển đổi ADC. Một khi sự kết nối đã được thiết lập, thanh ghi RSSI có thể được đọc để xác định chất lượng kết nối của kênh. Giá trị của thanh ghi dưới 10 cho biết chiều dài tín hiệu nhận là thấp, còn giá trị lón hơn 28 thì chiều dài tín hiệu là dài. Để kiểm tra kênh truyền trước khi truyền, trước hết thiết lập kiểu nhận cho đúng giá trị của thanh ghi RSSI (Reg 0x22). Nếu giá trị bit là 0, sau đó tác động thanh ghi Carrier Detect (Reg 0x2F, bit7=1) để khởi động bộ chuyển đổi ADC. Sau đó, chờ hơn 50s và tiếp tục đọc giá trị RSSI. Tiếp theo xóa thanh ghi Carrier Detect và điều chỉnh bộ nhận là OFF. Đo mức độ nhiễu của kênh tức là xử lý nhiễu, để có kết quả tốt nhất, thủ tục này nên lập lại nhiều lần (khoảng 20 lần) để tính toán trung bình mức độ nhiễu của kênh. Giá trị của thanh ghi RSSI từ 0-10 tức là tín hiệu trên kênh truyền yếu. Còn giá trị lớn hơn 10 cho rằng kênh hầu như đang được sử dụng.
Giao thức SPI: CYWUSB6935 có 4 dây giao thức SPI giao tiếp giữa ứng dụng MCU và 1 hoặc các thiết bị thứ cấp khác. Giao thức SPI hổ trợ truyền byte đơn và nhiều byte nối tiếp. Bốn dây giao thức SPI giao tiếp bao gồm Master Out-Slave In (MOSI), Master In-Slave Out (MISO), Serial Clock (SCK), và Slave Select. SPI nhận xung SCK từ MCU trên chân SCK. Dữ liệu từ MCU được dịch trên chân MOSI. Dữ liệu từ MCU đưa ra chân MISO. Chân Slave Select ở mức thấp cần được xác nhận để khởi động bộ truyền SPI. MCU có thể khởi động bộ truyền dữ liệu SPI theo đường quản lý nhiều byte. Byte đầu tiên là byte Command/Address, và byte tiếp là các byte dữ liệu.Tín hiệu Slave Select không nên chọn giữa các byte. Giao tiếp SPI như sau:
- Bit 7=0: SPI đọc. Bit 7=1:SPI ghi.
- Bit 6=1: SPI tự động tăng địa chỉ. Khi thiết lập, địa chỉ tự động tăng tại mỗi byte cuối trong truy cập nhóm bit truyền, nếu không thì các địa chỉ tương tự được truy cập.
- 6 bit là địa chỉ.
- 8 bit của dữ liệu.
1.3.3. Các ngắt:
CYWUSB6935 có ba kiểu ngắt: ngắt truyền, ngắt nhận và khởi động. Tất cả được chia sẽ bởi một chân IRQ, nhưng có thể độc lập enabled/disabled. Trong kiểu truyền, tất cả các ngắt nhận tự động disabled, và trong kiểu nhận tất cả các ngắt truyền đều disabled. Tuy nhiên nội dung thanh ghi được bảo tồn khi chuyển đổi giữa kiểu truyền và kiểu nhận. Các ngắt được enable và trạng thái đọc thông qua 6 thanh ghi: Receive Interrup Enable (Reg 0x07), Receive Interrup Status (Reg 0x08), Transmit Interrup Enable (Reg 0x1C), Wake Status (Reg 0x1D).
Nếu có hơn 1 ngắt được enable tại bất kỳ một thời điểm nào, nó cần thiết phải đọc trạng thái ưu tiên của thanh ghi ngắt để xác định việc nào đựoc IRQ xác nhận. Còn khi nguồn ngắt là disabled, điều kiện trạng thái sẽ gây ra một ngắt khác có thể đựoc xác định bởi đọc trạng thái của thanh ghi tương tự. Vì vậy nó có thể sử dụng các thiết bị mà không cần sử dụng các chân ngắt. Chương trình cơ sở có thể thăm dò trạng thái của thanh ghi ngắt để chờ khi có việc hơn là sử dụng chân IRQ.
Ngắt khởi động Wake Interrup: Khi chân PD ở mức thấp, bộ dao động bị dừng. Sau khi chân PD không đựoc xác nhận, bộ dao động thiết lập thời gian để bắt đầu, và cho đến khi nó làm tốt, nó không được chắc chắn để sủ dụng giao thức SPI. Ngắt khởi động chỉ định bộ dao động đã đựoc bắt đầu và thiết bị đã sẵn sàng để nhận bộ truyền SPI. Ngắt khởi động được enable bằng cách thiết lập bit 0 của thanh ghi Wake Enable (Reg 0x1C), bit 0=1). Dù thanh ghi khởi động treo hay không thì nó được chỉ định bởi trạng thái bit 0 của thanh ghi Wake Status (Reg 0x1D), bit 0).
Các ngắt truyền: Bốn ngắt được cung cấp đến cờ khi có sự truyền. Các ngắt được enabled bằng cách ghi đến thanh ghi Transmit Interrup Enable (Reg 0x0D), và những trạng thái đó có thể được xác định bằng cách đọc trạng thái thanh ghi Transmit Interrup Status (Reg 0x0E). Nếu có hưon 1 ngắt được enabled, thì rất cần thiết đọc trạng thái thanh ghi Transmit Interrup Status để xác định việc nào được chân IRQ xác nhận.
Các ngắt nhận: Có 8 ngắt đựoc cung cấp đến cờ khi việc nhận tín hiệu xảy ra, mỗi 4 ngắt là cho SERDES A và B. Trong kiểu DDR 64 chips/bit và 32 chips/bit, chỉ có ngắt SERDES A là available, và ngắt SERDES B sẽ không bao giờ kích khởi dù là enabled. Các ngắt được enabled bằng cách ghi đến thanh ghi Receive Interrup Enable (Reg 0x07), và các trạng thái đó có thể được xác định bằng cắch đọc trạng thái của thanh ghi Receive Interrup Status (reg 0x08). Nếu có hơn 1 ngắt được enabled, thì cần phải đọc trạng thái thanh ghi Receive Interrup Status để xác định việc nào được chân IRQ xác nhận.
1.3.4. Các thanh ghi của CYWUSB6935:
Thanh ghi điều khiển:
Thanh ghi REG_CONFIG:
Thanh ghi REG_SERDES_CTL:
Thanh ghi REG_RX_INT_EN:
Thanh ghi Reg_RX_INT_STAT:
Thanh ghi REG_RX_DATA_A:
Thanh ghi REG_RX_VALID_A:
Thanh ghi REG_RX_DATA_B:
Thanh ghi REG_RX_VALID_B:
Thanh ghi REG_TX_INT_EN:
Thanh ghi REG_TX_INT_STAT:
Thanh ghi REG_TX_DATA:
Thanh ghi REG_TX_VALID:
Thanh ghi REG_RSSI:
Thanh ghi REG_CLOCK_MANUAL:
Thanh ghi REG_CLOCK_ENABLE:
Thanh ghi REG_PA:
Vi điều khiển Atmega8
Sơ đồ chân ATmega8
Một số thông số kĩ thuật đáng lưu ý:
ATMega8 là một con Vi Điều Khiển thuộc dòng Mega AVR của hãng ATMEL. Dòng Vi Điều Khiển này có tính năng nổi trộ như:• Rất tiết kiệm năng lượng, hiệu suất caoo CPU có kiến trúc RISC, có 130 lệnh, hầu hết chúng thực hiện chỉ trong một chu kỳ xung clock.o 32 thanh ghi đa dụngo Tốc độ tối đa lên đến 16MIPS với thạch anh 16MHz• Bộ nhớ phân đoạn, có độ bền cao không dễ bay hơio Có 8KB bộ nhớ Flash lập trình ISPo 512Bytes EEPROMo 1KB SRAMo Chu kỳ ghi/xóa 10.000 lần cho bộ nhớ Flash ROM, và 100.000 cho EEPROMo Dữ liệu không bị mất sau 20 năm (ở 850C) và 100 năm (ở 250C)o Có tính năng bảo mật• Tính năng ngoại vio 2 bộ Timer/Counter 8 bit, 1 bộ so sánho 1 bộ Timer/Counter 16 bito Bộ đếm Thời gian thực với dao động riêngo 3 kênh PWMo 6 kênh ADC 10 bits cho kiểu vỏ PDIP, và 8 kênh ADC 10 bít cho kiểu vỏ TQFPo Giao tiếp nối tiếp TWIo Lập trình nối tiếp USART, giao tiếp nối tiếp SPI master/slaveo Bộ so sánh Analog on-chip• Tính năng đặc biệt của ATMega8 o Hiệu chuẩn bộ dao động RC nộio Bộ nguồn ngắt bên ngoài và bên trong o Năm chế độ Sleep: Idle, giảm nhiễu ADC, tiết kiệm năng lượng, Power-down, và chế độ chờ (stand by)• Đóng gói & I/Oo 23 ngõ vào/ra khả trìnho Được đóng gói trong 28 chân kiểu vỏ PDIP• Điện áp hoạt động2,7 - 5.5V (ATmega8L)4.5 - 5.5V (ATmega8)• Tần số hoạt – 0 - 8 MHz (ATmega8L)– 0 - 16 MHz (ATmega8) độngCấu trúc các PORT xuất nhập
Cấu trúc chân của AVR
ATMega8 có 3 Port xuất nhập: PortB (có 8 bits), PortC (7 bits), PortD (có 8 Bits). Mỗi một cổng của Vi điều khiển được liên kết với 3 thanh ghi: PORTx, DDRx, PINx. 3 thanh ghi này sẽ phối hợp với nhau để điều khiển hoạt động của cổng thành lối vào sử dụng Pull-up…Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào/ra), trạng thái (0/1) từ đó ta có 4 kiểu vào ra cho một chân của AVR. Khác với 89xx là chỉ có 2 trạng thái duy nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (dòng khoảng hàng chục mA) còn 89xx chỉ là vài uA .Để điều khiển các chân này chúng ta có 2 thanh ghi: o PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.no DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .
Thanh ghi DDRxĐây là thanh ghi 8 bits (có thể đọc ghi) có chứ năng điều khiển hướng của cổng (là lối vào hay lối ra). Khi một bit của thanh ghi này được set lên 1 thì chân tương ứng với nó được cấu hình thành ngõ ra. Ngược lại nếu của thanh ghi DDRx là 0 thì chân tương ứng của nó được thiết lập thành ngõ vào. Lấy ví dụ: Khi ta set tất cả 8 bit của thanh ghi DDRD đều là 1, thì 8 chân tương ứng của PORTD là PORTD.0, PORTD.1, …, PORTD.7 được thiết lập là ngõ ra.
Ví dụ thanh ghi DDRD
Thanh ghi PORTxPORTx là thanh ghi 8 bit có thể đọc ghi. Đây là thanh ghi dữ liệu của PORTx. Nếu thânh ghi DDRx thiết lập cổng là lối ra, khi đó giá trị của thanh ghi PORTx cũng là giá trị của các chân tương ứng của PORTx, nói cách khác, khi ta ghi một giá trị logic lên bit 1 của thanh ghi này thì chân tương ứng của bit đó cũng có cùng mức logic. Khi thanh ghi DDRx thiết lập cổng thành lối vào thì thanh ghi PORTx đóng vai trò như một thanh ghi điều khiển cổng. Cụ thể, nếu một bit của thanh ghi này được ghi thành 1 thì điện trở treo (pull-up resistor) ở chân tương ứng với nó sẽ được kích hoạt, ngược lại nếu bit được ghi thành 0 thì điện trở treo ở chân tương ứng sẽ không được kích hoạt, cổng ở trạng thái tổng trở cao.
Ví dụ thanh ghi PORTB
CHƯƠNG II: PHƯƠNG PHÁP NGHIÊN CỨU
Chuẩn truyền thông SPI
SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select). Hình 1 thể hiện một kết SPI giữa một chip Master và 3 chip Slave thông qua 4 đường.
SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
MISO– Master Input / Slave Output: nếu là chip Master thì đây là đường Input còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves được nối trực tiếp với nhau..
MOSI – Master Output / Slave Input: nếu là chip Master thì đây là đường Output còn nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves được nối trực tiếp với nhau.
SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường điều khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
Hoạt động: mỗi chip Master hay Slave có một thanh ghi dữ liệu 8 bits. Cứ mỗi xung nhịp do Master tạo ra trên đường giữ nhịp SCK, một bit trong thanh ghi dữ liệu của Master được truyền qua Slave trên đường MOSI, đồng thời một bit trong thanh ghi dữ liệu của chip Slave cũng được truyền qua Master trên đường MISO. Do 2 gói dữ liệu trên 2 chip được gởi qua lại đồng thời nên quá trình truyền dữ liệu này được gọi là “song công”. Hình 2 mô tả quá trình truyền 1 gói dữ liệu thực hiện bởi module SPI trong AVR, bên trái là chip Master và bên phải là Slave.
Truyền dữ liệu SPI.
Cực của xung giữ nhịp, phase và các chế độ hoạt động: cực của xung giữ nhịp (Clock Polarity) được gọi tắt là CPOL là khái niệm dùng chỉ trạng thái của chân SCK ở trạng thái nghỉ. Ở trạng thái nghỉ (Idle), chân SCK có thể được giữ ở mức cao (CPOL=1) hoặc thấp (CPOL=0). Phase (CPHA) dùng để chỉ cách mà dữ liệu được lấy mẫu (sample) theo xung giữ nhịp. Dữ liệu có thể được lấy mẫu ở cạnh lên của SCK (CPHA=0) hoặc cạnh xuống (CPHA=1). Sự kết hợp của SPOL và CPHA làm nên 4 chế độ hoạt động của SPI. Nhìn chung việc chọn 1 trong 4 chế độ này không ảnh hưởng đến chất lượng truyền thông mà chỉ cốt sao cho có sự tương thích giữa Master và Slave.
III. Truyền thông SPI trên AVR.
Module SPI trong các chip AVR hầu như hoàn toàn giống với chuẩn SPI mô tả trong phần trên. Vì thế, nếu đã hiểu cách truyền thông SPI thì sẽ khống quá khó để thực hiện việc truyền thông này với AVR. Phần bên dưới tôi trình bày một số điểm quan trọng khi điều khiển SPI trên AVR.
Các chân SPI: Các chân giao tiếp SPI cũng chính là các chân PORT thông thường, vì thế nếu muốn sử dụng SPI chúng ta cần xác lập hướng cho các chân này. Trên chip Atmega8, các chân SPI như sau:
SCK – PB5 (chân 5)
MISO – PB4 (chân 4)
MOSI – PB3 (chân 3)
SS – PB2 (chân 2)
Khi chip AVR được sử dụng làm Slave, cần set các chân SCK input, MOSI input, MISO output và SS input. Nếu là Master thì SCK output, MISO output, MOSI input và khi này chân SS không quan trọng, chúng ta có thể dùng chân này để điều khiển SS của Slaves hoặc bất kỳ chân PORT thông thường nào.
Thanh ghi: SPI trên AVR được vận hành bởi 3 thanh ghi bao gồm thanh ghi điều khiển SPCR , thanh ghi trạng thái SPSR và thanh ghi dữ liệu SPDR.
SPCR (SPI Control Register): là 1 thanh ghi 8 bit điều khiển tất cả hoạt động của SPI.
* Bit 7- SPIE (SPI Interrupt Enable) bit cho phép ngắt SPI. Nếu bit này được set bằng 1 và bit I trong thanh ghi trạng thái được set bằng 1, 1 ngắt sẽ xảy ra sau khi một gói dữ liệu được truyền hoặc nhận. Chúng ta nên dùng ngắt (nhất là đối với chip Slave) khi truyền nhận dữ liệu với SPI.
* Bit 6 – SPE (SPI Enable). set bit này lên 1 để cho phép bộ SPI hoạt động. Nếu SPIE=0 thì module SPI dừng hoạt động.
* Bit 5 – DORD (Data Order) bit này chỉ định thứ tự dữ liệu các bit được truyền và nhận trên các đường MISO và MOSI, khi DORD=0 bit có trọng số lớn nhất của dữ liệu được truyền trước (MSB) ngược lại khi DORD=1, bit LSB được truyền trước. Thật ra khi giao tiếp giữa 2 AVR với nhau, thứ tự này không quan trọng nhưng phải đảm bảo các bit DORD giống nhau trên cả Master và Slaves.
* Bit 4 – MSTR (Master/Slave Select) nếu MSTR =1 thì chip được nhận diện là Master, ngược lại MSTR=0 thì chip là Slave..
* Bit 3 và 2 – CPOL và CPHA đây chính là 2 bit xác lập cực của xung giữ nhịp và cạnh sample dữ liệu mà chúng ta đã khảo sát trong phần đầu. Sự kết hợp 2 bit này tạo thành 4 chế độ hoạt động của SPI.
Một lần nữa, chọn chế độ nào không quan trọng nhưng phải đảm bảo Master và Slave cùng chế độ hoạt động. Vì thế có thể để 2 bit này bằng 0 trong tất cả các chip. Hình 3 trình bày cách sample dữ liệu trong 4 chế độ của SPI trên AVR.
CPHA=0.
CPHA=1.
Hình3 Các chế độ hoạt động của SPI.
* Bit 1:0 – CPR1:0 hai bit này kết hợp với bit SPI2X trong thanh ghi SPSR cho phép chọn tốc độ giao tiếp SPI, tốc độ này được xác lập dựa trên tốc độ nguồn xung clock chia cho một hệ số chia. Bảng 1 tóm tắt các tốc độ mà SPI trong AVR có thể đạt. Thông thường, tốc bộ này không được lớn hơn 1/4 tốc độ xung nhịp cho chip.
SPSR (SPI Status Register): là 1 thanh ghi trạng thái của module SPI. Trong thanh ghi này chỉ có 3 bit được sử dụng. Bit 7 – SPIF là cờ báo SPI, khi một gói dữ liệu đã được truyền hoặc nhận từ SPI, bit SPIF sẽ tự động được set len 1. Bit 6 – WCOL là bít báo va chạm dữ liệu (Write Colision), bit này được AVR set lên 1 nếu chúng ta cố tình viết 1 gói dữ liệu mới vào thanh ghi dữ liệu SPDR trong khi quá trình truyền nhận trước chưa kết thúc. Bit 0 – SPI2X gọi là bit nhân đôi tốc độ truyền, bit này kết hợp với 2 bit SPR1:0 trong thanh ghi điều khiển SPCR xác lập tốc độ cho SPI.
SPDR (SPI Data Register): là thanh ghi dữ liệu của SPI. Trên chip Master, ghi giá trị vào thanh ghi SPDR sẽ kích quá trình tuyền thông SPI. Trên chip Slave, dữ liệu nhận được từ Master sẽ lưu trong thanh ghi SPDR, dữ liệu được lưu sẵn trong SPDR sẽ được truyền cho Master.
Sử dụng SPI trên AVR: SPI trên AVR hoạt động không khác nguyên lý chung của chuẩn SPI là mấy. Vận hành SPI trên AVR được thực hiện dựa trên việc ghi và đọc 3 các thanh ghi SPCR, SPSR và SPDR. Trước khi truyền nhận bằng SPI chúng ta cần khởi động SPI, quá trình khởi động thường bao gồm chọn hướng giao tiếp cho các chân SPI, chọn loại giao tiếp: Master hay Slave, chọn chế độ SPI (SPOL, SPHA) và chọn tốc độ giao tiếp. Truyền thông SPI luôn được khởi xướng bởi chip Master, khi Master muốn giao tiếp với 1 Slave nào đó, nó sẽ kéo chân SS của Slave xuống mức thấp (gọi là chọn địa chỉ) và sau đó viết dữ liệu cần truyền vào thanh ghi dữ liệu SPDR, khi dữ liệu vừa được viết vào SPDR xung giữ nhịp sẽ được tự động tạo ra trên SCK và quá trình truyền nhận bắt đầu. Đối với các chip Slave, khi chân SS bị kéo xuống nó sẽ sẵn sàng cho quá trình truyền nhận. Khi phát hiện xung giữ nhịp trên SCK, Slave sẽ bắt đầu sample dữ liệu đến trên đường MOSI và gởi dữ liệu di trên MISO.
II. Chuyển đổi dữ liệu tương tự (analog) sang dữ liệu số (digital).
Trong các ứng dụng đo lường và điều khiển bằng vi điều khiển bộ chuyển đổi tương tự-số (ADC) là một thành phần rất quan trọng. Dữ liệu trong thế giới của chúng ta là các dữ liệu tương tự (analog). Ví dụ nhiệt độ không khí buổi sáng là 25oC và buổi trưa là 32oC, giữa hai mức giá trị này có vô số các giá trị liên tục mà nhiệt độ phải “đi qua” để có thể đạt mức 32oC từ 25oC, đại lượng nhiệt độ như thế gọi là một đại lượng analog. Trong khi đó, rõ ràng vi điều khiển là một thiết bị số (digital), các giá trị mà một vi điều khiển có thể thao tác là các con số rời rạc vì thực chất chúng được tạo thành từ sự kết hợp của hai mức 0 và 1. Ví dụ chúng ta muốn dùng một thanh ghi 8 bit trong vi điều khiển để lưu lại các giá trị nhiệt độ từ 0oC đến 255 oC, như chúng ta đã biết, một thanh ghi 8 bit có thể chứa tối đa 256 (28) giá trị nguyên từ 0 đến 255, như thế các mức nhiệt độ không nguyên như 28.123 oC sẽ không được ghi lại. Nói cách khác, chúng ta đã “số hóa” (digitalize) một dữ liệu analog thành một dữ liệu digital. Quá trình “số hóa” này thường được thực hiện bởi một thiết bị gọi là “bộ chuyển đổi tương tự - số hay đơn giản là ADC (Analog to Digital Converter).
Các file đính kèm theo tài liệu này:
- khoa luan tot nghiep-TIEN..doc