Mục lục:

Bộ hẹn giờ lập trình 8 kênh: 13 bước
Bộ hẹn giờ lập trình 8 kênh: 13 bước

Video: Bộ hẹn giờ lập trình 8 kênh: 13 bước

Video: Bộ hẹn giờ lập trình 8 kênh: 13 bước
Video: Hướng dẫn sử dụng bộ hẹn giờ giá 90K (KG316T) - Manual timer 2024, Tháng mười một
Anonim
Bộ hẹn giờ lập trình 8 kênh
Bộ hẹn giờ lập trình 8 kênh
Bộ hẹn giờ lập trình 8 kênh
Bộ hẹn giờ lập trình 8 kênh
Bộ hẹn giờ lập trình 8 kênh
Bộ hẹn giờ lập trình 8 kênh

Giới thiệu

Tôi đã sử dụng loạt vi điều khiển PIC của Microchip cho các dự án của mình từ năm 1993 và đã thực hiện tất cả các lập trình của mình bằng ngôn ngữ trình hợp dịch, sử dụng Microchip MPLab IDE. Các dự án của tôi bao gồm từ đèn giao thông đơn giản và đèn LED nhấp nháy, đến giao diện cần điều khiển USB cho các mô hình R / C và thiết bị đóng cắt thiết bị đóng cắt được sử dụng trong công nghiệp. Quá trình phát triển mất nhiều ngày, và đôi khi hàng nghìn dòng mã trình lắp ráp.

Sau khi nhận được Matrix Multimedia Flowcode 4 Professional, tôi khá nghi ngờ phần mềm. Nó trông quá dễ tin. Tôi quyết định dùng thử và kiểm tra tất cả các Macro Thành phần khác nhau, tất cả đều thành công rực rỡ. Phần tốt nhất của việc sử dụng Flowcode là các dự án đơn giản có thể được mã hóa trong một đêm. Sau khi chơi với I²C và đồng hồ thời gian thực DS1307, tôi quyết định thiết kế Bộ hẹn giờ 8 kênh bằng Flowcode. Không phải là một dự án nhỏ và dễ dàng, tôi tin rằng đây sẽ là một dự án tuyệt vời để tự học Flowcode.

Lựa chọn bộ vi xử lý và các thành phần khác

Do số lượng chân I / O cần thiết, rõ ràng là cần thiết bị 40 chân. PIC 18F4520 được chọn, chủ yếu cho bộ nhớ chương trình 32K và bộ nhớ dữ liệu 1536 byte. Tất cả các thành phần được sử dụng đều là thiết bị xuyên lỗ tiêu chuẩn, giúp bạn có thể xây dựng mạch trên bo mạch Vero nếu được yêu cầu. Điều này cũng hỗ trợ sự phát triển trên breadboard.

Bước 1: Mục tiêu dự án

Mục tiêu dự án
Mục tiêu dự án

Mục tiêu

- Giữ thời gian chính xác, có pin dự phòng.

- Tất cả các chương trình và dữ liệu được giữ lại, ngay cả khi mất điện.

- Giao diện người dùng đơn giản.

- Lập trình linh hoạt.

Chấm công

Sống trong một khu vực dễ bị mất điện, tiêu chuẩn 50 / 60Hz từ đường dây điện sẽ không đủ để giữ thời gian chính xác. Đồng hồ thời gian thực là điều cần thiết và sau khi thử nghiệm một số chip RTC, tôi đã quyết định chọn DS1307 do bộ dao động đơn giản và cấu hình dự phòng pin của nó. Khả năng giữ thời gian khá chính xác chỉ đạt được khi sử dụng một tinh thể 32,768 kHz được kết nối với DS1307. Độ chính xác là trong vòng 2 giây trong thời gian thử nghiệm 2 tháng bằng cách sử dụng 4 loại tinh thể khác nhau.

Lưu trữ dữ liệu

Tất cả dữ liệu chương trình hẹn giờ phải được giữ lại, ngay cả khi mất điện. Với tối đa 100 chương trình khác nhau và nhiều dữ liệu cấu hình khác nhau, rõ ràng 256 byte EEPROM trên bo mạch của PIC sẽ không đủ lớn. EEPROM 24LC256 I²C được sử dụng để lưu trữ tất cả thông tin lập trình.

Giao diện người dùng đơn giản

Giao diện người dùng chỉ bao gồm 2 mục, màn hình LCD 16 x 4 dòng với đèn nền LED và bàn phím 4 x 3. Tất cả các lập trình có thể được thực hiện chỉ với một vài nút bấm. Các bổ sung cho giao diện là bộ rung piezo âm thanh và đèn nền LCD nhấp nháy trực quan.

Bước 2: Lập trình linh hoạt

Lập trình linh hoạt
Lập trình linh hoạt

Để đảm bảo đủ tính linh hoạt của chương trình, bộ hẹn giờ có 100 chương trình có thể được cài đặt riêng lẻ. Đối với mỗi chương trình, có thể đặt Giờ đúng giờ, Thời gian tắt, Kênh đầu ra và Ngày trong tuần. Mỗi chương trình có ba chế độ:

- Tự động: Đúng giờ, Tắt thời gian, Kênh đầu ra và Ngày trong tuần được thiết lập.

- Tắt: Có thể tắt từng chương trình mà không cần xóa cài đặt. Để bật lại chương trình, chỉ cần chọn một chế độ khác.

- Ngày / Đêm: Đúng giờ, Tắt giờ, Kênh đầu ra và Ngày trong tuần được thiết lập. Hoạt động giống như chế độ Tự động, nhưng sẽ

chỉ bật đầu ra trong khoảng thời gian Bật và Tắt khi trời tối. Điều này cũng cho phép kiểm soát toàn bộ Ngày / Đêm

như sự linh hoạt bổ sung để bật đèn vào lúc hoàng hôn và tắt khi bình minh.

Ví dụ 1: Sẽ bật đèn sau 20:00 và tắt khi mặt trời mọc.:

Vào: 20:00, Tắt: 12: 00, Ví dụ 2: Sẽ bật đèn vào lúc hoàng hôn và tắt đèn lúc 23:00.

Vào: 12:00

Tắt: 23:00

Ví dụ 3: Sẽ bật đèn vào lúc hoàng hôn và tắt khi mặt trời mọc.

Vào: 12:01

Tắt: 12:00

Các tùy chọn bổ sung có sẵn, tất cả đều hoạt động độc lập với 100 chương trình Bật / Tắt.

Kênh Chương trình Hoạt động: Thay vì tắt một số chương trình, có thể tắt các kênh đầu ra riêng lẻ mà không cần thay đổi chương trình.

Đầu vào phụ trợ: Có sẵn hai đầu vào kỹ thuật số để cho phép bật một số kênh đầu ra nhất định trong một thời gian cụ thể. Ví dụ, nó có thể được sử dụng để bật một số đèn khi về nhà vào đêm muộn, khi nhấn một nút trên điều khiển từ xa hoặc để bật một loại đèn khác khi báo động trong nhà được kích hoạt.

Đầu ra phụ: Có sẵn hai đầu ra bổ sung (ngoài 8 kênh đầu ra). Chúng có thể được lập trình để bật với các kênh đầu ra nhất định hoặc với các đầu vào kỹ thuật số. Trong cài đặt của tôi, tôi có đầu ra 6-8 điều khiển việc tưới tiêu của tôi, hoạt động trên 24V. Tôi sử dụng kênh 6-8 để bật một trong các đầu ra phụ, để bật nguồn điện 24V cho hệ thống tưới.

Bật thủ công: Khi ở màn hình chính, các nút 1-8 có thể được sử dụng để bật hoặc tắt kênh theo cách thủ công.

Bước 3: Phần cứng

Phần cứng
Phần cứng

Nguồn điện: Nguồn điện bao gồm bộ chỉnh lưu, tụ điện làm mịn và cầu chì 1 Amp để bảo vệ quá tải. Nguồn cung cấp này sau đó được điều chỉnh bởi bộ điều chỉnh 7812 và 7805. Nguồn cung cấp 12V được sử dụng để điều khiển các rơle đầu ra và tất cả các mạch khác được cấp nguồn từ nguồn 5V. Vì bộ điều chỉnh 7805 được kết nối với đầu ra của bộ điều chỉnh 7812, tổng dòng điện phải được giới hạn ở 1 amp qua bộ điều chỉnh 7812. Nên gắn các bộ điều chỉnh này trên đế tản nhiệt phù hợp.

I²C Bus: Mặc dù Flowcode cho phép điều khiển I²C phần cứng, tôi quyết định sử dụng cấu hình I²C phần mềm. Điều này cho phép việc gán pin linh hoạt hơn. Mặc dù chậm hơn (50 kHz), nó vẫn hoạt động tốt so với bus I²C phần cứng. Cả DS1307 và 24LC256 đều được kết nối với bus I²C này.

Đồng hồ thời gian thực (DS1307): Trong khi khởi động, thanh ghi RTC 0 và 7 được đọc để xác định xem nó có chứa dữ liệu cấu hình và thời gian hợp lệ hay không. Sau khi thiết lập chính xác, thời gian RTC được đọc và thời gian được tải trong PIC. Đây là lần duy nhất thời gian được đọc từ RTC. Sau khi khởi động, xung 1Hz sẽ hiện diện trên chân 7 của RTC. Tín hiệu 1Hz này được kết nối với RB0 / INT0, và thông qua quy trình dịch vụ ngắt, thời gian PIC được cập nhật mỗi giây.

EEPROM bên ngoài: Tất cả dữ liệu chương trình và các tùy chọn được lưu trữ trên EEPROM bên ngoài. Dữ liệu EEPROM được tải khi khởi động và một bản sao của dữ liệu được lưu trong bộ nhớ PIC. Dữ liệu EEPROM chỉ được cập nhật khi cài đặt chương trình được thay đổi.

Cảm biến Ngày / Đêm: Một điện trở phụ thuộc ánh sáng tiêu chuẩn (LDR) được sử dụng làm cảm biến Ngày / Đêm. Vì LDR có nhiều hình dạng và chủng loại, tất cả đều có các giá trị điện trở khác nhau trong cùng điều kiện ánh sáng, tôi đã sử dụng một kênh đầu vào analog để đọc mức độ ánh sáng. Mức độ Ngày cũng như Ban đêm có thể điều chỉnh được và cho phép một số cảm biến linh hoạt hơn. Để thiết lập một số độ trễ, có thể đặt các giá trị riêng lẻ cho Ngày và Đêm. Trạng thái sẽ chỉ thay đổi nếu mức ánh sáng thấp hơn Ngày hoặc trên điểm đặt Ban đêm, lâu hơn 60 giây.

Màn hình LCD: Màn hình 4 dòng, 16 ký tự được sử dụng, vì không thể hiển thị tất cả dữ liệu trên màn hình 2 dòng. Dự án bao gồm một số ký tự tùy chỉnh, được xác định trong macro LCD_Custom_Char.

Đầu vào phụ: Cả hai đầu vào đều được đệm bằng bóng bán dẫn NPN. + 12v và 0V cũng có sẵn trên đầu nối, cho phép kết nối linh hoạt hơn với các kết nối bên ngoài. Ví dụ, một bộ thu điều khiển từ xa có thể được kết nối với nguồn cung cấp.

Đầu ra: Tất cả các đầu ra được cách ly về điện với mạch bằng rơ le 12V. Các rơ le được sử dụng, được đánh giá cho 250V AC, ở 10 ampe. Các tiếp điểm thường mở và thường đóng được đưa ra các thiết bị đầu cuối.

Bàn phím: Bàn phím được sử dụng là bàn phím ma trận 3 x 4 và được kết nối PORTB: 2..7.

Bước 4: Ngắt bàn phím

Bàn phím ngắt
Bàn phím ngắt
Bàn phím ngắt
Bàn phím ngắt
Bàn phím ngắt
Bàn phím ngắt

Tôi muốn sử dụng ngắt PORTB Interrupt on Change trên bất kỳ lần nhấn phím nào. Đối với điều này, ngắt tùy chỉnh phải được tạo trong Flowcode, để đảm bảo rằng hướng PORTB và dữ liệu được thiết lập chính xác trước và sau mỗi lần ngắt bàn phím. Một ngắt được tạo ra mỗi khi một nút được nhấn hoặc nhả. Quy trình ngắt chỉ phản hồi khi một phím được nhấn.

TÙY CHỈNH TÙY CHỈNH

Bật mã

portb = 0b00001110; trisb = 0b11110001;

intcon. RBIE = 1;

intcon2. RBIP = 1;

intcon2. RBPU = 1;

rcon. IPEN = 0;

Mã xử lý

if (intcon & (1 << RBIF))

{FCM_% n ();

portb = 0b00001110;

trisb = 0b11110001;

wreg = portb;

clear_bit (intcon, RBIF);

}

Đã tìm thấy vấn đề

Trong thời gian ngắt, quy trình phục vụ ngắt phải trong điều kiện KHÔNG, gọi bất kỳ macro nào khác có thể được sử dụng ở đâu đó trong phần còn lại của chương trình. Điều này cuối cùng sẽ dẫn đến vấn đề tràn ngăn xếp, vì ngắt có thể xảy ra cùng lúc chương trình chính cũng nằm trong cùng chương trình con. Đây cũng được xác định là LỖI NGHIÊM TRỌNG bởi Flowcode khi mã được biên dịch.

Trong mã Tùy chỉnh của Bàn phím trong GetKeyPadNumber, có một lệnh gọi đến macro Delay_us, điều này sẽ gây ra tràn ngăn xếp. Để khắc phục điều này, tôi đã loại bỏ lệnh Delay_us (10) và thay thế nó bằng 25 dòng “wreg = porta;” các lệnh. Lệnh này đọc PORTA và đặt giá trị của nó vào thanh ghi W, chỉ để có được một số độ trễ. Lệnh này sẽ được biên dịch thành một lệnh duy nhất tương tự như trình hợp dịch movf porta, 0. Đối với xung nhịp 10MHz được sử dụng trong dự án, mỗi lệnh sẽ là 400ns và để có được độ trễ 10us, tôi cần 25 lệnh này.

Lưu ý trên dòng thứ hai của Hình 3: Mã tùy chỉnh GetKeypadNumber, rằng lệnh delay_us (10) ban đầu đã bị vô hiệu hóa với “//”. Dưới đây, tôi đã thêm 25 “wreg = porta;” của mình lệnh để có độ trễ 10us mới. Không có lệnh gọi nào đến bất kỳ macro nào bên trong mã tùy chỉnh Keypad_ReadKeypadNumber, macro Bàn phím hiện có thể được sử dụng trong một quy trình dịch vụ ngắt.

Cần lưu ý rằng các thành phần Flowcode Keypad và eBlocks không sử dụng điện trở kéo lên tiêu chuẩn trên các dòng đầu vào. Thay vào đó, nó sử dụng điện trở kéo xuống 100K. Do một số nhiễu được tìm thấy trên bàn phím trong quá trình phát triển, tất cả các điện trở 100K đã được thay thế bằng 10K và tất cả các điện trở 10K được thay thế bằng 1K5. Bàn phím đã được kiểm tra để hoạt động chính xác với dây dẫn 200mm.

Bước 5: Sử dụng Bộ hẹn giờ

Sử dụng bộ hẹn giờ
Sử dụng bộ hẹn giờ
Sử dụng bộ hẹn giờ
Sử dụng bộ hẹn giờ
Sử dụng bộ hẹn giờ
Sử dụng bộ hẹn giờ

Tất cả các màn hình được thiết lập để chỉ ra tất cả thông tin cần thiết để người dùng thực hiện các thay đổi nhanh chóng đối với cài đặt. Dòng 4 được sử dụng để hỗ trợ điều hướng thông qua các menu và tùy chọn chương trình. Tổng cộng có 22 màn hình khả dụng trong quá trình hoạt động bình thường.

DÒNG 1: Thời gian và Trạng thái

Hiển thị ngày và giờ hiện tại, theo sau là các biểu tượng trạng thái:

A - Cho biết rằng Aux Input A đã được kích hoạt và bộ đếm thời gian Aux Input A đang chạy.

B - Cho biết rằng Aux Input B đã được kích hoạt và bộ đếm thời gian Aux Input B đang chạy.

C - Cho biết rằng Aux Output C đã được bật.

D - Cho biết rằng Aux Output D đã được bật.

} - Trạng thái cảm biến Ngày / Đêm. Nếu có, cho biết đó là đêm.

DÒNG 2: Kết quả chương trình

Hiển thị các kênh đã được bật bởi các chương trình khác nhau. Các kênh được hiển thị bằng số đầu ra của chúng và dấu “-“cho biết rằng đầu ra cụ thể chưa được bật. Các kênh đã bị vô hiệu hóa trong “Đầu ra chương trình đang hoạt động” sẽ vẫn được chỉ ra ở đây, nhưng đầu ra Thực sẽ không được đặt.

DÒNG 3: Kết quả đầu ra thực

Hiển thị kênh nào được bật bởi các chương trình khác nhau, Đầu vào Aux A & B hoặc đầu ra thủ công do người dùng đặt. Nhấn 0 sẽ khiến tất cả các đầu ra được kích hoạt theo cách thủ công trở về trạng thái tắt và đặt lại bộ hẹn giờ A & B Đầu ra Aux.

DÒNG 4: Menu và các tùy chọn phím (trên tất cả các menu)

Cho biết chức năng của các phím “*” và “#”.

Phần trung tâm cho biết các phím số (0-9) nào đang hoạt động cho màn hình đã chọn.

Trạng thái đầu vào của Aux Input A & B cũng được hiển thị bằng biểu tượng công tắc Mở hoặc Đóng.

Có thể bật / tắt đầu ra theo cách thủ công bằng cách nhấn phím tương ứng trên bàn phím.

Trong các menu, các phím Star và Hash được sử dụng để điều hướng qua các tùy chọn chương trình khác nhau. Các phím 0-9 được sử dụng để đặt các tùy chọn. Khi có nhiều tùy chọn trên một màn hình hoặc menu lập trình, phím Hash được sử dụng để chuyển qua các tùy chọn khác nhau. Tùy chọn đã chọn hiện tại sẽ luôn được biểu thị bằng ký tự “>” ở bên trái màn hình.

0-9 Nhập giá trị thời gian

1-8 Thay đổi lựa chọn kênh

14 36 Bước qua chương trình, lùi 1 bước, lùi 4 bước 10 chương trình, tiến 3 bước, tiến 6 bước 10

chương trình

1-7 Đặt các ngày trong tuần. 1 = Chủ nhật, 2 = Thứ Hai, 3 = Thứ Ba, 4 = Thứ Tư, 5 = Thứ Năm, 6 = Thứ Sáu, 7 = Thứ Bảy

0 Trong màn hình chính, xóa tất cả ghi đè thủ công và bộ hẹn giờ Nhập A & Nhập B. Trong các menu khác, các thay đổi

các tùy chọn đã chọn

# Trong màn hình chính, sẽ tắt tất cả ghi đè thủ công, bộ hẹn giờ Nhập A & Nhập B và Đầu ra chương trình, cho đến khi

sự kiện tiếp theo.

* và 1 Khởi động lại bộ hẹn giờ

* và 2 Xóa tất cả các chương trình và tùy chọn, khôi phục cài đặt về mặc định.

* và 3 Đặt bộ hẹn giờ ở chế độ chờ. Để bật lại bộ hẹn giờ, hãy nhấn phím bất kỳ.

Trong khi nhập sai bất kỳ giá trị thời gian nào, đèn nền LCD sẽ nhấp nháy 5 lần để báo lỗi. Đồng thời, còi sẽ phát ra âm thanh. Các lệnh Exit và Next sẽ chỉ hoạt động khi mục nhập hiện tại là chính xác.

LCD đèn nền

Khi khởi động ban đầu, đèn nền LCD sẽ được bật trong 3 phút, trừ khi:

- Có lỗi phần cứng (không tìm thấy EEPROM hoặc RTC)

- Thời gian không được đặt trong RTC

Đèn nền LCD sẽ bật lại trong 3 phút khi người dùng nhập bất kỳ thao tác nào trên bàn phím. Nếu đèn nền LCD tắt, bất kỳ lệnh bàn phím nào trước tiên sẽ bật đèn nền LCD và bỏ qua phím đã được nhấn. Điều này đảm bảo rằng người dùng sẽ có thể đọc màn hình LCD trước khi sử dụng bàn phím. Đèn nền LCD cũng sẽ được bật trong 5 giây nếu Aux Input A hoặc Aux Input B được kích hoạt.

Bước 6: Chụp màn hình menu

Ảnh chụp màn hình menu
Ảnh chụp màn hình menu
Ảnh chụp màn hình menu
Ảnh chụp màn hình menu
Ảnh chụp màn hình menu
Ảnh chụp màn hình menu

Sử dụng bàn phím, mỗi tùy chọn có thể được lập trình dễ dàng. Các hình ảnh cung cấp một số thông tin về chức năng của mỗi màn hình.

Bước 7: Thiết kế hệ thống

Thiết kế hệ thống
Thiết kế hệ thống

Tất cả quá trình phát triển và thử nghiệm đều được thực hiện trên breadboard. Xem xét tất cả các phần của hệ thống, tôi đã chia nhỏ hệ thống thành ba mô-đun. Quyết định này chủ yếu là do giới hạn về kích thước PCB (80 x 100mm) của phiên bản Eagle miễn phí.

Mô-đun 1 - Nguồn điện

Mô-đun 2 - Bo mạch CPU

Mô-đun 3 - Bảng chuyển tiếp

Tôi quyết định rằng tất cả các thành phần phải dễ dàng có được và tôi không muốn sử dụng các thành phần gắn kết bề mặt.

Chúng ta hãy đi qua từng người trong số họ.

Bước 8: Cung cấp điện

Nguồn cấp
Nguồn cấp
Nguồn cấp
Nguồn cấp
Nguồn cấp
Nguồn cấp
Nguồn cấp
Nguồn cấp

Nguồn cung cấp thẳng về phía trước, và cung cấp cho CPU và bảng tiếp điện với 12V và 5V.

Tôi đã gắn bộ điều chỉnh điện áp trên các bộ tản nhiệt tốt, và cũng sử dụng các tụ điện được đánh giá cao cho nguồn cung cấp.

Bước 9: Bo mạch CPU

Ban CPU
Ban CPU
Ban CPU
Ban CPU
Ban CPU
Ban CPU
Ban CPU
Ban CPU

Tất cả các thành phần, ngoại trừ màn hình LCD, bàn phím và rơ le đều được gắn trên bo mạch CPU.

Các khối thiết bị đầu cuối đã được thêm vào để đơn giản hóa các kết nối giữa nguồn cung cấp, hai đầu vào kỹ thuật số và cảm biến ánh sáng.

Chân / ổ cắm đầu cắm tạo điều kiện cho kết nối dễ dàng với màn hình LCD và bàn phím.

Đối với các đầu ra cho rơ le, tôi sử dụng ULN2803. Nó đã chứa tất cả các điện trở dẫn động cần thiết và điốt flyback. Điều này đảm bảo rằng bo mạch CPU vẫn có thể được tạo ra bằng cách sử dụng phiên bản Eagle miễn phí. Các rơle được kết nối với hai ULN2803. ULN2803 dưới cùng được sử dụng cho 8 đầu ra và ULN2803 trên cùng cho hai đầu ra phụ. Mỗi đầu ra phụ có bốn bóng bán dẫn. Kết nối với các rơ le cũng thông qua các chân / ổ cắm tiêu đề.

PIC 18F4520 được trang bị một ổ cắm lập trình để cho phép lập trình dễ dàng thông qua bộ lập trình PicKit 3.

GHI CHÚ:

Bạn sẽ nhận thấy rằng bảng có chứa thêm một IC 8 chân. IC trên cùng là PIC 12F675 và được kết nối với đầu vào kỹ thuật số. Điều này đã được thêm vào trong quá trình thiết kế PCB. Điều này giúp việc xử lý trước đầu vào kỹ thuật số trở nên dễ dàng hơn. Trong ứng dụng của tôi, một trong những đầu vào kỹ thuật số được kết nối với hệ thống báo động của tôi. Nếu âm thanh báo động, một số đèn nhất định được bật trong nhà tôi. Trang bị và tước vũ khí hệ thống báo động của tôi phát ra những tiếng bíp khác nhau trên còi báo động. Bằng cách sử dụng PIC 12F675, giờ đây tôi có thể phân biệt giữa cánh tay / vũ khí và một báo động thực. 12F675 cũng được trang bị một ổ cắm lập trình.

Tôi cũng đã cung cấp cho một cổng I2C thông qua chân cắm / ổ cắm tiêu đề. Điều này sẽ có ích về sau với các bảng chuyển tiếp.

Bo mạch chứa một số jumper, cần được hàn trước khi lắp các ổ cắm IC.

Bước 10: Kết luận về Flowcode

Kết luận về Flowcode
Kết luận về Flowcode
Kết luận về Flowcode
Kết luận về Flowcode
Kết luận về Flowcode
Kết luận về Flowcode

Vì tôi đã quen làm việc ở cấp độ đăng ký trong lắp ráp, nên đôi khi sử dụng macro thành phần rất khó khăn và bực bội. Điều này chủ yếu là do tôi thiếu kiến thức về cấu trúc lập trình của Flowcode. Những nơi duy nhất mà tôi đã sử dụng khối C hoặc ASM, là bật đầu ra bên trong quy trình ngắt và trong quy trình Do_KeyPressed để tắt / bật ngắt bàn phím. PIC cũng được đặt vào SLEEP bằng cách sử dụng khối ASM, khi không tìm thấy EEPROM hoặc RTC.

Tất cả trợ giúp về việc sử dụng các lệnh I²C khác nhau, đều có được từ trong tệp Trợ giúp về Flowcode. Cần phải biết chính xác cách hoạt động của các thiết bị I²C khác nhau trước khi sử dụng thành công các lệnh. Thiết kế một mạch yêu cầu người thiết kế phải có sẵn tất cả các bảng dữ liệu liên quan. Đây không phải là một thiếu sót của Flowcode.

Flowcode thực sự đứng vững trước thử nghiệm và rất được khuyến khích cho những người muốn bắt đầu làm việc với dòng vi xử lý Microchip.

Lập trình và cấu hình mã dòng cho PIC đã được thiết lập theo hình ảnh

Bước 11: Bảng chuyển tiếp I2C tùy chọn

Bảng chuyển tiếp I2C tùy chọn
Bảng chuyển tiếp I2C tùy chọn
Bảng chuyển tiếp I2C tùy chọn
Bảng chuyển tiếp I2C tùy chọn
Bảng chuyển tiếp I2C tùy chọn
Bảng chuyển tiếp I2C tùy chọn

Bo mạch CPU đã có các kết nối tiêu đề cho 16 rơ le. Các đầu ra này là các bóng bán dẫn cực thu mở thông qua hai chip ULN2803, có thể được sử dụng để cấp nguồn trực tiếp cho các rơ le.

Sau những thử nghiệm đầu tiên của hệ thống, tôi không thích tất cả các dây giữa bo mạch CPU và rơ le. Vì tôi đã bao gồm một cổng I2C trên bo mạch CPU, tôi quyết định thiết kế bảng chuyển tiếp để kết nối với cổng I2C. Sử dụng chip MCP23017 I / O Port Expander 16 kênh và mảng bóng bán dẫn ULN2803, tôi đã giảm kết nối giữa CPU và rơ le xuống còn 4 dây.

Vì tôi không thể lắp được 16 rơ le trên PCB 80 x 100mm, tôi quyết định làm hai bảng. Mỗi MCP23017 chỉ sử dụng 8 trong số 16 cổng của nó. Bảng 1 xử lý 8 đầu ra và bảng 2 xử lý hai đầu ra phụ. Sự khác biệt duy nhất trên các bảng là địa chỉ của mỗi bảng. Điều này có thể dễ dàng thiết lập với một chiếc jumper mini. Mỗi bo mạch đều có các đầu nối để cấp nguồn và dữ liệu I2C cho bo mạch kia.

GHI CHÚ:

Nếu được yêu cầu, phần mềm chỉ cung cấp một bo mạch có thể sử dụng tất cả 16 cổng. Tất cả dữ liệu chuyển tiếp đầu ra có sẵn trên bảng đầu tiên.

Vì mạch là tùy chọn và rất đơn giản, tôi đã không tạo một giản đồ. Nếu đủ nhu cầu, tôi có thể bổ sung sau.

Bước 12: Liên kết RF tùy chọn

Liên kết RF tùy chọn
Liên kết RF tùy chọn
Liên kết RF tùy chọn
Liên kết RF tùy chọn
Liên kết RF tùy chọn
Liên kết RF tùy chọn

Sau khi hoàn thành dự án, tôi sớm nhận ra rằng tôi phải kéo rất nhiều dây điện xoay chiều 220V cho bộ đếm thời gian. Tôi đã phát triển một liên kết RF bằng cách sử dụng các mô-đun 315MHz tiêu chuẩn cho phép đặt bộ đếm thời gian bên trong tủ và bảng chuyển tiếp bên trong mái nhà, gần với tất cả hệ thống dây điện 220V.

Liên kết sử dụng AtMega328P chạy ở tần số 16MHz. Phần mềm cho cả máy phát và máy thu đều giống nhau, và chế độ được chọn bởi một jumper nhỏ.

Hệ thống điều khiển

Bộ phát chỉ được cắm vào cổng I2C của CPU. Không cần thiết lập bổ sung vì AtMega328P lắng nghe dữ liệu giống như bảng chuyển tiếp I2C.

Dữ liệu được cập nhật một lần mỗi giây trên cổng I2C và máy phát sẽ gửi thông tin này qua liên kết RF. Nếu bộ phát không nhận được dữ liệu I2C trong khoảng 30 giây, bộ phát sẽ liên tục truyền dữ liệu để tắt tất cả các rơle đến bộ thu.

Nguồn điện cho mô-đun máy phát có thể được chọn trong khoảng từ 12V đến 5V bằng một dây nối mini trên bo mạch PC. Tôi đang cấp nguồn cho máy phát của mình bằng 12V.

Người nhận

Bộ thu lắng nghe dữ liệu được mã hóa từ bộ phát và đặt dữ liệu trên một cổng I2C. Bo mạch chuyển tiếp chỉ cần cắm vào cổng này và hoạt động giống như khi cắm vào bo mạch CPU.

Nếu máy thu không nhận được dữ liệu hợp lệ trong 30 giây, máy thu sẽ liên tục gửi dữ liệu trên cổng I2C để tắt tất cả các rơle trên bảng tiếp điện.

Sơ đồ

Một ngày nào đó, nếu có nhu cầu về nó. Bản phác thảo Arduino chứa tất cả thông tin cần thiết để xây dựng mạch mà không cần sơ đồ mạch.

Phạm vi

Trong cài đặt của tôi, máy phát và máy thu cách nhau khoảng 10 mét. Bộ hẹn giờ nằm trong tủ và bộ phận tiếp điện trên trần nhà.

Bước 13: Sản phẩm cuối cùng

Sản phẩm cuối cùng
Sản phẩm cuối cùng
Sản phẩm cuối cùng
Sản phẩm cuối cùng
Sản phẩm cuối cùng
Sản phẩm cuối cùng

Thiết bị chính được lắp trong một hộp dự án cũ. Nó chứa những thứ sau:

- Biến áp 220V / 12V

- Bảng cung cấp điện

- Ban CPU

- Màn hình LCD

- Bàn phím

- Máy phát liên kết RF

- Bộ thu từ xa tại nhà bổ sung cho phép tôi bật / tắt đèn qua điều khiển từ xa

Bộ phận chuyển tiếp bao gồm những thứ sau:

- Biến áp 220V / 12V

- Bảng cung cấp điện

- Bộ thu liên kết RF

- 2 x Bảng chuyển tiếp I2C

Tất cả các bảng được thiết kế với cùng một kích thước, giúp dễ dàng xếp chồng chúng lên nhau với miếng đệm 3mm.

Đề xuất: