Nội dung thiết kế:
Chương I : Giới Thiệu Chung.
Chương II : Các linh kiện chính được sử dụng trong mạch.
Chương III:Các khối mạch cần sử dụng và sơ đồ mạch hoàn chỉnh.
Chương IV: Chương trình phần mềm.
Chương V : Tổng kết.
Lời nói đầu
Ngày nay nhân loại đang trải qua những sự phát triển vượt về mọi mặt.Trong đó điện tử, tự động hoá đóng một vai trò không nhỏ. Điện tử góp phần vào quá trình tự động hoá mọi thứ giúp con người hiện đại hoá cuộc sống.
Vận dụng những kiến thức đã được học trong quá trình học tập ở trường nhóm em thực hiện đồ án I này. Đồ án này được áp dụng chủ yếu dựa vào vi điều khiển. Mà thực tế là IC ATMEGA16, nhằm mục đích giúp em hiểu một cách tường tận hơn về những gì về vi điều khiển, cách đọc, viết va nhận biết về các chân IC mà em đã được học từ thầy cô trong trường, tìm hiểu và nghiên cứu qua sách cũng như cách thức vận dụng nó trong thực tế.
Trong thực tế, các ứng dụng của vi điều khiển rất đa dạng và phong phú.Từ những ứng dụng đơn giản chỉ có vài thiết bị ngoại vi cho đến những hệ thống điều khiển phức tạp .Tuy nhiên do pham vi trình độ của em còn hạn chế, nên việc nghiên cứu và tìm hiểu về vi điều khiển còn nhiều điều chưa biết. Trong bài viết của em, em xin giới thiêu ứng dụng IC ATMEGA16 để hiển thị bộ đếm GIỜ-PHÚT-GIÂY trên 6 Led 7thanh.
Tuy nhiên trong quá trình viêt 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 để chúng em được hiểu biết hơn trong quá trình học tâp tiếp theo.
Mục Lục:
Đề mục Trang
Nội dung thiết kế 2
Lời nói đầu 2
Mục lục 3
Chương 1: Giới Thiệu Chung
1. Sơ lược
2. Sơ đồ khối 4
Chương 2: Các linh kiện chính được sử dụng trong mạch
1. Vi điều khiển ATMEGA16:
a. Giới thiệu chung.
b. Sơ đồ khối.
c. Sơ đồ chân.
d. Ý nghĩa của các chân
2. IC tạo nguồn ổn áp chuẩn 7805.
3. IC tạo thời gian thực DS1307.
4. LED 7thanh.
Chương 3:Các khối mạch cần sử dụng và sơ đồ mạch hoàn chỉnh
1,Khối tạo nguồn
2,Khối Reset
3,Khối điều khiển
4,Khối tạo xung dao động
5,Khối hiển thị
6,Khối tạo thời gian thực 20
Chương 4: Sơ đồ mạch hoàn chỉnh.
Sơ đồ mạch nguyên lý
Sơ đồ mạch in
Chương 5: Chương trình phần mềm
Sơ đồ thuật toán
Code chương trình cho AT16
31 trang |
Chia sẻ: banmai | Lượt xem: 2788 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Thiết kế đồng hồ thời gian thực, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nội dung thiết kế:
Chương I : Giới Thiệu Chung.
Chương II : Các linh kiện chính được sử dụng trong mạch.
Chương III:Các khối mạch cần sử dụng và sơ đồ mạch hoàn chỉnh.
Chương IV: Chương trình phần mềm.
Chương V : Tổng kết.
Lời nói đầu
Ngày nay nhân loại đang trải qua những sự phát triển vượt về mọi mặt.Trong đó điện tử, tự động hoá đóng một vai trò không nhỏ. Điện tử góp phần vào quá trình tự động hoá mọi thứ giúp con người hiện đại hoá cuộc sống.
Vận dụng những kiến thức đã được học trong quá trình học tập ở trường nhóm em thực hiện đồ án I này. Đồ án này được áp dụng chủ yếu dựa vào vi điều khiển. Mà thực tế là IC ATMEGA16, nhằm mục đích giúp em hiểu một cách tường tận hơn về những gì về vi điều khiển, cách đọc, viết va nhận biết về các chân IC mà em đã được học từ thầy cô trong trường, tìm hiểu và nghiên cứu qua sách cũng như cách thức vận dụng nó trong thực tế.
Trong thực tế, các ứng dụng của vi điều khiển rất đa dạng và phong phú.Từ những ứng dụng đơn giản chỉ có vài thiết bị ngoại vi cho đến những hệ thống điều khiển phức tạp .Tuy nhiên do pham vi trình độ của em còn hạn chế, nên việc nghiên cứu và tìm hiểu về vi điều khiển còn nhiều điều chưa biết. Trong bài viết của em, em xin giới thiêu ứng dụng IC ATMEGA16 để hiển thị bộ đếm GIỜ-PHÚT-GIÂY trên 6 Led 7thanh.
Tuy nhiên trong quá trình viêt 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 để chúng em được hiểu biết hơn trong quá trình học tâp tiếp theo.
Nhóm chúng em xin chân thành cảm ơn!
Hà Nội, Ngày 17 tháng 11 năm 2009.
Mục Lục:
Đề mục
Trang
Nội dung thiết kế
2
Lời nói đầu
2
Mục lục
3
Chương 1: Giới Thiệu Chung
Sơ lược
Sơ đồ khối
4
4
4
Chương 2: Các linh kiện chính được sử dụng trong mạch
1. Vi điều khiển ATMEGA16:
Giới thiệu chung.
Sơ đồ khối.
Sơ đồ chân.
Ý nghĩa của các chân
2. IC tạo nguồn ổn áp chuẩn 7805.
3. IC tạo thời gian thực DS1307.
4. LED 7thanh.
5
5
5
9
10
11
11
12
20
Chương 3:Các khối mạch cần sử dụng và sơ đồ mạch hoàn chỉnh
1,Khối tạo nguồn
2,Khối Reset
3,Khối điều khiển
4,Khối tạo xung dao động
5,Khối hiển thị
6,Khối tạo thời gian thực
20
20
21
21
22
23
24
Chương 4: Sơ đồ mạch hoàn chỉnh.
Sơ đồ mạch nguyên lý
Sơ đồ mạch in
25
26
Chương 5: Chương trình phần mềm
Sơ đồ thuật toán
Code chương trình cho AT16
27
28
: Giới Thiệu Chung
Sơ Lược:
Trong công nghệ điện tử vi xử lý, vi điều khiển là một thành phần quan trọng không thể thiếu nó mang nhiều tính ưu việt: có thể thay thế một mạch điện phức tạp bằng một vi mạch nhỏ gọn với chi phí thấp hơn, nhưng ứng dụng lại đa dạng và linh hoạt hơn, tiết kiệm năng lượng hơn, tốc độ xử lý nhanh hơn,…
Để học tập tốt và hiểu sâu về môn học vi xử lý ngoài những kiến thức trên sách vở cần có những ứng dụng vào thực tế. Trên cơ sở đó chúng em tìm hiểu và thiết kế sản phẩm là mạch ĐỒNG HỒ THỜI GIAN THỰC dùng vi điều khiển AVR của ATMEL. Có khả năng điều chỉnh và thay đổi được thời gian. So với những mạch đồng hồ dùng họ vi điều khiển 8051 và PIC thì AVR có ưu điểm hơn là ngôn ngữ lập trình được viết bằng C thì chương trình sẽ ngắn gọn hơn, so với 8051 thì tốc độ xử lý tín hiệu nhanh hơn.
Sơ đồ khối:
Vi Điều Khiển
ATmega16
Khối nguồn
Tạo thời gian thực
Khối hiển thị
Điều khiển
Tạo xung dao động
Reset
Chương II: Các linh kiện chính được sử dụng trong mạch.
1. Vi điều khiển Atmega 16.
Giới thiệu chung
ATmega16 là vi điều khiển 8 bit dựa trên kiến trúc RISC. Với khả năng thực hiện
mỗi lệnh trong vòng một chu kỳ xung clock, ATmega16 có thể đạt được tốc độ 1MIPS trên mỗi MHz (1 triệu lệnh/s/MHz).
ATmega16 có các đặc điểm sau: 16KB bộ nhớ Flash với khả năng đọc trong khi ghi, 512 byte bộ nhớ EEPROM, 1KB bộ nhớ SRAM, 32 thanh ghi chức năng chung, 32 đường vào ra chung, 3 bộ định thời/bộ đếm, ngắt nội và ngắt ngoại, USART, giao tiếp nối tiếp 2 dây, 8 kênh ADC 10 bit,....ATmega 16 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,...
Cấu trúc nhân AVR
CPU của AVR có chức năng bảo đảm sự hoạt động chính xác của các chương trình. Do đó nó phải có khả năng truy cập bộ nhớ, thực hiện các quá trình tính toán, điều khiển các thiết bị ngoại vi và quản lý ngắt.
Cấu trúc tổng quát
AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữ liệu. Các lệnh được thực hiện chỉ trong một chu kỳ xung clock. Bộ nhớ chương trình được lưu trong bộ nhớ Flash.
ALU
ALU làm việc trực tiếp với các thanh ghi chức năng chung. Các phép toán được thực hiện trong một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit.
Thanh ghi trạng thái
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic.
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập).
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0).
N: Negative Flag (Nếu kết quả của phép toán là âm).
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)V, For signed tests (S=N XOR V) S: N.
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung
gian trong các lệnh BLD,BST).
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt. Nếu bit
này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.)
Các thanh ghi chức năng chung
Con trỏ ngăn xếp (SP)
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit. Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E). Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp.
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi.
Quản lý ngắt
Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình trạng sẵn sxàng cho đổi dữ liệu của mình.Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC,hợc khi nó đã truyền được một byte thì cờ TX được thiết lập…Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện. Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên .Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trường hợp. Trường hớp ngắt này có mức ưu tiên cao hơn thì nó sẽ được phục vụ. Còn nó mà có mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua.Bộ nhớ ngăn xếp là vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên. Để truy nhập vào SRAM thông thường thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP. Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có địa chỉ :SPL :0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E.Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lớn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi.
Sơ đồ khối:
c) Sơ đồ chân:
Ý nghĩa các chân:
ChânVcc: Chân số 10 là VCC cấp điện áp nguồn cho Vi điều khiển. Nguồn điện cấp là +5V±0.5.
Chân GND:Chân số11 và chân số 31 nối GND(hay nối Mass). Khi thiết kế cần sử dụng một mạch ổn áp để bảo vệ cho Vi điều khiển, cách đơn giản là sử dụng IC ổn áp 7805.
Port A (PA): Port A gồm 8 chân (từ chân 33 đến 40) có chức năng: đầu vào cho chuyển đổi ADC
Port B (PB): Port PB gồm 8 chân (từ chân 1 đến chân 8), ngoài có chức năng làm các đường xuất/nhập thì còn có nhiều chức năng phụ khác.
Port C (PC): Port C gồm 8 chân (từ chân 22 đến chân 29) : Nếu giao tiếp JTAG được kích hoạt điện trở trên các PC5(TDI), PC3 (TMS) ,PC2 (TCK) sẽ được kích hoạt ngay cả khi khởi động lại (reset)
Port D (PD): Port D gồm 8 chân (từ chân 14 đến 21):chưc năng xuất nhập
Chân RESET(RST): Ngõ vào RST ở chân 9 là ngõ vào Reset dùng để thiết lập trạng thái ban đầu cho vi điều khiển. Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kì máy.
Chân XTAL1 và XTAL2 : Hai chân này có vị trí chân là 12 và 13 được sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định.
Chân AVCC : Nguồn cấp cho cổng A và bộ chuyển đổi ADC , chân này nên được nối với nguồn cấp VCC bên ngoài , ngay cả khi bộ chuyển đổi ADC không được sử dụng. Nếu bộ chuyển đổi ADC không được sử dụng , chân AVCC nên được nối với nguồn qua bộ lọc.
Chân AREF : AREF là chân chuẩn analog cho bộ chuyển đổi ADC.
2. IC tạo ổn áp 7805:( IC ổn áp 5v).
Với những mạch điện không đòi hỏi độ ổn định của điện áp quá cao, sử dụng IC ổn áp thường được người thiết kế sử dụng vì mạch điện khá đơn giản. Các loại ổn áp thường được sử dụng là IC 78xx, với xx là điện áp cần ổn áp. Ví dụ 7805 ổn áp 5V, 7812 ổn áp 12V. Việc dùng các loại IC ổn áp 78xx tương tự nhau, dưới đây là minh họa cho IC ổn áp 7805:
Sơ đồ phía dưới IC 7805 có 3 chân:* Chân số 1 là chân IN.* Chân số 2 là chân GND.
* Chân số 3 là chân OUT. Ngõ ra OUT luôn ổn định ở 5V dù điện áp từ nguồn cung cấp thay đổi. Mạch này dùng để bảo vệ những mạch điện chỉ hoạt động ở điện áp 5V (các loại IC thường hoạt động ở điện áp này). Nếu nguồn điện có sự cố đột ngột: điện áp tăng cao thì mạch điện vẫn hoạt động ổn định nhờ có IC 7805 vẫn giữ được điện áp ở ngõ ra OUT 5V không đổi. Mạch trên lấy nguồn một chiều từ một máy biến áp với điện áp từ 7V đến 9V để đưa vào ngõ IN. Khi kết nối mạch điện, do nhiều nguyên nhân, người dùng dễ nhầm lẫn cực tính của nguồn cung cấp khi đấu nối vào mạch, trong trường hợp này rất dễ ảnh hưởng đến các linh kiện trên board mạch. Vì lí do đó một diode cầu được lắp thêm vào mạch, diode cầu đảm bảo cực tính của nguồn cấp cho mạch theo một chiều duy nhất, và nguời dùng cũng không cần quan tâm đến cực tính của nguồn khi nối vào ngõ IN nữa.
3. IC tạo thời gian DS1307:
Giới thiệu chung về DS1307:
IC thời gian thực là họ vi điều khiển của hãng dalat. 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.
Cơ chế hoạt động và chức năng của DS1307:
Vcc: 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:
*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 3 V đượ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ố (1Hz,4kHz,8kHz,32kHz). Chân này cũng được thiết kế theo kiểu cực máng hở 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ở.
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:
• 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 thì 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 nà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.
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.
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.
• 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ộ:
LED 7thanh:
Led 7 thanh bao gồm nhiều loại led tích hợp bên trong các led được nối chung nhau 1 chân .Trong thực tế có 2 loại led 7 thanh là loại anot chung và loại katot chung. Trong chương trình nay sử dụng loại anot chung , các led sẽ có chung nhau chân nguồn (chân dương) chân còn lại a,b,c,d,e,f,g của led nào được nối đất thì led đó sẽ sáng.
Để ra được các con số tương ứng ta có bảng logic sau:
: Các khối mạch cần sử dụng và sơ đồ mạch hoàn chỉnh
Khối tạo nguồn:
Đây là mạch dùng để tạo ra nguồn điện áp chuẩn +5V. Sử dụng IC7805.
Đầu vào là điện áp xoay chiều sau khi được biến đổi qua máy biến thế, đưa vào bộ Diod cầu để cho ra dòng điện một chiều( lúc này điện áp nằm trong khoảng từ 7->10V). Sau khi đi qua IC ổn áp 7805 sẽ tạo ra nguồn điện áp chuẩn +5V cung cấp cho mạch.
Khối Reset:
Khối RESET có tác dụng đưa vi điều khiển về trạng thái ban đầu. Khi nút Reset được ấn điện áp +5V từ nguồn được nối vào chân Reset của vi điều khiển được chạy thẳng xuống đất lúc này điện áp tại chân vi điều khiển thay đổi đột ngột về 0, VĐK nhận biết được sự thay đổi này và khởi động lại trạng thái ban đầu cho hệ thống.
Khối điều khiển:
Gồm 3 nút ấn, hoạt động tương tự nút Reset. Khi ấn nút thì chân 2,3 được nối với chân 1,4 đưa điện áp xuống đất lúc này điện áp tại 2 chân 2,3 bằng 0 làm cho vi điều khiển nhận biết được sự thay đổi này và thực hiện lệnh cần điều khiển.Nút thứ nhất có tác dụng thiết đặt chế độ cho vi điều khiển làm việc bình thường hay chuyển sang chế độ cài đặt thời gian. Nút thứ hai làm tăng thời gian cần điều chỉnh, nút 3 làm giảm thời gian.
Khối tạo xung dao động:
Đây là bộ dao động thạch anh có tác dụng tạo xung nhịp với tần số 12MHz cho VĐK hoạt động. Hai đầu này được nối vào 2chân XTAL1 và XTAL2 của VĐK.
Khối hiển thị:
Khối hiển thị bao gồm các LED 7thanh(anode chung) có các đầu vào a,b,c,d,e,f,g của các LED được nối song song với nhau và nối với các chân của PA(từ chân PA0->PA6) có tác dụng làm cho LED hiển thị dạng số mong muốn. Và đầu còn lại của 6led 7thanh được nối với 6 chân E của transistor C828 và chân B của transistor nối với PORTC(từ PC0->PC5 của vi điều khiển), VĐK làm nhiệm vụ điều khiển cho từng LED sáng trong khoảng thời gian nhất định.
Khối tạo thời gian thực:
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.
Để không phải điều chình lại thời gian vào những lúc bị mất nguồn, có thể nối thêm 1pin khoảng 3V vào chân số 3 của IC DS1307 (sao cho chân + của pin nối vàoIC và chân – của pin nối xuống đất). Hai chân 1 và 2 của DS1307 được nối vào bộ dao động thạch anh có tần số 32,768KHz để tạo dao động cho IC hoạt động.
Sơ Đồ Mạch Hoàn Chỉnh
Sơ đồ mạch nguyên lý:
Sơ đồ mạch in:
Chương VII: Chương trình phần mềm –code chương trình lập trình cho vi điều khiền ATMEGA16.
Sơ đồ thuật toán:
Bắt Đầu
Giải mã Led 7 thanh
Tạo thời gian trễ& quét hiển thị
Khởi tạo I2C&DS1307
Xuất mã hiển thị cho LED & thanh
Thời gian trễ 2ms
Quét qua từng LED
Tăng giây
Giây >59
Phút>59
Giờ >23
Xóa giây
Tăng phút
Xóa phút
Tăng giờ
Xóa giờ
Code chương trình nạp cho ATmega16:
/**************************(^-^)START(^-^)**************************/
#include
#include
// Khai bao PORT I2C
#asm
.equ __i2c_port=0x18 ; // Cho phep PORTB doc du lieu tu DS1307
.equ __sda_bit=1 ; // Bit PORTB.1 la dau vao chan SDA cua DS1307
.equ __scl_bit=0 ; // Bit PORTB.1 la dau vao chan SCL cua DS1307
#endasm
#include //Khai bao ham I2C trong thu vien Codevision
#include //Khai bao thu vien DS1307 trong thu vien Codevision
//Dinh nghia cac chan dieu khien LED
#define led1 PORTC.0
#define led2 PORTC.1
#define led3 PORTC.2
#define led4 PORTC.3
#define led5 PORTC.4
#define led6 PORTC.5
//Dinh nghia cac chan vao cua phim nhan
#define set PIND.0
#define up PIND.1
#define down PIND.2
//Cac bit de quan ly trang thai cac phim
bit set0=1,set1=1,up0=1,up1=1,down0=1,down1=1;
//Ma Hex led 7 thanh
unsigned char code[]={0x40,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char h=15,m=45,s=55;//Bien gio phut giay
unsigned char kt=0,a=0,x=0;
/*Bien kt de kiem tra xem dang o che do nao
- kt=0 :Che do chay binh thuong
- kt=1 :Che do cai dat gio
- kt=2 :Che do cai dat phut
- kt=3 :Che do cai dat giay
-Bien a de kiem tra xem truoc do o che do cai dat nao khong
- a=0 :Truoc do khong cai dat gi
- a=1 :Truoc do la o che do cai dat -->Dat lai du lieu cho DS1307*/
//Ham con
void Kt_phim();
void Read_DS1307();
void Hien_thi();
void main(void)
{
//Cho phep PORTA xuat du lieu
PORTA=0xFF;
DDRA=0xFF;
//Cho phep PORTB nhan tin hieu vao
PORTB=0x00;
DDRB=0x00;
//Cho phep PORTC xuat du lieu
PORTC=0x00;
DDRC=0xFF;
//Cho phep PORTD nhan tin hieu vao
PORTD=0xFF;
DDRD=0x00;
// Khoi tao I2C
i2c_init();
//Khoi tao DS1307
rtc_init(0,0,0);
while (1)
{
x++;//Bien chay quan ly nhap nhay cac so tuong ung voi che do cai dat
Kt_phim();
Read_DS1307();
Hien_thi();
if(x==100){x=0;}
};
}
//Ham kiem tra cai dat va doc du lieu tu DS1307
void Read_DS1307()
{
if(kt==0)
{
if(a==1) //Kiem tra truoc do co cai dat lai gio,phut,giay khong
{ //Neu co thi cai dat lai du lieu dau vao cho DS1307
rtc_set_time(h,m,s);a=0;
delay_us(300);
}
rtc_get_time(&h,&m,&s); //Doc du lieu tu DS1307
}
}
//Ham quet LED
void Hien_thi()
{
/*Kiem tra xem dang o che do nao de hien thi
- Neu kt=0:Che do chay binh thuong-->hien thi gio binh thuong
- Neu kt khac 1 dang o che do cai dat khac-->hien thi gio binh thuong
- Neu kt=1 dang o che do cai dat gio-->Hien thi gio nhap nhay
*/
if((kt==0)||(kt!=1)||((kt==1)&&(x<50)))
{
PORTA=code[h/10];led1=1;delay_us(2000);led1=0;
PORTA=code[h%10];led2=1;delay_us(2000);led2=0;
}
if((kt==0)||(kt!=2)||((kt==2)&&(x<50))) //Tuong tu nhu KT gio
{
PORTA=code[m/10];led3=1;delay_us(2000);led3=0;
PORTA=code[m%10];led4=1;delay_us(2000);led4=0;
}
if((kt==0)||(kt!=3)||((kt==3)&&(x<50)))//Tuong tu nhu KT gio
{
PORTA=code[s/10];led5=1;delay_us(2000);led5=0;
PORTA=code[s%10];led6=1;delay_us(2000);led6=0;
}
}
//Ham kiem tra phim
void Kt_phim()
{
set0=set1;set1=set; //Kiem tra trang thai ban dau cua phim
if((set0==1)&&(set1==0)) //Kiem tra xem phim co dc nhan nha hay khong
{ //Neu dc nhan nha thi tang kt++,neu khong thi
kt++;if(kt>3)kt=0; //doi toi khi nao phim dc nha moi tang bien kt
}
switch(kt) //Lua chon che do ung voi gia tri cua bien kt
{
case 0:break; //Tro lai che do chay binh thuong
case 1: //Che do cai dat gio
{
up0=up1;up1=up;a=1;
if((up0==1)&&(up1==0))
{
h++;if(h>23)h=0;
}
down0=down1;down1=down;//
if((down0==1)&&(down1==0))
{
h--;if(h>23)h=23;
}
break;
}
case 2: //Che do cai dat phut
{
up0=up1;up1=up;a=1;
if((up0==1)&&(up1==0))
{
m++;if(m>59)m=0;
}
down0=down1;down1=down;
if((down0==1)&&(down1==0))
{
m--;if(m>59)m=59;
}
break;
}
case 3: //Che do cai dat giay
{
up0=up1;up1=up;a=1;
if((up0==1)&&(up1==0))
{
s++;if(s>59)s=0;
}
down0=down1;down1=down;
if((down0==1)&&(down1==0))
{
s--;if(s>59)s=59;
}
break;
}
}
}
/******************** (^-^) THE END (^-^)************************/
Các file đính kèm theo tài liệu này:
- dongho_ds1307_2678.doc