thiết kế mạch chuông báo tiết học tự động cho trường học
Trang 1LỜI CÁM ƠN
− Nhóm chúng em xin chân thành cám ơn thầy Hồ Văn Lâm hướng dẫn đề tài tiểu luận của chúng em để chúng em có thể hoàn thành học phần này Qua đây chúng em gửi lời cảm ơn chân thành đến anh Ngô Thanh Đông và các bạn trong lớp DF10DT44 đã giúp đỡ cũng như chia sẽ một số tài liệu tham khảo để nhóm chúng em có thể hoàn thành tốt báo cáo tiểu luận này
− Tuy nhiên trong quá trình viết tiểu luận này do trình độ hiểu biết của chúng em còn hạn chế, nên còn xảy ra nhiều sai sót mong thầy và các bạn góp ý bổ sung để nhóm chúng em hoàn thiện hơn về kiến thức cũng như rút kinh nghiệm cho các bài đề tài sau
Nhóm chúng em xin chân thành cảm ơn!
Bình Dương, Ngày 28 tháng 2 năm 2012
Trang 2MỤC LỤC
Trang 3A PHẦN MỞ ĐẦU
1 Lý do chọn đề tài
− Hiện nay với sự phát triển không ngừng về mọi mặt, trong đó điện tử, tự động hóa
đóng một vài trò không nhỏ Điện tử góp phần vào quá trình tự động hóa mọi thứ giúp
con người hiện đại hóa cuộc sống và các hệ thống tự động hóa điều khiển đã dần thay thế cho sức người trong các công việc trong gia đình cũng như cơ quan, trường học,xí
nghiệp và một hệ thống tự động đơn giản trong số đó là hệ thống “Chuông Báo Tiết Học” trong các trường học
− Vấn đề chuông báo tiết học là vấn đề cần thiết ở bất cứ trường học nào, giúp các thầy cô không phải canh thời gian để nhấn chuông trong các giờ vào học, ra chơi và ra
về Chính vì thế chúng em thiết kế mạch chuông báo tiết học tự động cho trường học
2 Các phương pháp nghiên cứu
− Nghiên cứu tài liệu
− Thí nghiệm mô phỏng trên Proteus 7 Professional
3 Cấu trúc
Chương 1: Cơ sở lý thyết
1.1 Tổng quan về PIC 16F887 1.2 Giới thiệu sơ lược giao tiếp I2C
1.3 Tổng quan về IC thời gian thực RTC DS 1307
1.4 Thuật toán giao tiếp I2C với Vi điều khiển PIC 16F887
Chương 2: Thiết kế mạch chuông báo tiết học
2.1 Thiết kế phần cứng 2.2 Thiết kế phần mềm
Trang 4B PHẦN NỘI DUNG CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
− PIC16F887 là vi điều khiển 8-bit có kiến trúc Harvard của Microchip có những thông số
kỹ thuật như sau:
• Clock hoạt động tối đa 20MHz
• Chu kỳ máy bằng bốn lần chu kỳ xung clock
• Chip có nhiều dạng vỏ khác nhau, loại chip được sử dụng trong đề tài là loại 40
Trang 5chân PDIP
• Điện áp hoạt động rộng từ 2V đến 5.5V
• Bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau, bus địa chỉ cũng như bus
dữ liệu là riêng biệt Bộ nhớ chương trình Flash 8K ô nhớ cho phép ghi 100,000 lần Mỗi ô nhớ có 14 bit Bộ nhớ dữ liệu RAM có 512 Byte gồm các thanh ghi chức năng đặc biệt và các thanh ghi đa mục đích Ngoài ra PIC16F887 được tích hợp 256 Byte EEPROM cho phép ghi đến 1,000,000 lần
• 35 chân I/O của 5 port điều khiển là PortA, PortB, PortC, PortD, PortE
• Bộ chuyển đổi ADC 10-bit với 14 kênh
• 3 bộ timer Bộ timer0 8-bit, bộ timer1 16-bit và bộ timer2 8-bit
• Module Capture, Compare và PWM
• Module Enhanced USART hỗ trợ RS-485, RS-232
Trang 71.1.1 Mô tả ngõ ra (I/O Port)
Hầu hết các chân của vi điều khiển PIC 16F887 đều có nhiều chức năng như hình bên dưới, ví dụ chân số 5 của PIC 16F887 được chỉ định là RA3/AN3/Vref+/C1IN+
Trang 111.1.2 Bộ nhớ
PIC 16F887 có 3 loại bộ nhớ: ROM, RAM, EEPROM Tất cả chúng đều có
đặc điểm, tổ chức và chức năng đặc thù
Rom: PIC 16F887 có 8 Kb flash rom
EEProm: giống như bộ nhớ chương trình, dữ liệu chứa trong EEProm được
lưu vĩnh cửu thậm chí khi mất nguồn điện không giống Rom, dữ liệu trong
Eeprom có thể thay đổi theo hoạt động của vi điều khiển
Ram: đây là bộ nhớ thứ 3 và cũng là 1 phần trong bộ nhớ vi điều khiển, nó
gồm 2 phần: thanh ghi dùng chung và thanh ghi có chức năng đặc biệt (SFR), tất cả thanh ghi đều được chia thành 4 bank thanh ghi
Trang 12RAM MEMORY BANKS
Trang 131.2 GIỚI THIỆU SƠ LƯỢC GIAO TIẾP I2C
− Giao thức ưu tiên truyền thông nối tiếp được phát triển bởi Philips Semiconductor và được gọi là bus I2C Vì nguồn gốc nó được thiết kế là để điều khiển liên thông IC (Inter-Intergrated Circuit) nên nó được đặt tên là I2C Tất cả các chip có tích hợp và tương thích với I2C đều có thêm một giao diện tích hợp trên Chip để truyền thông trực tiếp với các thiết bị tương thích I2C khác Việc truyền dữ liệu nối tiếp theo hai hướng 8 bit được thực thi theo 3 chế độ sau:
• Chuẩn (Standard)—100 Kbits/sec
• Nhanh (Fast)—400 Kbits/sec
• Tốc độ cao (High speed)—3.4 Mbits/sec
− Đường bus thực hiện truyền thông nối tiếp I2C gồm hai đường là đường truyền dữ
liệu nối tiếp SDA và đường truyền nhịp xung đồng hồ nối tiếp SCL Vì cơ chế hoạt
động là đồng bộ nên nó cần có một nhịp xung tín hiệu đồng bộ Các thiết bị hỗ trợ I2C đều có một địa chỉ định nghĩa trước, trong đó một số bit địa chỉ là thấp có thể cấu hình Đơn vị hoặc thiết bị khởi tạo quá trình truyền thông là đơn vị Chủ và cũng là đơn vị tạo
xung nhịp đồng bộ, điều khiển cho phép kết thúc quá trình truyền Nếu đơn vị Chủ muốn truyền thông với đơn vị khác nó sẽ gửi kèm thông tin địa chỉ của đơn vị mà nó muốn truyền trong dữ liệu truyền Đơn vị Tớ đều được gán và đánh địa chỉ thông qua đó
đơn vị Chủ có thể thiết lập truyền thông và trao đổi dữ liệu Bus dữ liệu được thiết kế để
cho phép thực hiện nhiều đơn vị Chủ và Tớ ở trên cùng Bus
Trang 14− Quá trình truyền thông I2C được bắt đầu bằng tín hiệu start tạo ra bởi đơn vị Chủ
Sau đó đơn vị Chủ sẽ truyền đi dữ liệu 7 bit chứa địa chỉ của đơn vị Tớ mà nó muốn truyền thông, theo thứ tự là các bit có trọng số lớn nhất MSB sẽ được truyền trước Bit thứ tám tiếp theo sẽ chứa thông tin để xác định đơn vị Tớ sẽ thực hiện vai trò nhận (0) hay gửi (1) dữ liệu Tiếp theo sẽ là một bit ACK xác nhận bởi đơn vị nhận đã nhận được
1 byte trước đó hay không Đơn vị truyền (gửi) sẽ truyền đi 1 byte dữ liệu bắt đầu bởi MSB Tại điểm cuối của byte truyền, đơn vị nhận sẽ tạo ra một bit xác nhận ACK mới Khuôn mẫu 9 bit này (gồm 8 bit dữ liệu và 1 bit xác nhận) sẽ được lặp lại nếu cần truyền tiếp byte nữa Khi đơn vị Chủ đã trao đổi xong dữ liệu cần nó sẽ quan sát bit xác nhận ACK cuối cùng rồi sau đó sẽ tạo ra một tín hiệu dừng STOP để kết thúc quá trình truyền thông
− I2C là một giao diện truyền thông đặc biệt thích hợp cho các ứng dụng truyền thông giữa các đơn vị trên cùng một bo mạch với khoảng cách ngắn và tốc độ thấp Ví dụ như truyền thông giữa CPU với các khối chức năng trên cùng một bo mạch như EEPROM, cảm biến, đồng hồ tạo thời gian thực Hầu hết các thiết bị hỗ trợ I2C hoạt động ở tốc độ 400Kbps, một số cho phép hoạt động ở tốc độ cao vài Mbps I2C khá đơn giản để thực thi kết nối nhiều đơn vị vì nó hỗ trợ cơ chế xác định địa chỉ
1.3 TỔNG QUAN VỀ IC THỜI GIAN THỰC RTC DS 1307
1.3.1 Giới thiệu chung về DS1307
Trang 15− IC thời gian thực là họ vi điều khiển của hãng DALLAS DS1307 có một số đặc trưng cơ bản sau:
− DS1307 là IC thời gian thực với nguồn cung cấp nhỏ dùng để cập nhật thời gian
và ngày tháng
− SRAM :56bytes
− Địa chỉ và dữ liệu được truyền nối tiệp qua 2 đường bus 2 chiều
− 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
đóng ngắt với nguồn pin cung cấp 3V
− DS1307 có 7 byte dữ liệu nằm từ địa chỉ 0x00 tới 0x06, 1 byte điểu khiển, và 56 byte lưu trữ ( dành cho người sủ dụng )
− Khi xử lý dữ liệu từ DS1307, họ đã tự chuyển cho ta về dạng số BCD, ví dụ như ta
đọc được dữ liệu từ địa chỉ 0x04 (tưong ứng với Day- ngày trong tháng) và tại 0x05
(tháng) là 0x15, 0x11
− Lưu ý đến vai trò của chân SQW/OUT Đây là chân cho xung ra của DS1307 có 4 chế độ 1Hz, 4.096HZ, 8.192Hz, 32.768Hz các chế độ này đuợc quy định bởi các bít của thanh ghi Control Register (địa chỉ 0x07 )
− Địa chỉ của DS1307là 0xD0
− Cơ chế hoạt động : DS1307 hoạt động với vai trò slave trên đường bus nối tiếp.Việc truy cập được thi hành với chỉ thị start và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi 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
1.3.2 Cơ chế hoạt động và chức năng của DS1307
Trang 16Vcc: nối với nguồn
X1,X2: nối với thạch anh 32,768 kHz
Vbat: đầu vào pin 3V
GND: đất
SDA: chuỗi data
SCL: dãy xung clock
SQW/OUT: xung vuông/đầu ra driver
− DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian và ngày tháng với 56 bytes SRAM Địa chỉ và dữ liệu được truyền nối tiếp qua 2
đường bus 2 chiều Nó cung cấp thông tin về giờ,phút,giây ,thứ,ngày ,tháng, năm.Ngày
cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày,bao gồm cả việc
tự động nhảy năm Đồng hồ có thể hoạt động ở dạng 24h hoặc 12h 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 đóng ngắt với nguồn pin cung cấp
− DS 1307 hoạt động với vai trò slave trên đường bus nối tiếp Việc truy cập được thi hành với chỉ thị START và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi 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
Trang 17− Mô tả 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 5V được cung cấp thì thiết bị có thể truy cập hoàn chỉnh và 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,25Vbat thì quá trình đọc và viết không được thực thi,tuy nhiên chức năng timekeeping không bị ảnh hưởng bởi điện áp vào thấp Khi Vcc nhỏ hơn Vbat thì RAM và timekeeper sẽ được ngắt tới nguồn cung cấp trong (thường là nguồn 1 chiều 3V)
• Vbat: Đầu vào pin cho bất kỳ một chuẩn pin 3V Điện áp pin 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 đường dây nối tiếp
• SDA (serial data input/out): là chân vào ra cho 2 đường dây nối tiếp 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 1 chân SQW/OUT phát đi 1 trong 4 tần số
Trang 18hở vì vậy nó cũng cần có một điện trở kéo trong Chân nàysẽ hoạt động khi
cả Vcc và Vbat được cấp
• 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, để hoạt động ổn định thì phải nối thêm 2 tụ 33pF
• Cũng có DS1307 với bộ tạo dao động trong tần số 32,768kHz, với cấu hình này thì chân X1 sẽ được nối vào tín hiệu dao động trong còn chân X2 thì để
hở
1.3.3 Sơ đồ địa chỉ RAM và RTC
− Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte 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 byte 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 seconds là bit clock halt (CH), khi bit này được thiết lập 1 thì dao động disable, khi nó được xoá về 0 thì dao động
được enable
− Chú ý: enable dao động trong suốt quá trình cấu hình thiết lập (CH=0) Thanh ghi
thời gian thực được mô tả như sau:
Trang 19− 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à là PM ở chế độ 24h thì bit 5 là bit chỉ 20h (từ 20h đến 23h)
− Trong quá trình truy cập dữ liệu, khi chỉ thị START được thực thi thì dòng thời gian được truyền tới một thanh ghi thứ 2, thông tin thời gian sẽ được đọc từ thanh ghi thứ cấp này, trong khi đó đồng hồ vẫn tiếp tục chạy Trong DS1307 có một thanh ghi
điều khiển để điều khiển hoạt động của chân SQW/OUT:
− OUT (output control): bit này điều khiển mức ra của chân SQW/OUT khi đầu ra xung vuông là disable Nếu SQWE = 0, mức logic ở chân SQW/OUT sẽ là 1 nếu OUT=1 và OUT = 0 nếu OUT = 0
− SQWE (square wave enable): bit này được thiết lập 1 sẽ enable đầ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
− DS1307 hỗ trợ bus 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
Trang 20này gọi là master 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 tạo ra các chỉ thị START và STOP
1.3.4 Sự truyền nhận dữ liệu trên chuỗi bus 2 dây
Tuỳ thuộc vào bit R/ w mà 2 loại truyền dữ liệu sẽ được thực thi:
− Truyền dữ liệu từ master truyền và slave nhận: 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ừ bit có giá
trị nhất (MSB)
− Truyền dữ liệu từ slave và master nhận: 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 sự 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ì sự 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
1.3.5 DS1307 có thể hoạt động ở 2 chế độ sau
− Chế độ slave nhận ( chế độ DS1307 ghi): 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 các điều kiện START và STOP sẽ được nhận dạng khi bắt đầu và kết thúc
một truyền 1 chuỗi 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 chiều 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 địa chỉ của DS1307, là
1101000, tiếp theo đó là bit chiều (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 DS1307 nhận dạng được địa chỉ và bit ghi thì master sẽ gửi một địa chỉ thanh ghi 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
Trang 21− Chế độ slave phát ( chế độ DS1307 đọc): byte đầu tiên slave nhận được tương tự như chế độ slave ghi Tuy nhiên trong chế độ này thì bit chiều lại chỉ chiều truyền ngược lại Chuỗi dữ liệu được phát đi trên SDA bởi DS 1307 trong khi chuỗi xung clock vào 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 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 chiều cho phép đọc là 1 Sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ nhận 1 bit acknowledge trên đường SDA Sau đó DS1307 bắt đầu gửi dữ liệu tới địa chỉ con trỏ thanh ghi thông qua con trỏ thanh ghi Nếu con trỏ thanh ghi không được viết vào trước khi chế độ đọc được thiết lập thì
địa chỉ đầu tiên được đọc sẽ là địa chỉ cuối cùng chứa trong con trỏ thanh ghi DS1307
sẽ nhận được một tín hiệu Not Acknowledge khi kết thúc quá trình đọc Đọc dữ liệu-chế
độ slave phát
Thời gian thực hiện việc đọc,ghi dữ liệu của DS1307: sơ đồ đồng bộ: