13
Mch đng h hin th gi pht giây ,c kh năng lưu gi khi mt đin .Thch hp cho nhng ai mun t tay lm cho riêng mnh ,hoc tng bn b. Mch s dng chip thi gian thc DS 1307 hot đng tn s 32768kHZ đưc nuôi bng ngun d phng 3V c th hot đng trong thi gian 5 năm khi k c ngun đin I, Ni qua về chuẩn giao tiếp I2c Giao thức ưu tiên truyền thông ni tiếp đưc phát trin bi Philips Semiconductor v đưc gọi l bus I2C. V ngun gc n đưc thiết kế l đ điều khin liên thông IC (Inter- Intergrated Circuit) nên n đưc đt tên l I2C. Tt c các chip c tch hp v tương thch với I2C đều c thêm mt giao din tch hp trên Chip đ truyền thông trc tiếp với các thiết b tương thch I2C khác. Vic truyền d liu ni tiếp

Mạch đồng hồ hiển thị giờ phút giây

Embed Size (px)

Citation preview

Mach đông hô hiên thi giơ phut giây ,co kha năng lưu giơ khi mât điên .Thich hơp cho nhưng ai muôn tư tay lam cho riêng minh ,hoăc tăng ban be.

Mach sư dung chip thơi gian thưc DS 1307 hoat đông ơ tân sô 32768kHZ đươc nuôi băng nguôn dư phong 3V co thê hoat đông trong thơi gian 5 năm khi k co nguôn điên

I, Noi qua về chuẩn giao tiếp I2cGiao thức ưu tiên truyền thông nôi tiếp đươc phát triên bơi Philips Semiconductor va đươc gọi la bus I2C. Vi nguôn gôc no đươc thiết kế la đê điều khiên liên thông IC (Inter-Intergrated Circuit) nên no đươc đăt tên la I2C. Tât ca các chip co tich hơp va tương thich với I2C đều co thêm môt giao diên tich hơp trên Chip đê truyền thông trưc tiếp với các thiết bi tương thich 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 la đương truyền dư liêu nôi tiếp SDA va đương truyền nhip xung đông hô nôi tiếp SCL. Vi cơ chế hoat đông la đông bô nên no cân co môt nhip xung tin hiêu đông bô. Các thiết bi hỗ trơ I2C đều co môt đia chỉ đinh nghĩa trước, trong đo môt sô bit đia chỉ la thâp co thê câu hinh. Đơn vi hoăc thiết bi khơi tao quá trinh truyền thông la đơn vi Chủ va cũng la đơn vi tao xung nhip đông bô, điều khiên cho phép kết thuc quá trinh

truyền. Nếu đơn vi Chủ muôn truyền thông với đơn vi khác no sẽ gưi kem thông tin đia chỉ của đơn vi ma no muôn truyền trong dư liêu truyền. Đơn vi Tớ đều đươc gán va đánh đia chỉ thông qua đo đơn vi Chủ co thê thiết lập truyền thông va trao đổi dư liêu. Bus dư liêu đươc thiết kế đê cho phép thưc hiên nhiều đơn vi Chủ va Tớ ơ trên cùng Bus. Quá trinh truyền thông I2C đươc bắt đâu băng tin hiêu start tao ra bơi đơn vi Chủ. Sau đo đơn vi Chủ sẽ truyền đi dư liêu 7 bit chứa đia chỉ của đơn vi Tớ ma no muôn truyền thông, theo thứ tư la các bit co 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 đinh đơn vi Tớ sẽ thưc hiên vai tro nhận (0) hay gưi (1) dư liêu. Tiếp theo sẽ la môt bit ACK xác nhận bơi đơn vi nhận đã nhận đươc 1 byte trước đo hay không. Đơn vi truyền (gưi) sẽ truyền đi 1 byte dư liêu bắt đâu bơi MSB. Tai điêm cuôi của byte truyền, đơn vi nhận sẽ tao ra môt bit xác nhận ACK mới. Khuôn mẫu 9 bit nay (gôm 8 bit dư liêu va 1 bit xác nhận) sẽ đươc lăp lai nếu cân truyền tiếp byte nưa. Khi đơn vi Chủ đã trao đổi xong dư liêu cân no sẽ quan sát bit xác nhận ACK cuôi cùng rôi sau đo sẽ tao ra môt tin hiêu dừng STOP đê kết thuc quá trinh truyền thông. I2C la môt giao diên truyền thông đăc biêt thich hơp cho các ứng dung truyền thông giưa các đơn vi trên cùng môt bo mach với khoang cách ngắn va tôc đô thâp. Vi du 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 mach như EEPROM, cam biến, đông hô tao thơi gian thưc... Hâu hết các thiết bi hỗ trơ I2C hoat đông ơ tôc đô 400Kbps, môt sô cho phép hoat đông ơ tôc đô cao vai Mbps. I2C khá đơn gian đê thưc thi kết nôi nhiều đơn vi vi no hỗ trơ cơ chế xác đinh đia chỉ.

II, Sơ lươc về chip thơi gian thưc Ds1307

DS1307 la chip đông hô thơi gian thưc (RTC : Real-time clock), khái niêm thơi gian thưc ơ đây đươc dùng với ý nghĩa thơi gian tuyêt đôi ma con ngươi đang sư dung, tinh băng giây, phut, giơ… DS1307 la môt san phẩm của Dallas Semiconductor (môt công ty thuôc Maxim Integrated Products). Chip nay co 7 thanh ghi 8-bit chứa thơi gian la: giây, phut, giơ, thứ (trong tuân), ngay, tháng, năm. Ngoai ra DS1307 con co 1 thanh ghi điều khiên ngõ ra phu va 56 thanh ghi trông co thê dùng như RAM. DS1307 xuât hiên ơ 2 goi SOIC va DIP co 8 chân

Các chân của DS1307 đươc mô ta như sau: • X1 va X2: la 2 ngõ kết nôi với 1 thach anh 32.768KHz lam nguôn tao dao đông cho chip. • VBAT: cưc dương của môt nguôn pin 3V nuôi chip. • GND: chân mass chung cho ca pin 3V va Vcc. • Vcc: nguôn cho giao diên I2C, thương la 5V va dùng chung với vi điều khiên. Chu ý la nếu Vcc không đươc câp nguôn nhưng VBAT đươc câp thi DS1307 vẫn đang hoat đông (nhưng không ghi va đọc đươc). • SQW/OUT: môt ngõ phu tao xung vuông (Square Wave / Output Driver), tân sô của xung đươc tao co thê đươc lập trinh. Như vậy chân nay hâu như không liên quan đến chức năng của DS1307 la đông hô thơi gian thưc, chung ta sẽ bỏ trông chân nay khi nôi mach. • SCL va SDA la 2 đương giao xung nhip va dư liêu của giao diên I2C. • Co thê kết nôi DS1307 băng môt mach điên đơn gian như sau:

Câu tao bên trong DS1307 bao gôm môt sô thanh phân như mach nguôn, mach dao đông, mach điều khiên logic, mach giao diên I2C, con trỏ đia chỉ va các thanh ghi (hay RAM). Sư dung DS1307 chủ yếu la ghi va đọc các thanh ghi của chip nay. Vi thế co 2 vân đề cơ ban đo la câu truc các thanh ghi va cách truy xuât các thanh ghi nay thông qua giao diên I2C. Như đã trinh bay, bô nhớ DS1307 co tât ca 64 thanh ghi 8-bit đươc đánh đia chỉ từ 0 đến 63 (từ 00H đến 3FH theo hê HexaDecimal). Tuy nhiên, thưc chât chỉ co 8 thanh ghi đâu la dùng cho chức năng “đông hô” (RTC) con lai 56 thanh ghi bỏ trông co thê đươc dùng chứa biến tam như RAM nếu muôn. Bay thanh ghi đâu tiên chứa thông tin về thơi gian của đông hô bao gôm: giây (SECONDS), phut (MINUETS), giơ (HOURS), thứ (DAY), ngay (DATE), tháng (MONTH) va năm (YEAR). Viêc ghi giá tri vao 7 thanh ghi nay tương đương với viêc “cai đăt” thơi gian khơi đông cho RTC. Viêc đọc giá tri từ 7 thanh ghi la đọc thơi gian thưc ma chip tao ra. Vi du, luc khơi đông chương trinh, chung ta ghi vao thanh ghi “giây” giá tri 42, sau đo 12s chung ta đọc thanh ghi nay, chung ta thu đươc giá tri 54. Thanh ghi thứ 8 (CONTROL) la thanh ghi điều khiên xung ngõ ra SQW/OUT (chân 6). Tuy nhiên, do chung ta không dùng chân SQW/OUT nên co thề bỏ qua thanh ghi thứ 8. Tổ chức bô nhớ của DS1307 đươc trinh bay trong hinh 3. Vi 7 thanh ghi đâu tiên la quan trọng nhât trong hoat đông của DS1307, chung ta sẽ khao sát các thanh ghi nay môt cách chi tiết. Trước hết hãy quan sát tổ chức theo từng bit của các thanh ghi nay như trong hinh

Tổ chức các thanh ghi thơi gian Thanh ghi giây (SECONDS): thanh ghi nay la thanh ghi đâu tiên trong bô nhớ của DS1307, đia chỉ của no la 0x00. Bôn bit thâp của thanh ghi nay chứa mã BCD 4-bit của chư sô hang đơn vi của giá tri giây. Do giá tri cao nhât của chư sô hang chuc la 5 (không co giây 60) nên chỉ cân 3 bit (các bit SECONDS 6:4) la co thê mã hoa đươc (sô 5 =101, 3 bit). Bit cao nhât, bit 7, trong thanh ghi nay la 1 điều khiên co tên CH (Clock halt – treo đông hô), nếu bit nay đươc set băng 1 bô dao đông trong chip bi vô hiêu hoa, đông hô không hoat đông. Vi vậy, nhât thiết phai reset bit nay xuông 0 ngay từ đâu. Thanh ghi phut (MINUTES): co đia chỉ 01H, chứa giá tri phut của đông hô. Tương tư thanh ghi SECONDS, chỉ co 7 bit của thanh ghi nay đươc dùng lưu mã BCD của phut, bit 7 luôn luôn băng 0. Thanh ghi giơ (HOURS): co thê noi đây la thanh ghi phức tap nhât trong DS1307. Thanh ghi nay co đia chỉ 02H. Trước hết 4-bits thâp của thanh ghi nay đươc dùng cho chư sô hang đơn vi của giơ. Do DS1307 hỗ trơ 2 loai hê thông hiên thi giơ (gọi la mode) la 12h (1h đến 12h) va 24h (1h đến 24h) giơ, bit6 (hinh 4) xác lập hê thông giơ. Nếu bit6=0 thi hê thông 24h đươc chọn, khi đo 2 bit cao 5 va 4 dùng mã hoa chư sô hang chuc của giá tri giơ. Do giá tri lớn nhât của chư sô hang chuc trong trương hơp nay la 2 (=10, nhi phân) nên 2 bit 5 va 4 la đủ đê mã hoa. Nếu bit6=1 thi hê thông 12h đươc chọn, với trương hơp nay chỉ co bit 4 dùng mã hoa chư sô hang chuc của giơ, bit 5 (mau orange trong hinh 4) chỉ buổi trong ngay, AM hoăc PM. Bit5 =0 la AM va bit5=1 la PM. Bit 7 luôn băng 0. Thanh ghi thứ (DAY – ngay trong tuân): năm ơ đia chỉ 03H. Thanh ghi DAY chỉ mang giá tri từ 1 đến 7 tương ứng từ Chủ nhật đến thứ

7 trong 1 tuân. Vi thế, chỉ co 3 bit thâp trong thanh ghi nay co nghĩa. Các thanh ghi con lai co câu truc tương tư, DATE chứa ngay trong tháng (1 đến 31), MONTH chứa tháng (1 đến 12) vaYEAR chứa năm (00 đến 99). Chu ý, DS1307 chỉ dùng cho 100 năm, nên giá tri năm chỉ co 2 chư sô, phân đâu của năm do ngươi dùng tư thêm vao (vi du 20xx). Ngoai các thanh ghi trong bô nhớ, DS1307 con co môt thanh ghi khác năm riêng gọi la con trỏ đia chỉ hay thanh ghi đia chỉ (Address Register). Giá tri của thanh ghi nay la đia chỉ của thanh ghi trong bô nhớ ma ngươi dùng muôn truy cập.

III,AT89S52: SƠ ĐỒ KHỐI VÀ SƠ ĐỒ CHÂN

Vi điều khiên 8051 đươc Intel cho ra đơi vao năm 1980 thuôc vi điều khiên đâu tiên của họ MCS-51. Hiên tai rât nhiều nha san xuât như Siemens, Advanced Micro Devices, Fusisu va Philips tập trung phát triên các san phẩm trên cơ sơ 8051.Atmel la hãng đã cho ra đơi các chip 89C51, 52, 55 va sau đo cai tiến thêm, hãng cho ra đơi 89S51, 89S52, 89S8252… Câu hinh 89S52: + 8KB bô nhớ chương trinh. + Dao đông bên ngoai với thach anh <24MHz. Thông thương, VĐK 89S52 chay với thach anh 12MHz. + 256 Byte Ram nôi. + 4 Port xuât nhập. + 3 Timer/ Counter 16 bit Timer 0,1,2. Timer 2 co các chức năng Capture/Compare. + 8 nguôn ngắt. + Nap chương trinh song song hoăc nap nôi tiếp qua đương SPI

Về cơ ban thi các chip nêu trên giông nhau, chỉ co môt sô tinh năng đươc cai tiến thêm. Các phiên ban về sau cang co nhiều khôi tinh năng đăc biêt hơn. Chung ta xem bang so sánh môt sô loai phổ biến như dưới đây.

Chức năng các chân 89S52 • P0,1,2,3 co chức năng cơ ban xuât/nhập. • Riêng P0, P2 con co chức năng kết nôi bô nhớ mơ rông, sẽ đươc khao sát trong phân mơ rông bô nhớ. • P1: Chân T2 va T2EX dùng cho timer/ counter 2. Hai chức năng nay sẽ khao sát trong phân Timer. Chân SS\, MOSI, MISO, SCK truyền dư liêu theo chuẫn SPI đông thơi co chức năng kết nôi với mach nap chương trinh. Xem hinh

Mach nap :

Chân ALE, PSEN, WR\, RD\ dùng đê kết nôi bô nhớ mơ rông. • Chân EA\ co chức năng

chọn bô nhớ chương trinh: EA\=GND: Chọn bô nhớ ngoai, EA\=VCC chọn bô nhớ nôi. • Chân Xtal1 va Xtal2 gắn với thach anh

IV, THUẬT TOÁN GIAO TIẾP I2C VỚI VI ĐIỀU KHIỂN 89S52

Điều kiên START and STOP START va STOP la nhưng điều kiên bắt buôc phai co khi môt thiết bi chủ muôn thiết lập giao tiếp với môt thiết bi nao đo trong mang I2C. START la điều kiên khơi đâu, báo hiêu bắt đâu của giao tiếp, con STOP báo hiêu kết thuc môt giao tiếp. Hinh 11 mô ta điều kiên START va điều kiên STOP khi giao tiếp I2C giưa DS1307 với Vi Điều Khiên.

Ban đâu khi chưa thưc hiên quá trinh giao tiếp, ca hai đương SDA va SCL đều ơ mức cao (SDA = SCL = HIGH). Luc nay bus I2C đươc coi la “rỗi” (“bus free”), sẵn sang cho môt giao tiếp. Hai điều kiên START va STOP la không thê thiếu trong viêc giao tiếp giưa các thiết bi I2C, tât nhiên la trong giao tiếp nay cũng không ngoai lê. • Điều kiên START: môt sư chuyên đổi trang thái từ cao xuông thâp trên đương SDA trong khi đương SCL đang ơ mức cao (cao = 1; thâp = 0) báo hiêu môt điều kiên START • Điều kiên STOP: Môt sư chuyên đổi trang thái từ mức thâp lên cao trên đương SDA trong khi đương SCL đang ơ mức cao. • Ca hai điều kiên START va STOPđều đươc tao ra bơi thiết bi chủ. Sau tin hiêu START, bus I2C coi như đang trong trang thái lam viêc (busy). Bus I2C sẽ rỗi, sẵn sang cho môt giao tiếp mới sau tin hiêu STOP từ phia thiết bi chủ. • Sau khi co môt điều kiên START, trong qua trinh giao tiếp, khi co môt tin hiêu START đươc lăp lai thay vi môt tin hiêu STOP thi bus I2C vẫn tiếp tuc trong trang thái bận. Tin hiêu START va lăp lai START đều co chức năng giông nhau la khơi tao môt giao tiếp.

Chế đô hoat đông

Chế đô hoat đông của I2C DS1307 co thê hoat đông ơ 2 chế đô sau: • Ở chế đô slave nhận (chế đô DS1307 ghi ): chuỗi dư liêu va chuỗi xung clock sẽ đươc nhận thông qua SDA va SCL. Sau mỗi byte đươc nhận thi 1 bit ACKnowledge sẽ đươc truyền. Các điều kiên START va STOP sẽ đươc nhận dang khi bắt đâu va kết thuc 1 truyền 1 chuỗi, nhận dang đia chỉ đươc thưc hiên bơi phân cứng sau khi châp nhận đia chỉ của slave va bit môt chiều. • 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ế đô nay thi bit chiều lai chỉ chiều chuyền ngươc lai. Chuỗi dư liêu đươc phat đi trên SDA bơi DS1307 trong khi chuỗi xung clock vao chân SCL

Đê lam viêc với DS1307, ta thưc hiên các bước như sau: • START I2C • Ghi: 0DxH (Đây la đia chỉ của DS1307 do nha san xuât quy đinh trong giao tiếp I2C) với: x=0: Ghi dư liêu vao DS1307 x=1: Đọc dư liêu vao DS1307 • Ghi tham sô x nay vao, co nghĩa la viêc tiếp theo la chung tag hi hay đọc dư liêu từ con DS1307 tùy vao giá tri x=0 (ghi dư liêu) hay

x=1 (đọc dư liêu). • Ghi vao đia chỉ thanh ghi cân ghi hoăc cân đọc (bang đô thanh ghi của DS1307 nay đã đươc giớ thiêu ơ hinh 3 & hinh 4). • Ghi hoăc đọc dư liêu. • STOP I2C

Môt vi du minh họa cho viêc đọc ghi • Thanh ghi co đia chỉ 01H chứa Data về “phut”, muôn set phut vao DS1307 chung ta lam theo quy trinh: START→Ghi: 0D0H→Ghi tiếp: 01H→Ghi tiếp: →Ghi tiếp hoăc STOP nếu chỉ muôn cai đăt thơi gian cho phut.

Nếu muôn Ghi vao đia chỉ 01H rôi kế tiếp Ghi vao đia chỉ 04H chẳng han thi chung ta phai START lai từ đâu→Ghi vao 0D0H (đê xác đinh sẽ Ghi vao DS1307 _ hướng giao tiếp la Ghi vao) →Ghi tiếp 04H→Ghi dư liêu của thanh ghi cân cai đăt→STOP I2C. • Tương tư, nếu chung ta muôn đọc thi trước hết chung ta phai ghi vao đia chỉ cân đọc: tức la vẫn tiếp tuc tiến hanh 3 thủ tuc START→Ghi 0D0H→Ghi vao đia chỉ (đia chỉ của thanh ghi ma ta muôn đọc dư liêu). Sau đo, mới START lai rôi ghi lai 0D1H (luc nay mới thông báo la ta sẽ đọc từ DS1307), tiếp theo cứ đọc binh thương (thanh ghi đọc đươc sẽ la thanh ghi co đia chỉ ta mới vừa ghi vao), tiếp tuc đọc thi đia chỉ cân đọc sẽ tư đông tăng lên cho đến khi STOP I2C.

V, SƠ ĐỒ KHỐI TỔNG QUÁT CỦA MẠCH ĐỒNG HỒ

Dưa vao sơ đô khôi của giao tiếp trên, điều cơ ban la chung ta phai viết môt phân mềm khơi tao DS1307, thưc ra la chương trinh giao tiếp I2C, đọc giá tri trong Ram của con DS1307 lưu tam thơi vao trong Ram của 89S52. Sau đo, viết thêm môt phân mềm đê đọc nôi dung trong Ram nay đưa ra hiên thi băng phương pháp quét. Đê đơn gian, viêc đọc dư liêu từ DS1307 lưu vao trong Ram của 89S52 va hiên thi giơ_phut_giây, đươc chia ra lam 2 chương trinh con nhỏ, nếu co phim nhân thi sẽ nhay đến chương trinh con xư lý phim nhân riêng.

Sơ đô nguyên lý:

VI,THIẾT KẾ PHẦN MỀM

Như đã trinh bay trong phân thuật toán gaio tiếp va sơ đô khôi tổng quát, thi chương trinh MAIN của chung ta sẽ gôm 3 muc chinh đươc mô ta cu thê trong lưu đô của chương trinh MAIN ỏ hinh

Giai thich lưu đô chinh nay: Bắt đâu, chương trinh sẽ gọi chương trinh con đọc dư liêu từ con DS1307 với chuẩn giao tiếp I2C băng phương pháp đã đươc trinh bay cu thê ơ muc 4 (thuật toán giao tiếp), sau đo, sẽ gọi chương trinh con đê quét Led 7 đoan hiên thi 6 sô: 2 sô hiên thi giá tri của Giơ, 2 sô hiên thi giá tri của Phut, 2 sô hiên thi giá tri của Giây. Nếu phim MODE (chọn chế đô cai đăt) không đươc nhân thi vong lăp của chương trinh nay sẽ chay vô tận. Nếu phim MODE đươc nhân, no sẽ nhay tới chương trinh con cai đăt giơ hay phut con tùy thuôc vao sô lân nhân phim MODE. Sau đây ta đi vao chi tiết của tùng khôi nhỏ:

ĐỌC DỮ LIỆU TỪ DS1307 LƯU VÀO TRONG RAM CỦA 89S52 Xem lưu đô chương trinh như hinh dưới. Ở đây, các chương trinh con nhỏ hơn, chẳng han như: CTC

SEND_START, SEND_STOP, SEND_BYTE, v.v. đã đươc đề cập đến trong muc 4 (thuật toán giao tiếp đã đươc đề cập ơ trên).

VII, HIỂN THỊ BẰNG PHƯƠNG PHÁP QUÉT LED 7 ĐOẠN

VIII, CÀI ĐẶT THỜI GIAN

Trong lưu đô giai thuật trên hinh trên , cho chung ta thây, vong lăp của chương trinh sẽ chay vô tận cho đến khi co phim MODE đươc ân xuông. Khi đo, no nhay đến CTC đê giai quyết viêc cai đăt thơi gian. Lưu đô giai thuật của CTC xư lý cai đăt phim đươc thê hiên ơ hinh

Lưu đô CTC cai đăt giơ CTC cai đăt phut cũng co nguyên tắc tương tư như cai đăt giơ nên không đươc noi ra ơ đây. Nhin vao lưu đô chung ta thây, ThanhGhi=02H, la đia chỉ của thanh ghi Giơ trong con DS1307, như vậy, muc đich của viêc đinh nghĩa ô nhớ ThanhGhi la đê xác đinh đia chỉ thay đổi giá tri trong ô nhớ RAM của con DS1307. CTC cai đăt giơ sẽ lăp vô tận va CTC hiên thi giơ sẽ chỉ cho hiên thi 2 Led 7 đoan, chỉ hiên thi giơ trong khi cai đăt, tât ca các đen Led con lai đều tắt hết. Trong khi CTC cai đăt đang chay vô tận, nếu co phim INC hoăc DEC đươc nhân thi no sẽ nhay đến CTC tăng hoăc giam tùy vao phim đươc nhân. CTC tăng giơ đươc chỉ ra ơ hinh 22 bên dưới đây, nguyên tắc của CTC giam giơ cũng như vậy.

Lưu đô CTC tăng giơ Nếu nhân phim tăng quá 23, thi chương trinh sẽ đăt thơi gian lai giá tri la 00h.