Khóa luận Thu thập dữ liệu nhiệt độ môi trường trên cở sở dùng vi điều khiển PIC18F458

MỤC LỤC

LỜI CẢM ƠN 1

TÓM TẮT NỘI DUNG 2

CHƯƠNG 1: TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU 7

1.1 Tổng quan về hệ thống đo lường và điều khiển. 7

1.2 Hệ thống đo lường nhiệt độ. 8

CHƯƠNG 2: VI ĐIỀU KHIỂN PIC18F458 10

2.1 Tổng quan về vi điều khiển PIC. 10

2.1.1 Sơ đồ chân của vi điều khiển PIC18F458. 11

2.1.2 Một vài thông số về vi điều khiển PIC18F458. 11

2.1.2.1 CPU theo kiến trúc RISC 11

2.1.2.2 Các đặc tính ngoại vi. 11

2.2 Các ứng dụng được sử dụng trong khóa luận. 12

2.2.1 Bộ chuyển đổi tương tự số ADC. 12

2.2.2 Truyền nối tiếp đồng bộ SPI. 15

2.2.3 Truyền nối tiếp đồng bộ I2C. 18

CHƯƠNG 3: CẢM BIẾN NHIỆT ĐỘ VÀ VI MẠCH LM35 20

3.1 Nhiệt độ và ý nghĩa của đo nhiệt độ. 20

3.2 Cảm biến nhiệt độ LM35. 20

3.3.1 Một số đặc tính của LM35. 20

3.3.2 Sơ đồ ghép nối với vi điều khiển. 21

3.3.3 Xử lý và tính toán kết quả 21

CHƯƠNG 4: BÀN PHÍM PS/2 VÀ GIAO TIẾP BÀN PHÍM VỚI VI ĐIỀU KHIỂN 23

4.1 Bàn phím PS/2. 23

4.2 Giao diện vật lý. 23

4.3 Truyền nhận dữ liệu. 24

4.2.1 Thông tin từ bàn phím tới host. 24

4.2.2 Thông tin từ host tới bàn phím. 26

4.3 Mã quét. 27

4.4.1 Make Codes, Break Codes, và Typematic Repeat 28

4.4.1.1 Make code. 28

4.4.1.2 Break code. 28

4.4.1.3 Typematic. 29

4.4 Cài đặt. 29

4.4.1 Quá trình khởi động. 29

4.4.2 Các lệnh thiêt lập. 30

4.5 Mạch điều khiển bàn phím i8042. 31

4.6 PIC điều khiển bàn phím. 32

4.6.1 Sơ đồ ghép nối Keyboard PS/2 với PIC 18F452. 32

4.6.2 Khởi tạo giao tiếp và các hàm chức năng. 32

4.6.2.1 Khởi tạo giao tiếp. 32

4.6.2.2 Các hàm chức năng sử dụng trong chương trình. 33

CHƯƠNG 5: ĐỒNG HỒ THỜI GIAN THỰC 34

5.1 Mô tả chung về DS1307 34

5.2 Hoạt động của các chân. 35

5.3 Tổ chức bộ nhớ RAM của DS1307 35

5.3.1 Các thanh ghi thời gian của DS1307. 36

5.3.2 Thanh ghi điều khiển. 36

5.3 Cấu hình phần cứng. 37

5.4 Truyền dữ liệu theo chuẩn I2C. 38

5.5.1 Ghi dữ liệu vào DS1307. 38

5.5.2 Đọc dữ liệu từ DS1307. 39

5.5 Sơ đồ ghép nối PIC với DS1307 theo chuẩn I2C 40

5.6 Sơ đồ khối qúa trình khởi tạo và các hàm chức năng cho DS1307. 41

5.6.1 Khởi tạo đồng hồ thời gian thực. 41

5.6.2 Các hàm chức năng. 41

5.6.2.1 Hàm cài đặt thời gian cho đồng hồ. 42

5.6.2.2 Hàm cập nhật thời gian từ đồng hồ. 42

5.7 Giao tiếp I2C mềm. 43

5.7.1 Các bước thực hiện. 43

5.7.2 Hàm thư viện của khối I2C mềm. 43

CHƯƠNG 6: MMC VÀ ỨNG DỤNG ĐỌC GHI DỮ LIỆU 46

6.1 Chuẩn giao tiếp của MMC. 47

6.1.1 MultiMediaCard Mode. 47

6.1.2 SPI Mode. 48

6.2 Sơ đồ ghép nối MMC với PIC và một số linh kiện được sử dụng. 50

6.2.1 Sơ đồ ghép nối. 50

6.2.2 CD4050 và LM1117-3.3V. 50

6.2.2.1 CD4050. 50

6.2.2.2 LM1117-3.3V. 51

6.3 Đặc tính của MMC trong chuẩn SPI. 52

6.3.1 Các thanh ghi của MMC. 53

6.3.2 Định dạng khung lệnh của MMC. 53

6.3.3 Các lệnh được sử dụng. 54

6.3.3.1 Lớp các lệnh sử dụng. 54

6.3.3.2 Chi tiết các lệnh được sử dụng. 55

6.3.4 Đáp ứng của các lênh. 56

6.4 Khởi tạo MMC trong chế độ SPI. 57

6.4.1 Thiết lập lại phần mềm. 57

6.4.2 Khởi tạo. 58

6.5 Quá trình đọc ghi khối dữ liệu đối với MMC trong SPI mode. 60

6.6 Hệ thống tệp tin. 61

6.6.1 Master Boot Record. 63

6.6.1.1 Mục phân vùng trên MBR. 63

6.6.2 Sector khởi động. 64

6.6.3 Thư mục gốc. 65

6.6.5 Sử dụng hàm khi định dạng thẻ theo FAT16. 67

CHƯƠNG 7: LCD 71

7.1 Giới thiệu LCD. 71

7.1.1 Bảng mô tả các chân của LCD: 72

7.1.2 RAM chứa dữ liệu hiển thị. 72

7.1.3 ROM phát ký tự. 73

7.1.4 Thanh ghi chỉ thị và thanh ghi dữ liệu. 74

7.2 Lệnh và chỉ thị. 74

7.3 Khởi tạo LCD. 76

7.4 Các hàm thao tác cơ bản với LCD. 78

7.4.1 Cờ bận và đọc cờ bận. 78

7.4.2 Gửi lệnh và dữ liệu đến LCD. 79

7.4.3 Cài đặt vị trí con trỏ trên LCD. 79

7.4.4 Gửi dữ liệu tới LCD. 80

7.5 LCD hoạt động ở chế độ 4 bit. 81

7.5.1 Khởi tạo LCD ở chế độ 4 bit. 82

7.5.2 Gửi lệnh và dữ liệu tới LCD. 82

CHƯƠNG 8: KẾT QUẢ THỰC NGHIỆM 84

KẾT LUẬN 88

Ứng dụng. 88

Hướng phát triển. 88

PHỤ LỤC 1 : Sơ đồ nguyên lý 90

PHỤ LỤC 2: Keyboard Scan Codes: Set 2 91

TÀI LIỆU THAM KHẢO 93

 

 

doc92 trang | Chia sẻ: lethao | Lượt xem: 2299 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Khóa luận Thu thập dữ liệu nhiệt độ môi trường trên cở sở dùng vi điều khiển PIC18F458, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
thông tin về giờ, phút, giây, thứ, ngày, tháng, năm. Đồng hồ có thể hoạt động ở dạng 24 giờ hoặc 12giờ với chỉ thị AM/PM. DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động chuyến sang dùng nguồn cung cấp từ pin. Trong ghép nối với vi điều khiển DS1307 hoạt động với vai trò của một slave. Việc truy cập được thi hành với chỉ thị START và một mã nhậ dạng thiết bị. Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị STOP được thực thi. Sơ đồ khối của DS1307 Hinh 5.1: Sơ đồ khối của DS1307 5.2 Hoạt động của các chân. Vcc,GND: nguồn một chiều được cung cấp tới các chân này. Vcc là đầu vào 5V. Khi được cấp nguồn 5V thì IC có thể được truy xuất cách đây đủ, dữ liệu có thể đọc và viết. Khi pin 3V được nối tới thiết bị này và Vcc nhỏ hơn 1,25 x Vbat thì quá trình đọc và viết không được thực thi, tuy nhiên chức năng đồng hồ không bị ảnh hưởng. Khi Vcc nhỏ hơn Vbat thì RAM và đồng hồ sẽ chuyển sang dùng nguồn cùng câp ngoài (thường là nguồn 1 chiều 3V) từ pin Vbat: Đầu vào pin cho bất kỳ chuẩn pin lithium 3V hoặc nguồn năng lượng khác. Điện áp này phải được giữ trong khoảng từ 2,5 đến 3V để đảm bảo cho sự hoạt động của thiết bị. SCL (serial clock input): SCL được sử dụng để đồng bộ sự chuyển dữ liệu trên giao diện nối tiếp. SDA(serial data input/out): là chân vào ra của giao dien I2C. Chân SDA thiết kế theo kiểu cực máng hở, đòi hỏi phải có một điện trở kéo trong khi hoạt động. SQW/OUT (square wave/output driver): khi được kích hoạt thì bit SQWE được thiết lập bằng 1, chân SQW/OUT phát ra 1 trong 4 tần số (1Hz,4kHz,8kHz,32kHz). Chân này cũng cần có trở kéo lên trong quá trình hoạt động. Hoạt động trong cả chế độ nguồn Vcc và Vbat. X1,X2: được nối với một thạch anh tần số 32,768kHz. Là một mạch tạo dao động ngoài. 5.3 Tổ chức bộ nhớ RAM của DS1307 Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte trong thanh ghi thích hợp. Thời gian và ngày tháng được thiết lập cũng thông qua các thanh ghi này bằng cách viết vào đó những giá trị thích hợp. Nội dung của các thanh ghi dưới dạng mã BCD (binary coded decreaseimal). Bit 7 của thanh ghi 0 là bit clock halt (CH), khi bit này được thiết lập bằng 1 thì không cho phép dao động, khi được xoá về 0 thì dao động được cho phép. Chú ý khi mới bắt đầu bật nguồn thì các thanh ghi chưa được định nghĩa, do đó một điều quan trọng trong khi khởi tạo cấu hình là phải cho phép dao động bit CH xóa về 0 (CH=0). 5.3.1 Các thanh ghi thời gian của DS1307. Hình 5.2: Thanh ghi thời gian của DS1307. DS1307 có thể chạy ở chế độ 24h cũng như 12h. Bit thứ 6 của thanh ghi hours là bit chọn chế độ 24h hoặc 12h. Khi bit này ở mức cao thì chế độ 12h được chọn. Ở chế độ 12h thì bit 5 là bit AM/PM với mức cao là PM. Ở chế độ 24h thì bit 5 là bit chỉ 20h (từ 20h đến 23h). 5.3.2 Thanh ghi điều khiển. DS1307 có thanh ghi 7 dùng để điều khiển hoạt động của chân SQW/OUT OUT (output control): bit điều khiển mức lối ra của chân SQW/OUT khi đầu ra xung vuông là disable. Nếu SQWE = 0, thì mức logic ở chân SQW/OUT sẽ là 1 nếu OUT = 1, và là 0 nếu OUT = 0. Nếu SQWE = 1, cho phép đầu ra của bộ tạo dao động. Tần số của đầu ra sóng vuông phụ thuộc vào giá trị của RS1 và RS0 được cho ở bảng dưới: RS1 RS0 Tần số lố ra SQW 0 0 1 Khz 0 1 4,096 Khz 1 0 8,192 Khz 1 1 32,768 KHz 5.3 Cấu hình phần cứng. DS1307 hỗ trợ bus dữ liệu nối tiếp 2 dây, 2 chiều và giao thức truyền dữ liệu. Thiết bị gửi dữ liệu lên bus được gọi là bộ phát và thiết bị nhận gọi là bộ thu. Thiết bị điều khiển quá trình này gọi là master, còn thiết bị nhận sự điều khiển của master gọi là slave. Các bus nhận sự điều khiển của master, là thiết bị phát ra chuỗi xung clock (SCL), master sẽ điều khiển sự truy cập bus, và tạo ra các chỉ thị START và STOP. Giao diện truyền nối tiếp trên 2 đường Hinh 5.3: Giao diện ghép nối theo chuẩn I2C. 5.4 Truyền dữ liệu theo chuẩn I2C. Tuỳ thuộc vào bit R/W mà có 2 loại truyền dữ liệu sẽ được thực thi: Hình 5.4: Truyền tín hiệu trên 2 đường dây. Truyền dữ liệu từ master tới slave : Master sẽ truyền byte đầu tiên là địa chỉ của slave. Tiếp sau đó là các byte dữ liệu. Slave sẽ gửi lại bit thông báo đã nhận được (bit acknowledge) sau mỗi byte dữ liệu nhận được. Dữ liệu sẽ truyền từng bit từ bit có ý nghĩa nhất (MSB). Truyền dữ liệu từ slave tới master : byte đầu tiên (địa chỉ của slave) được truyền tới slave bởi master. Sau đó slave sẽ gửi lại master bit acknowledge. Tiếp theo đó slave sẽ gửi các byte dữ liệu tới master. Master sẽ gửi cho slave các bit acknowledge sau mỗi byte nhận được trừ byte cuối cùng, sau khi nhận được byte cuối cùng thì bit acknowledge sẽ không được gửi . Master phát ra tất cả các chuỗi xung clock và các chỉ thị START và STOP. Quá trình truyền sẽ kết thúc với chỉ thị STOP hoặc chỉ thị quay vòng START. Khi chỉ thị START quay vòng thì qúa trình truyền chuỗi dữ liệu tiếp theo được thực thi và các bus vẫn chưa được giải phóng. Dữ liệu truyền luôn bắt đầu bằng bit MSB. DS1307 có thể hoạt động ở 2 chế độ 5.5.1 Ghi dữ liệu vào DS1307. Chế độ slave receiver (ghi vào DS1307) : chuỗi dữ liệu và chuỗi xung clock sẽ được nhận thông qua SDA và SCL. Sau mỗi byte được nhận thì1 bit acknowledge sẽ được truyền ngược trở lại master. Các chỉ thị START và STOP dùng để nhận biết khi bắt đầu và kết thúc một khung truyền. Nhận dạng địa chỉ được thực hiện bởi phần cứng sau khi chấp nhận địa chỉ của slave và bit dẫn hướng. Byte địa chỉ là byte đầu tiên nhận được sau khi điều kiện START được phát ra từ master. Byte địa chỉ có chứa 7 bit (0b1101000) là địa chỉ của DS1307 bit dẫn hướng (R/W) cho phép ghi khi nó bằng 0. Sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ phát đi 1 tín hiệu acknowledge lên đường SDA. Sau khi nhận được địa chỉ master sẽ gửi địa chỉ thanh ghi sẽ được ghi vào tới DS1307 , tạo ra một con trỏ thanh ghi trên DS1307 và master sẽ truyền từng byte dữ liệu cho DS1307 sau mỗi bit acknowledge nhận được. Sau đó master sẽ truyền điều kiện STOP khi việc ghi hoàn thành. Hinh 5.5: Quá trình ghi dữ liệu vào DS1307. Giá trị 0xD0 được gửi từ master bao gồm 7 bit 0b1101000 là địa chỉ của DS1307 giá trị này được quy định từ trước và bit cuối cùng là 0 cho phép ghi vào DS1307. 5.5.2 Đọc dữ liệu từ DS1307. Chế độ slave transmitter (đọc từ DS1307) : byte đầu tiên slave nhận được tương tự như chế độ slave nhận. Tuy nhiên trong chế độ này thì bit dẫn hướng lại chỉ chiều truyền ngược lại. Chuỗi dữ liệu được phát đi trên chân SDA của DS1307, trong khi chuỗi xung clock vào đi chân SCL. Các điều kiện START và STOP được nhận dạng khi bắt đầu hoặc kết thúc khung truyền một chuỗi. Byte địa chỉ nhận được đầu tiên khi master phát đi điều kiện START. Byte địa chỉ chứa 7 bit địa chỉ của slave và 1 bit đẫn hướng cho phép đọc là 1. Sau khi nhận và giải mã byte địa chỉ thì thiết bị phát 1 ack lên đường SDA. Đữ liệu về địa chỉ đọc được gửi tới DS1307, chờ tín hiệu ack phản hồi, quá trình đọc DS1307 bắt đầu. DS1307 sẽ nhận được một tín hiệu Not Acknowledge khi kết thúc quá trình đọc. Hịnh 5.6: Quá trình đọc dữ liệu DS1307. 5.5 Sơ đồ ghép nối PIC với DS1307 theo chuẩn I2C Hình 5.6: Ghép nối PIC và DS1307. 5.6 Sơ đồ khối qúa trình khởi tạo và các hàm chức năng cho DS1307. 5.6.1 Khởi tạo đồng hồ thời gian thực. Bắt đầu Cài đặt thời gian (ghi vào DS1307) Cập nhật thời gian (đọc ra từ DS1307) Hiển thị Kiểm tra cài đặt Không Có Hình 5.7: Sơ đồ khối cơ bản việc cài đặt đồng hồ thời gian thực. 5.6.2 Các hàm chức năng. Qúa trình cài đặt thời gian bao gồm giờ, phút, giây, ngày, thứ, tháng, năm, thực hiện dựa vào chế độ slave receiver của DS1307. Các giá trị cài đặt được thực hiện ngay trong chương trình hoặc sử dụng các phím bấm từ khối giao tiếp bên ngoài. Công việc kiểm tra cài đặt có thể sử dụng ngắt ngoài của vi điều khiển, khi đó chỉ còn là quá trình cập nhật thời gian rồi hiển thị. Các giá trị về thời gian trong DS1307 sẽ luôn được cập nhật nếu ít nhất duy trì được 1 nguồn nuôi từ Vcc và Vbat. 5.6.2.1 Hàm cài đặt thời gian cho đồng hồ. Đoạn code sau viết bằng ngôn ngữ C trên trình dịch CCS v5.068 cho ta quá trình cài đặt thời gian ban đầu cho đồng hồ /////////////// Cai thoi gian ////////////// i2c_start(); //bắt đầu i2c_write(0xD0); //Cho phép ghi vào DS1307 i2c_write(0x00); //Bắt đầu từ thành ghi 0 i2c_write(set_sec(sec)); // thanh ghi 0 i2c_write(set_min(min)); // thanh ghi 1 i2c_write(set_hour(hr)); // thanh ghi 2 i2c_write(set_dow(dow)); // thanh ghi 3 i2c_write(set_day(day)); // thanh ghi 4 i2c_write(set_mth(mth)); // thanh ghi 5 i2c_write(set_year(year)); // thanh ghi 6 i2c_write(0x80); //thanh ghi7 -bo qua phat xung i2c_stop(); /////////////////////////////////////////////// 5.6.2.2 Hàm cập nhật thời gian từ đồng hồ. Sau khi cài đặt thời gian, đồng hồ bên trong DS1307 đã chạy. Muốn cập nhật thông tin từ đồng hồ, cần phải truy xuất tới IC đọc các giá trị trong các thanh ghi, các giá trị này sẽ cho ta các thông số chính xác về thời gian. Để làm được điều này phải sử dụng chế độ “slave transmitter”. Vi điều khiển gửi chỉ thị START sau đó là giá trị 0xD1, khi giá trị này tới DS1307, IC cho phép đọc các thanh ghi bắt đầu tư địa chỉ được đưa tới cho tới khi có chỉ thị STOP dừng quá trình đọc. Đoạn code sau sẽ cho ta thực hiên thao tác đó. ///////////////Doc dữ liệu DS1307/////////// i2c_start(); i2c_write(0xD0); //Gui dia chi cua slave i2c_write(0x00); //thiet lap lai con i2c_stop(); I2C_start(); I2C_write(0xD1); /* gui lenh doc du lieu */ sec = i2c_read(1); /* bat dau tu thanh ghi 0*/ min = i2c_read(1); hour = i2c_read(1); //che do 24h ko can AND dow = i2c_read(1); date = i2c_read(1); month = i2c_read(1); year = i2c_read(0); i2c_stop(); //////////////////////////////////////////// 5.7 Giao tiếp I2C mềm. Trong một số trường hợp các vi điều khiển không có khối giao diện I2C để điều khiển truyền nhận dữ liệu với slave, master hoặc như có nhưng đã sử dụng vào một ứng dụng khác. Khi đó ta hoàn toàn có thể sử dụng các chân khác của vi điều khiển và dùng phần mềm viết một khối giao tiếp I2C cho vi điều khiển. Tuy công việc này có hơi mất công tuy nhiên ta có thể tạo ra nhiều hơn 1 giao diện I2C ở trên vi điều khiển thuận tiện cho việc ghép nối với các ngoại vi sử dụng giao thức truyền dữ liệu theo loại này. Vi điều khiển PIC18F458 có một khối giao diện I2C các chân được sử dụng là PIN_C3 (SCL) và PIN_C4 (SDA) tuy nhiên các chân này lại được sử dụng vào mục đích ghép nối với thẻ nhớ MMC trong giao diện SPI, giao diện SPI các chân được sử dụng PIN_C3 (CLK), PIN_C4 (DI), PIN_C5 (DO), được trình bày rõ ở chương về MMC. Vì vậy I2C mềm được lựa chọn để ghép nối DS1307 với vi điều khiển 5.7.1 Các bước thực hiện. Để có được khối I2C mềm phải thực hiện các bước sau: Định nghĩa các chân được sử dụng cho ghép nối. Tạo ra các hàm bao gồm : khởi tạo giao thức, kết thúc giao thức, hàm đọc dữ liệu, hàm ghi dữ liệu và 1 số hàm phụ khác. 5.7.2 Hàm thư viện của khối I2C mềm. Để viết được hàm thư viện cho khối giao tiếp I2C trước hết ta phải biết về cơ chế truyền dữ liệu theo chuẩn này là như thế nào ? Hoạt động theo các bước sau: Ban đầu tín hiệu SDA và SCL cùng ở mức cao Quá trình giao tiếp bắt đầu bằng việc chuyển mức tín hiệu của SDA từ cao xuống thấp (HàL). Dữ liệu bắt đầu truyền khi SCL ở mức thấp. Thời gian của dữ liệu kéo dài trong 1 chu kỳ xung SCL. Số lượng bít truyền trong 1 khung tùy thuộc thiết bị Quá trình truyền nhận kết thúc khi SCL ở mức cao và tín hiệu SDA chuyển từ thấp lên cao (LàH). Hình 5.8: Giản đồ xung của chuẩn I2C. Dữ liệu khi đọc ghi DS1307 có độ dài 1 byte với bit MSB đi đầu. Sau khi tạo được các hàm ta chỉ cần đính thư viện vào trong chương trình và sử dụng chúng như một khối giao diện cứng. Đoạn code mô tả quá trình đọc ghi dữ liệu của DS1307 theo chuẩn I2C. ///////////////Tao giao dien I2C////////////// #define SDA_PIN RB5 // RB.5 #define SCL_PIN RB4 // RB.4 #define SDA_DIR trisb5 #define SCL_DIR trisb4 /////cac ham duoc su dung///// int8 i2c_read(void); void i2c_write(byte o_byte); void i2c_nack(void); void i2c_start(void); void i2c_stop(void); void i2c_high_sda(void); void i2c_low_sda(void); void i2c_high_scl(void); void i2c_low_scl(void); //////////////////////////////////////////// byte i2c_read(void){ byte i_byte, n; i2c_high_sda(); for (n=0; n<8; n++){ i2c_high_scl(); if (SDA_PIN){ i_byte=(i_byte << 1)|0x01; // msbit trước } else{ i_byte = i_byte << 1; } i2c_low_scl(); } return(i_byte); } ////////////////////////////////////////////// void i2c_write(byte o_byte){ byte n; for(n=0; n<8; n++){ if(o_byte&0x80){ i2c_high_sda(); } else{ i2c_low_sda(); } i2c_high_scl(); i2c_low_scl(); o_byte = o_byte << 1; } i2c_high_sda(); } //////////////////////////////////////////////// ======================================================= CHƯƠNG 6: MMC VÀ ỨNG DỤNG ĐỌC GHI DỮ LIỆU MultiMediaCards (MMC) là loai bộ nhớ nối tiếp dạng Flash được tích hợp cao và có khả năng truy xuất dữ liệu ngẫu nhiên. Nó được đọc ghi thông qua một giao diện nối tiếp rõ ràng vì vậy việc truyền dữ liệu tỏ ra nhanh chóng và an toàn. Những thẻ MMC có hệ thống các tiểu chuẩn về đặc tính kỹ thuật như điện áp số chân…, đã được định nghĩa. MultiMediaCards là một phát kiến mới trong thiết bị lưu trữ dựa trên công nghệ bán dẫn. Nó được phát triển để tạo ra những thiết bị lưu trữ rẻ và có dung lượng trung bình, ứng dụng cho các phương tiên giải trí đa phương tiện. Hinh 6.1: Cấu trúc của MMC. Hình 6.2: Hình ảnh thực tế của MMC và RS-MMC. 6.1 Chuẩn giao tiếp của MMC. MultiMediaCards có thể hoạt động trong hai loại chuẩn khác nhau như sau: MultiMedia card Mode SPI Mode Cả hai cách chuẩn (mode) sử dụng các chân giống nhau. Mặc định khi ghép nối là mode MultiMediaCard. SPI mode chỉ được lựa chọn khi kích hoạt chân CS và gủi đi CMD0. 6.1.1 MultiMediaCard Mode. Trong chuẩn MultiMedia card dữ liệu được truyền trên số đường dây nhỏ nhất. Trong trường hợp này dữ liệu là lệnh sẽ được truyền trên một đường dây riêng còn dữ liệu trên một dây riêng. CLK: với mỗi chu kỳ của tín hiệu này 1bit lệnh và dữ liệu sẽ được truyền trên đương dây. Tần số có thể thay đổi từ 0 đến 20Mhz. CMD: là kênh truyền lệnh 2 hướng sử dụng cho việc khởi tạo card và truyền dữ liệu là lệnh. Những lệnh được gửi đi từ bus master tới MultiMedia card và đáp ứng ngược trở lại cũng chạy trên đường này. DAT: cũng là một kênh song hướng dung để truyền dữ liệu. RSV: chân này được kéo lên nguồn với điện trở 2MΩ. Hinh 6.3: Ghép nối MMC với host với MultiMediaCard mode Các chân trong chuẩn MultiMedia card được mô tả như sau: Chân Tên Loại Mô tả 1 RSV NC Không sử dụng 2 CMD I/O/PP/OD Lệnh/Đáp ứng 3 Vss S Nguồn (Đất) 4 Vdd S Nguồn 5 CLK I Xung clock 6 Vss S Nguồn (Đất) 7 DAT I/O/PP Dữ liệu S: power supply; I: input; O: output; PP: push-pull; OD: open-drain; NC: not connected 6.1.2 SPI Mode. SPI (Serial Peripheral Interface) là giao tiếp nối tiếp đồng bộ được biết đến đầu tiên ở các vi điều khiển của hãng Motorola. Các thẻ nhớ MMC trên thị trường đều tương thích với chuẩn SPI này. Giống như các thiết bị khác sử dụng chuẩn này, ghép nối của MMC như sau: CS: tín hiệu lựa chọn chip (chip select) tới thẻ . CLK: tín hiệu xung nhịp (clock) tơi thẻ. DataIn: tín hiệu dữ liệu truyền tới thẻ. DataOut: tín hiệu dữ liệu đọc từ thẻ. Đặc tính chung của chuẩn SPI là truyền dữ liệu theo byte và thẻ nhớ cũng không phải là một ngoại lệ. Tất cả dữ liệu được biểu diễn thành những byte có độ dài 8 bit và được đồng bộ theo tín hiệu CS. Các chân trong chuẩn SPI được định nghĩa như bảng sau: Chân Tên Loại Mô tả 1 CS I Lựa chọn chip 2 DI I/PP Dữ liệu vào 3 Vss S Nguồn (Đất) 4 Vdd S Nguồn 5 CLK I Xung clock 6 Vss S Nguồn (Đất) 7 DAT I/O/PP Dữ liệu ra 6.2 Sơ đồ ghép nối MMC với PIC và một số linh kiện được sử dụng. 6.2.1 Sơ đồ ghép nối. Hình 6.4: Sơ đồ ghép nối modun MMC với PIC 6.2.2 CD4050 và LM1117-3.3V. 6.2.2.1 CD4050. Là vi mạch cho phép chuyển giá trị điện áp từ mức CMOS ra TTL, đầu vào của IC được nối tới vi điều khiển, giá trị điện áp đầu ra là mức TTL phù hợp với MMC. Hình 6.5: Mô hình vi mạch CD4050. Hình 6.7: Cách ghép nối cho chức năng chuyển đổi mức điện áp. 6.2.2.2 LM1117-3.3V. Với vi mạch này cho ta lối ra ổn áp 3,.3V là điện áp nuôi MMC. Hinh 6.8: Vị trí chân và cách đóng gói vi mạch. Hình 6.9: Cách ghép nối cho điện thế đầu ra ổn ap 3,3V 6.3 Đặc tính của MMC trong chuẩn SPI. SPI mode được lựa chọn cho ứng dụng của đề tài, khi đó MMC được ghép nối với vi điều khiển cụ thể là PIC18F458 theo đúng khối phần cứng được tích hợp sẵn trên PIC. Trong mode hoạt động này có 4 loại tín hiệu được sử dụng giao tiếp với host (PIC) là: clock, data in, data out, chip select. Clock : được dùng để duy trì sự đồng bộ giữa hệ thống và card. Data in: sử dụng khi truyền lệnh từ host tới thẻ, đồng thời cũng được dùng vào mục đích ghi dữ liệu vào thẻ. Data out: được dùng với mục đích ngược với data in là gửi đáp ứng từ thẻ về host và đọc dữ liệu từ thẻ. Chip select: tín một thể cụ thể sẽ được lựa chọn khi tín hiệu này kích hoạt trên nó. Dưới đây sẽ là hình ảnh minh họa quá trình truyền nhận dữ liệu giữa vi điểu khiển PIC với thẻ MMC sử dụng chuẩn SPI. Hình 6.10: Truyền nhận dữ liệu theo chuẩn SPI. Chuẩn SPI của MMC cho phép truyền dữ liệu theo 1 khối (single block) hoặc nhiều khối (multiple block). Kích thước tối đa của khối dữ liệu này có thể thay đổi tuy hãng sản xuất nằm trong khoảng từ 1- 2048 byte. Hinh 6.11: Truyền dữ liệu theo từng khối Các gói dữ liệu truyền nối tiếp nhau với các lệnh điều khiển CMD17 và CMD24 . Kiểm tra lỗi CRC: CRCs (cycle redundancy codes) được thêm vào khung truyền lệnh, đáp ứng, và dữ liệu của MMC. CRC sẽ được kích hoạt để phát hiện lỗi trước khi truyền dữ liệu, cho phép truyền lại khi một lỗi được tìm thấy. CRC nâng cao độ tin cậy của hệ thống. Trong MMC mode, CRCs là bắt buộc, 7 bit CRC được thêm vào mỗi lệnh và 16 bit CRC với 512 byte dữ liệu. Với SPI mode, CRC là một tùy chọn. 6.3.1 Các thanh ghi của MMC. Bảng danh sách các thanh ghi trong MMC. Tên thanh ghi Độ dài Mô tả OCR Operation conditions register 32 bit Định nghĩa điện thế của hệ thống MMC 1 bit = 10mV CID Card indentification register 128 bit Thông tin về nhà sản xuất, OEM, ID của thẻ. RCA Relative card address register 16 bit Sử dụng để đặt tên cho thẻ từ host CSD Card specific data register 128 bit Lưu trữ nhưng thông tin riêng của thẻ, Sự phù hợp với CIS của PCMCIA DSR Driver stage register 16 bit Sử dụng để thiết lập thông lượng trên MMC bus Status register 32 bit Chỉ thi trạng thái và tình trạng của lỗi 6.3.2 Định dạng khung lệnh của MMC. Dữ liệu nối tiếp [47] Lệnh [0] Bảng sau cho ta chi tiết ý nghĩa của các bit: Vị trí bit 47 46 [45:40] [39:8] [7:1] 0 Số bit 1 1 6 32 7 1 Giá trị 0 1 X X X 1 Mô tả Bit start Bit truyền Chỉ số lệnh Đối số CRC7 Bit kết thúc Một lệnh gồm 48 bit bit đầu tiên là “bit start” luôn luôn là 0, bit thứ 2 là bit truyền và được đặt bằng 1, 6 bit tiếp theo cho biết chỉ số của lệnh, ví dụ với CMD0 thì 8 bit đầu tiên có giá trị là 01000000b (0x40). Tiếp theo là 32 bit trường đối số có thể là 1 địa chỉ tương đối, địa chỉ đọc hoặc địa chỉ ghi, 8 bit cuối cùng là phần kiểm tra lỗi CRC với bít cuối cùng luôn là 1 6.3.3 Các lệnh được sử dụng. 6.3.3.1 Lớp các lệnh sử dụng. Các lệnh được chia thành các lớp (classes) như basic command, read command, write command và erase command. Bảng sau chỉ rõ điều này Lớp Tên lớp MMC mode SPI mode 6.3.3.2 Chi tiết các lệnh được sử dụng. Đây chỉ là những lệnh cơ bản được xem là cần thiết để 1 MMC có thể hoạt động được trong chế độ SPI. Ngoài những lệnh này còn 1 số lệnh tùy chọn khác. Chỉ số Đối số Đáp ứng Tên tóm tắt Mô tả lệnh CMD0 Không R1 GO_IDLE_STATE Lênh cho phép reset thẻ Nếu lệnh được sử dụng khi chân CS dang ở mưc thấp thì cho phép lựa chon mode hoạt động là SPI. Sau khi có lệnh này thì các lệnh CMD1 và CMD58 mới có thể sử dụng được CMD1 Không R1 SEND_OP_COND Sử dụng để khởi tạo thẻ. Host sẽ tham dò với CMD1 cho tới khi đáp ứng chuyển từ 01h (Busy) sang 00h (Ready). CMD9 Không R1 SEND_CSD Sử dụng để đọc các thông tin trong thanh ghi CSD CMD10 Không R1 SEND_CID Đọc những thông tin từ CID CMD13 Không R2 SEND_STATUS Lệnh cho phép truyền theo thứ tự những thông tin ở thanh ghi trạng thái của thẻ (status register) CMD16 [31:0] Độ dài củ khối R1 SET_BLOCKEN Lệnh dùng để thay đổi độ dài của khối dữ liệu được sử dụng trong các lệnh CMD17 đọc 1 khối (single block read) và CMD24 ghi 1 khôi (single block write). Trong các thẻ nhở thông thương giá trị này mặc định là 512 byte. CMD17 [31:0] Địa chỉ dữ liệu R1 READ_SINGLE_ BLOCK Lệnh đọc dữ liệu từ thẻ, bắt đầu từ địa chỉ ở đối số và với độ dài được thiết lập ở lênh CMD16 (mặc đinh là 512 byte). CMD24 [31:0] Địa chỉ dữ liệu R1 WRITE_BLOCK Sử dụng để đọc dữ liệu từ thẻ bắt đầu từ địa chỉ ở đối số và độ dài của khối dữ liệu được đọc được cài đặt ở lênh CMD16. CMD27 Không R1b PROGRAM_CSD Lênh sử dụng cho việc lập trình bit programmale (cho phép chương trình hóa) ở trong thanh ghi CSD CMD58 Không R3 READ_OCR Lệnh đọc nội dung của thanh ghi OCR CMD59 [31:1] Stuff bit [0:0] CRC option R1 CRC_ON_OFF Lệnh bật tắt chức năng kiểm tra lỗi CRC. Mặc định trong SPI mode là tắt bit CRC option = 1 à CRC on CRC option = 0 à CRC off 6.3.4 Đáp ứng của các lênh. Như hình 6.10 cho thấy khi mỗi Command được gửi đến MMC trên đường DI từ host, thì sẽ có một Response từ MMC gửi trở lại host qua đường DO. Trong chế độ SPI thì có 2 loại Response là R1 và R2. R2 16 bit là đáp ứng trả về từ MMC khi gửi lệnh CMD13 từ host còn R1 8 bit cho tất cả các lệnh còn lại. Phần 8 bit thấp của R2 hoàn toàn giống với R1 R1, R1b : là đáp ứng với tất cả các lệnh ngoại trừ lệnh SEND_STATUS Dữ liệu nối tiếp Bit 7 Bit 0 Ý nghĩa của các bit: Bit 7: Luôn nhận giá trị 0 Bit 6 : Lỗi tham số Bit 5 : Lỗi địa chỉ Bit 4 : Lỗi chuỗi xóa Bit 3 : Lỗi CRC Bit 2 : Lệnh không hợp lệ Bit 1 : Xóa lại Bit 0 : Trạng thái chờ. R2 : là đáp ứng dành riêng cho lệnh SEND_STATUS (CMD13). Dữ liệu nối tiếp Bit 7 Byte 1 Bit 0 | Bit 7 Byte 2 Bit 0 0 0 Ý nghĩa các bit: Byte 1: Nội dung của byte 1 của R2 hoàn toàn giống với R1. Byte 2: Bit 7 : Luôn là 0 Bit 6 : Thông số xóa Bit 5 : Vi phạm chế độ bảo vệ ghi. Bit 4 : Lỗi ecc thẻ Bit 3 : Lỗi CC Bit 2 : Lỗi Bit 1 : Bỏ qua chế độ bảo vệ ghi hoặc lỗi lệnh khóa/mở khóa thẻ Bit 0 : Khóa thẻ Các thông số trên nhận được khi các bit có giá trị là 1. 6.4 Khởi tạo MMC trong chế độ SPI. Quá trình khởi tạo trong chế độ SPI: Sau khi cấp nguồn MMC hoạt động ở MMC mode. Để chuyển sang SPI mode cần phải thực hiện quy trình sau: Cấp điện áp cho thẻ nhớ đợi trong vòng ít nhất là 1ms, thiêt lập DI và CS ở mức cao, sau khoảng 74 xung được gửi tới chân SCLK thì thẻ nhớ sẽ cho phép lệnh. 6.4.1 Thiết lập lại phần mềm. Gửi lệnh CMD0 với chân CS ở mức thấp để reset thẻ. MMC lấy mẫu tín hiệu CS khi lệnh CMD0 được phát hiện sử dụng. Nếu tín hiệu CS ở mưc thấp thì thẻ nhớ sẽ hoạt động ở chế độ SPI. Lệnh CMD0 phải là lệnh đầu tiên, trường CRC phải có giá trị hợp lệ, với lệnh CMD0 thì CRC là 0x96. Khi vào hoạt động ở chế độ SPI, thì mã kiểm tra CRC được vô hiệu hóa. Sau khi lệnh CMD0 được chấp nhận, thẻ nhớ sẽ rơi vào trạng thái chờ (idle state) một đáp ứng R1 sẽ được gửi trở lại host. Giá trị của của bit idle state là 1, byte R1 là 0x01. CRC cũng có thể cho phép lại bằng lệnh CMD59. 6.4.2 Khởi tạo. Với trạng thái chờ (idle state), thẻ nhớ chỉ cho phép các lệnh CMD0, CMD1, và CMD58. Những lệnh khác sẽ bị loại bỏ. Khi thẻ phát hiện ra CMD1 nó sẽ bắt đầu quá trình khởi tạo. Để kết thúc việc thăm dò khi khởi tạo thẻ, mạch điều khiển của host phải lặp lại quá trình gửi CMD1 và kiểm tra đáp ứng. Khi đã khởi tạo thành công, thì bit “In Idle State” trong đáp ứng R1 được xóa về 0. Xử lý qúa trình khởi tạo có thể mất tới vài trăm ms (milliseconds). Sau khi quá trình khởi tạo kêt thúc thì việc đọc/ghi sẽ được chấp nhận. Trong thời gian này, OCR và CSD có thể được đọc để cấu hình các thuộc tính của thẻ. Ban đầu giá trị về độ dài của 1 khối có thể lớn hơn 512 byte, vì vậy nếu muốn thay đổi giá trị này ta sử dụng CMD16. Quá trình trên có thể mô tả bắng sơ đồ: Hình 6.12: Sơ đồ khối khởi tạo MMC CMD0 Trạng thái đợi (Idle state) CMD1 Trạng thái không hoạt động Trạng thái sẵn sàng Bận hoặc điện thế không phù hợp Điện thế không phù hợp Đoạn code sau sẽ mô tả quá trình khởi tạo thẻ. /////////////////////////////////////////////////////// int1 MMC_Initialize(void) {    int8 i, r1;    output_high(PIN_C7);   //tat lua chon MMC    for(i=0; i < 20; i++)       spi_write(0xFF);    output_low(PIN_C7);    //delay_ms(20);    if(MMC_Command(0x40,0,0,0x95, 1, 99) != 1) goto ErrorMMC; MMCLoop:    r1 = MMC_Command(0x41, 0, 0, 0xFF, 0, 0x40);    //LCD_SetCursor(0,6);    //printf(LCD_putc, "41_R1: %X",

Các file đính kèm theo tài liệu này:

  • docThu thập dữ liệu nhiệt độ môi trường trên cở sở dùng vi điều khiển PIC18F458.doc