Thiết kế đồng hồ vạn niên điện tử bằng vi điều khiển 89S52

MỤC LỤC

Mô tả chân 89S52

PSEN là tớn hiệu ngừ ra cú tỏc dụng cho phộp đọc bộ nhớ chương trỡnh mở rộng và thường được nối đến chân OE của Eprom cho phép đọc các byte mã lệnh. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt. RST (Reset): Khi ngừ vào tớn hiệu này đưa lờn mức cao ít nhất 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống.

Tổ chức bộ nhớ bên trong 89S52

Các thanh ghi trong 89S52 được định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Mức độ ưu tiên của các ngắt được lưu trong thanh ghi IP (Interrupt Priority) hay nói cách khác thanh ghi IP cho phép chọn mức ưu tiên cho các ngắt (giá trị thanh ghi IP khi reset là 00h). Nếu chương trình của một ngắt có mức ưu tiên thấp đang chạy mà có một ngắt xảy ra với mức ưu tiên cao hơn thì chương trình này tạm dừng để chạy một chương trình khác có mức ưu tiên cao hơn.

SƠ LƯỢC VỀ CẢM BIẾN NHIỆT LM35D Cảm biến nhiệt LM35D là một mạch tích hợp nhận tín

Mô tả chân ADC0804

Bình thường chân này ở trạng thái cao và khi việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho CPU biết là dữ kiệu chuyển đổi sẵn sàng để lấy đi. Chú ý: Do tín hiệu ra của cảm biến nhiệt (LM35D) có độ phân giải là 10mV, do đó ta cũng phải chọn độ phân giải của bộ biên đổi sau cho phù hợp. Chính vì thế trước khi đưa dữ liệu qua bộ biến đổi tôi phải cho qua mạch khuếch đại với độ khuếch đại (chọn K=1.97) để đảm bảo nhiệt độ hiển thị ra tương đối chính xác.

Tổ chức bên trong ADC0804

Các chân này được đệm 3 trạng thái và dữ liệu đã được chuyển đổi chỉ được truy cập khi chân CS = 0 và chân RD đưa xuống mức thấp. Chip ADC0804 bắt đầu thực hiện quá trình chuyển đổi khi có một sự thay đổi mức logic từ thấp lên cao (xung cạnh lên) tại chân WR, trong khi chân CS ở mức thấp và chân RD ở mức cao. Quá trình đọc dữ liệu được thực hiện khi có một sự thay đổi mức logic từ cao xuống thấp (xung cạnh xuống) tại chân RD, trong khi chân CS ở mức thấp và chân WR ở mức cao.

ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI

ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠ

    Mắt thu hồng ngoại có nhiều hình dạng kích thước khác nhau nhưng cơ bản là đóng trong 1 vỏ nhựa đen chỉ cho tia hồng ngoại đi qua, có lưới bên ngoài hoặc bên trong để chống nhiễu. Tiếp theo thì tín hiệu sẽ được duy trì ở mức thấp trong khoảng thời gian 20ms và xung Start thứ 2 sẽ được phát đi để báo hiệu cho sự tiếp tục của một khung dữ liệu thứ 2. Ta chỉ cần thu 7 bit COMMAND và có thể bỏ qua 5 bit địa chỉ, bởi với cùng một điều khiển thì tất cả các nút bấm đều phát ra mã địa chỉ như nhau, chỉ khác nhau mã lệnh.

    ĐỒNG HỒ THỜI GIAN THỰC 1. Tổng quan về DS1307

      Bit cao nhất (bit thứ 7) trong thanh ghi này là 1 bit điều khiển có tên CH (Clock halt – treo đồng hồ), nếu bit này được set bằng 1 bộ dao động trong chip bị vô hiệu hóa, đồng hồ không hoạt động. I2C là chuần truyền thông nối tiếp đồng bộ, cần có 1 đường tạo xung giữ nhịp cho quá trình truyền/nhận, cứ mỗi xung trên đường giữ nhịp SCL, một bit dữ liệu trên đường SDA sẽ được lấy mẫu (sample). Dữ liệu nối tiếp trên đường SDA được lấy mẫu khi đường SCL ở mức cao trong một chu kỳ giữ nhịp, vì thế đường SDA không được đổi trạng thái khi SCL ở mức cao (trừ điều kiện START và STOP).

      Thiết bị chủ nắm vai trò tạo xung đồng bộ cho toàn hệ thống, khi giữa 2 thiết bị chủ/tớ giao tiếp thì thiết bị chủ có nhiệm vụ tạo ra xung đồng bộ và quản lý đến thiết bị tớ trong suốt quá trình giao tiếp. - Điều kiện START (gọi tắt là S): điều kiện START được thiết lập khi có một sự chuyển đổi trạng thái từ cao xuống thấp tại SDA, khi SCL đang ở mức cao (mức cao là 1, mức thấp là 0). - Điều kiện REPEAT START (bắt đầu lặp lại): khoảng giữa điều kiện START và STOP là khoảng bận của đường truyền, các master khác không tác động được vào đường truyền trong khoảng này.

      Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗi sườn lên của xung đồng hồ trên đường dây SCL, quá trình thay đổi bit dữ liệu xảy ra khi SCL đang ở mức thấp. Như đã đề cập trên, địa chỉ của thanh ghi cần truy cập sẽ được lưu trong thanh ghi địa chỉ (hay con trỏ địa chỉ), vì vậy byte dữ liệu đầu tiên sẽ được chứa trong thanh ghi địa chỉ của DS1307. Byte dữ liệu đầu tiên sẽ được ghi vào thanh ghi có địa chỉ được chỉ định bởi Word Address, sau khi ghi xong 1 byte thì Word Address tự động tăng nên các byte tiếp theo sẽ được ghi liên tiếp vào DS1307 ở các thanh ghi kế sau.

      Lưu ý: dữ liệu được đọc tại thanh ghi được chỉ định bởi con trỏ địa chỉ, vì vậy muốn đọc chính xác dữ liệu từ một địa chỉ nào đó, chúng ta cần thực hiện quá trình ghi giá trị cho con trỏ định địa chỉ trước khi thực hiên quá trình đọc.

      THIẾT KẾ PHẦN CỨNG A. ĐO NHIỆT ĐỘ

        Khối xử lý trung tâm (CPU_2 )

        Thiết bị thu hồng ngoại được sử dụng là một mắt thu hồng ngoại 3 chân có bán sẳn trên thị trường (TSOP1738). Chức năng là đọc/ghi dữ liệu vào chip thời gian thực (DS1307), giải mã tín hiệu hồng ngoại được phát ra từ remote SONY. Cuối cùng là xuất tất cả các dữ liệu đã được xử lý ra bên ngoài thông qua khối hiển thị thứ 2 và khối âm thanh.

        IC UM66 là IC nhạc được sử dụng rất nhiều, bởi vì UM66 dể sử dụng, rẽ tiền và tiếng nhạc phát ra cũng khá hay. UM66 thường được sử dụng trong các đồng hồ báo thức hay là các thiết bị đồ chơi điện tử. Khi hệ thống được cấp nguồn chip AT89S52 (CPU_2) bắt đầu đọc thời gian thực RTC.

        Khi thời gian đã được đọc, CPU_2 tiến hành xử lý (kiểm tra xem thời gian vừa đọc có trùng với thời gian báo thức hay không? Nếu trùng thì CPU_2 kích hoạt hệ thống âm thanh và ngược lai). Khi thực hiện xong quá trình xử lý kết quả, CPU_2 xuất dữ liệu ra led 7 đoạn. Trong trường hợp CPU_2 nhận được tín hiệu truyền về từ mắt thu hồng ngoại, CPU_2 tạm ngưng hoạt động tất cả các chương trình để phục vụ chương trình ngắt, CPU_2 bắt đầu giải mã tín hiệu hồng ngoại được phát ra từ remote SONY.

        Khi giải mã xong CPU_2 gọi chương trình để tạo hiệu ứng khi điều chỉnh, cuối cùng dữ liệu được CPU_2 ghi vào RTC và thoát khỏi chương trình ngắt.

        Sơ đồ kết nối mắt thu hồng ngoại TSOP1738 như sau:
        Sơ đồ kết nối mắt thu hồng ngoại TSOP1738 như sau:

        THIẾT KẾ PHẦN MỀM

        ĐO NHIỆT ĐỘ

        • LƯU ĐỒ VÀ GIẢI THUẬT CHƯƠNG TRÌNH 1. Giải thuật

          • Tạo một xung từ thấp lên cao áp đến chân WR để ADC0804 bắt đầu quá trình chuyển đổi. • Chờ cho quá trình biến đổi được thực hiên xong (chân INTR xuống mức thấp). • Tạo một xung từ cao xuống thấp áp đến chân RD để đọc dữ liệu ra từ chip ADC0804.

          Phần mềm đo nhiệt độ (Code_1) được lập trình bằng ngôn ngữ Assembler (ASM), soạn thảo và biên dịch bằng chương trình Keil Version.

          ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI

            - Nếu phím được ấn là KEY_ON_OFF thì mở chế độ điều chỉnh ngược lại thì nhảy đến bước 10. Kế tiếp gọi chương trình để tạo ra hiệu ứng điều chỉnh tương ứng, sau đó nhảy đến bước 10. - Nếu phím được ấn là các số thì chương trình “xử lý số” được gọi để chuyển các số được ấn vào biến được lựa chọn ở trên, ghi giá trị này vào RTC.

            - Nếu phím được ấn là KEY_ON_BELL / KEY_OFF_BELL thì tương ứng với việc mở/tắt chuông theo từng giờ, sau đó nhãy đến bước 10. • Gởi địa chỉ thanh ghi đầu tiên được chọn để ghi (00h: địa chỉ thanh ghi SECOND). • Ghi tất cả các byte dữ liệu vào RTC như: giây, phút, giờ, thứ, ngày, tháng, năm, giá trị thanh ghi control và cuối cùng là thời gian báo thức.

            Chú ý: Nếu không phải là lần ghi/đọc cuối cùng thì kéo biến LAST xuống mức thấp để gởi bit ACK, ngược lại đưa biến LAST lên cao để gởi bit Not_ACK (NACK). Đầu tiên là giây, phút, giờ, thứ, ngày, tháng, năm, giá trị thanh ghi control và cuối cùng là thời gian báo thức. PHẦN MỀM ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI (CODE_2).

            Phần mềm đồng hồ thời gian thực và bộ điều khiển từ xa dùng remote hồng ngoại (Code_2) cũng được lập trình bằng ngôn ngữ Assembler (ASM), soạn thảo và biên dịch bằng chương trình Keil Version.