Mục lục:

Minidot 2 - Holoclock: 6 bước
Minidot 2 - Holoclock: 6 bước

Video: Minidot 2 - Holoclock: 6 bước

Video: Minidot 2 - Holoclock: 6 bước
Video: Видео-обзор коллиматорных прицелов Delta Optical MiniDot HD 24 и HD 26 2024, Tháng bảy
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Có lẽ holoclock hơi không chính xác một chút…. Nó sử dụng phim phân tán ảnh ba chiều ở mặt trước để tạo ra một chút chiều sâu. / EEGLXQCSKIEP2876EE / và sử dụng lại rất nhiều mã và mạch từ Microdot của tôi có tại đây: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/ Các tệpEagleCAD và mã Sourceboost được bao gồm trong các tệp zip đính kèm. Minidot trước đây quá phức tạp, từ Microdot, tôi đã học cách thực hiện RTC trên PIC chỉ sử dụng một tinh thể 32.768 và không cần sử dụng chip RTC đặc biệt. Ngoài ra, tôi muốn loại bỏ các chip hiển thị từ Minidot trước đó. Vì vậy, bây giờ chỉ có một chip điều chỉnh năng lượng và một PIC16F88….chỉ hai chip. Các lý do khác cho bản cập nhật là Minidot của tôi đã trở nên không đáng tin cậy vì bảng chuyển đổi riêng biệt và tôi muốn có sự mờ dần giữa các mẫu chấm như cũng như một số loại cảm biến ánh sáng xung quanh để làm mờ màn hình vào ban đêm. Minidot khác có độ sáng cố định và chiếu sáng một căn phòng vào ban đêm. Thiết bị này được chế tạo với sự hỗ trợ của gói phần mềm EagleCad và trình biên dịch Sourceboost. Bạn sẽ cần phải có một số kinh nghiệm về điện tử và lập trình bộ điều khiển PIC để bắt đầu dự án này. Xin lưu ý rằng đây không phải là hướng dẫn về điện tử hoặc lập trình PIC, vì vậy hãy giữ các câu hỏi liên quan đến thiết kế Miniclock. Tham khảo các tài liệu hướng dẫn ở trên hoặc nhiều tài liệu hướng dẫn khác trên trang web này để được tư vấn về cách sử dụng EagleCad hoặc lập trình PIC. Vậy đây là….. Minidot 2, The Holoclock …… hoặc Minidot The Next Generation ………….

Bước 1: Mạch

Mạch
Mạch
Mạch
Mạch
Mạch
Mạch

Mạch này rất giống với Microdot. Lưu ý rằng mảng charlieplex hầu như giống hệt nhau… chỉ có một vài chân đã được di chuyển.

Một tinh thể 20Mhz đã được thêm vào mạch Microdot để tạo xung nhịp cho PIC nhanh hơn nhiều, điều này cho phép quét mảng nhanh hơn và cho phép thực hiện thuật toán làm mờ. Thuật toán làm mờ rất quan trọng để làm mờ mẫu chữ thập và chức năng ánh sáng xung quanh hoạt động. Điều này sẽ không thể xảy ra với Microdot, vì tốc độ đồng hồ chậm hơn do một số chu kỳ quét cần được sử dụng để làm mờ. Xem phần tiếp theo để biết mô tả về chức năng Làm mờ. Những điều cần lưu ý khác là sử dụng bộ điều chỉnh bơm sạc MCP1252 để cấp nguồn 5V, con chip yêu thích của tôi lúc này. Nếu bạn sửa đổi mạch, bạn có thể sử dụng một chiếc 7805 cũ đơn giản …… Tôi chỉ có một số chip tiện dụng này đang treo xung quanh. Bây giờ tôi đã di chuyển các công tắc ra phía trước, tiết kiệm các công tắc xung quanh mặt sau của đồng hồ sau khi ngừng nguồn để thiết lập lại thời gian và bây giờ mọi thứ chỉ là một PCB….không có vấn đề về cáp. Cũng cần lưu ý là bao gồm một LDR. Điều này được sử dụng trong một bộ chia điện áp được cảm nhận bởi chân A / D trên PIC. Khi PIC cảm nhận được mức ánh sáng xung quanh thấp (tức là ban đêm), thuật toán làm mờ giữ cho mảng charlieplex tối trong nhiều chu kỳ hơn so với khi mức ánh sáng cao. Tôi không thể tìm thấy một biểu tượng LDR trong thư viện Eaglecad, vì vậy tôi chỉ sử dụng một biểu tượng LED…..đừng bị lừa đó là một LDR. Xem hình ảnh thực tế của PCB bên dưới. Một điều cần lưu ý khi sử dụng đèn LED nhiều màu trong mảng ghép hình. Bạn cần đảm bảo điện áp chuyển tiếp của các đèn LED ít nhiều giống nhau. Nếu không, thì các đường dẫn dòng điện đi lạc có thể xảy ra và nhiều đèn LED sẽ sáng. Do đó, sử dụng đèn LED công suất 5mm trở lên cho cấu hình này sẽ không hoạt động vì thường có sự khác biệt khá lớn giữa đèn LED xanh lá cây / xanh lam và đèn LED đỏ / vàng. Trong trường hợp này, tôi đã sử dụng đèn LED 1206 SMD và đặc biệt là đèn LED xanh lục / xanh lam hiệu quả cao. Mặc dù vậy, điện áp chuyển tiếp không phải là một vấn đề ở đây. Nếu bạn muốn sử dụng kết hợp các đèn LED công suất cao hơn màu xanh lá cây / xanh lam và đỏ / vàng trong một mảng charlieplex, bạn cần phải tách các màu khác nhau thành hai mảng ghép nối. Có rất nhiều lời giải thích về charlieplexing có thể được đưa lên Google …… Tôi sẽ không đi vào chi tiết ở đây. Tôi sẽ để nó cho bạn thực hiện một số nghiên cứu. (Nhấn vào biểu tượng chữ 'i' nhỏ ở góc của hình bên dưới để xem phiên bản lớn hơn)

Bước 2: Thuật toán làm mờ - Điều chế độ rộng xung được ghép nối

Thuật toán làm mờ - Điều chế độ rộng xung được phân công
Thuật toán làm mờ - Điều chế độ rộng xung được phân công

Như đã đề cập trước đó, tôi muốn có các mẫu dấu chấm khác nhau để thời gian mờ đi một cách mượt mà hơn là giật từ mẫu này sang mẫu khác. Hãy xem video để minh họa. Ở giữa là đồng hồ Minidot mới, bên phải là đồng hồ Minidot cũ hơn. Để ý xem cái mới đẹp hơn bao nhiêu. (FYI các màn hình khác trong nền là màn hình hiển thị trạng thái siêu máy tính Minicray của tôi và hạt Nebulon đã chụp được của tôi, cung cấp năng lượng cho Minicray trong trường giới hạn từ phản vật chất. Xem tại đây: https://www.youtube.com/embed/bRupDulR4ME để trình diễn của buồng giam giữ nebulon) Nếu bạn xem mã, hãy mở tệp display.c. Lưu ý rằng có bốn mảng để ánh xạ các giá trị tris / cổng để chiếu sáng bất kỳ mảng cụ thể nào và hai mảng (nhiều hơn một mã Microdot) để xác định đèn LED nào sẽ được chiếu sáng cho bất kỳ mẫu đèn LED cụ thể nào. Ví dụ:

// LED1 LED2 LED3… unsigned char LEDS_PORTA [31] = {0x10, 0x00, 0x00,… unsigned char LEDS_TRISA [31] = {0xef, 0xff, 0xff,… unsigned char LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Unsigned char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; unsigned char nLedsB [30];Để làm sáng LED1, bạn cần đặt thanh ghi TRIS: TRISA: B = 0xef: 0xfd và thanh ghi PORT PORTA: B = 0x10: 0x00, v.v. Nếu bạn viết ra các giá trị tris trong hệ nhị phân, bạn sẽ lưu ý rằng tại bất kỳ thời điểm nào, chỉ có hai đầu ra được kích hoạt. Những cái khác đều được đặt thành Tri-state (do đó thanh ghi TRIS). Đây là trọng tâm của charlieplexing. Bạn cũng sẽ lưu ý rằng một đầu ra luôn là logic '1' và đầu ra còn lại luôn là logic '0'…. Hướng bật sáng bất kỳ đèn LED nào nằm giữa hai dòng đầu ra này. Giá trị cuối cùng trong cổng / tris mảng là giá trị null để bật không có đèn LED nào. Trong Microdot, hàm update_display chuyển động liên tục qua một mảng khác (nLeds ) để xem liệu đèn LED cụ thể đó có được chiếu sáng hay không. Nếu đúng như vậy, thì giá trị tris / cổng tương ứng đã được đặt và đèn LED sáng trong một khoảng thời gian. Nếu không, giá trị null được gửi đến thanh ghi TRIS / PORT của PIC và không có đèn LED nào được chiếu sáng trong một khoảng thời gian. Khi thực hiện đủ nhanh, điều này đã tạo ra một mẫu. Phần còn lại của chương trình sẽ đọc định kỳ các giá trị RTC và tạo ra một mẫu ngẫu nhiên đẹp trong mảng đó….và do đó, màn hình đã thay đổi. không) thì các khoảng thời gian bổ sung sẽ được sử dụng để gửi các giá trị rỗng nếu màn hình được làm mờ đi….. đối với độ sáng đầy đủ thì sẽ không có khoảng thời gian bổ sung nào được sử dụng. Khi được lặp lại nếu có nhiều khoảng thời gian trống đối với các đèn LED được chiếu sáng, màn hình sẽ bị mờ. Trên thực tế, đây là điều chế độ rộng xung ghép kênh…..hoặc vì phần cứng được định cấu hình theo phương pháp sắp xếp phức tạp, sau đó điều chế độ rộng xung phức tạp. Sơ đồ thứ hai dưới đây cho thấy thiết lập cơ bản cho việc này. Tôi gọi đây là khung quét. 30 khoảng thời gian đầu tiên của khung hình được sử dụng để đi qua các đèn LED….. và một số khoảng thời gian bổ sung thay đổi xác định mức độ mờ của màn hình. Chu kỳ này lặp lại. Nhiều khoảng thời gian trống hơn có nghĩa là ít thời gian hơn để đèn LED bật trên mỗi khung hình (vì số khoảng thời gian tăng lên). Lưu ý trục tung không có nghĩa là mức điện áp. Trạng thái thực tế của các chân đi đến đèn LED khác nhau tùy thuộc vào vị trí của nó trong mảng charlieplex…..trong sơ đồ, nó chỉ có nghĩa là bật hoặc tắt. Điều này cũng có nghĩa là tổng chiều dài của khung hình theo thời gian cũng tăng lên, do đó giảm độ tươi tỷ lệ. Khi đèn LED mờ đi, nói cách khác, chúng sẽ bắt đầu nhấp nháy. Vì vậy, phương pháp này chỉ hữu ích ở một mức độ nào đó. Đối với đồng hồ, không sao cả. Một hàm được gọi không liên tục đọc bộ chuyển đổi A / D trên PIC và đặt mức độ sáng này. Nếu bạn đọc mã, nó cũng sẽ kiểm tra xem đèn LED gần LDR có bật hay không và không thực hiện bất kỳ cài đặt mức nào nếu có, điều này sẽ dừng màn hình sáng bất ngờ khi mẫu thay đổi.

Bước 3: Thuật toán làm mờ - Hiệu ứng làm mờ chéo và đệm kép

Thuật toán làm mờ - Hiệu ứng làm mờ chéo và đệm kép
Thuật toán làm mờ - Hiệu ứng làm mờ chéo và đệm kép

Sự chuyển đổi giữa một mẫu và mẫu tiếp theo trước đây là ngay lập tức. Đối với đồng hồ này, tôi muốn hiển thị một mô hình giảm dần độ sáng và mô hình tiếp theo tăng dần… tức là mờ dần.

Tôi không cần phải điều khiển các đèn LED riêng lẻ ở các mức độ sáng riêng biệt để làm mờ dần. Chỉ cần mẫu đầu tiên ở một độ sáng và mẫu thứ hai ở độ sáng thấp. Sau đó, trong một khoảng thời gian ngắn, tôi sẽ giảm độ sáng của hình đầu tiên một chút, và tăng độ sáng thứ hai….. điều này sẽ tiếp tục cho đến khi hết kiểu thứ hai. Sau đó, đồng hồ sẽ đợi cho đến khi mẫu tiếp theo được hiển thị và sẽ có một quá trình chuyển đổi khác. Vì vậy, tôi cần phải lưu trữ hai mẫu. Mẫu hiện đang được hiển thị và mẫu thứ hai sắp được hiển thị. Chúng nằm trong mảng nLedsA và nLedsB. (lưu ý không liên quan gì đến các cổng trong trường hợp này). Đây là bộ đệm kép. Hàm update_display () đã được sửa đổi để xoay vòng qua tám khung và hiển thị một số khung từ mảng đầu tiên, sau đó đến mảng khác. Việc thay đổi số lượng khung hình được phân bổ cho mỗi bộ đệm trong suốt tám chu kỳ đã xác định mức độ sáng của mỗi mẫu. Khi chúng tôi hoàn thành việc xoay vòng giữa các bộ đệm, chúng tôi chuyển đổi xung quanh bộ đệm 'hiển thị' và 'hiển thị tiếp theo', do đó, chức năng tạo mẫu sau đó sẽ chỉ ghi vào bộ đệm 'hiển thị tiếp theo'. Sơ đồ dưới đây cho thấy điều này một cách hy vọng. Bạn sẽ có thể thấy rằng quá trình chuyển đổi sẽ thực hiện 64 khung hình quét. Trong hình, phần chèn nhỏ cho thấy sơ đồ khung quét từ trang trước được thu nhỏ một cách nghệ thuật. Một từ về tỷ lệ làm mới. Tất cả điều này cần phải được thực hiện rất nhanh chóng. Bây giờ chúng tôi có hai mức tính toán bổ sung, một cho độ mờ màn hình xung quanh và một cho tám chu kỳ khung hình dành để thực hiện chuyển đổi giữa hai bộ đệm. Vì vậy, mã này nên được viết trong assembly, nhưng đủ tốt trong 'C'.

Bước 4: Xây dựng - PCB

Xây dựng - PCB
Xây dựng - PCB
Xây dựng - PCB
Xây dựng - PCB

Việc này thật thẳng thắn. Chỉ là một PCB hai mặt với một số thành phần SMD ở trên cùng. Xin lỗi nếu bạn là một người xuyên lỗ, nhưng thực hiện các dự án SMD dễ dàng hơn rất nhiều….không cần khoan lỗ. Bạn nên có một bàn tay ổn định, một trạm hàn được kiểm soát nhiệt độ và nhiều ánh sáng và độ phóng đại để làm cho mọi thứ dễ dàng hơn.

Điều lưu ý duy nhất trong cấu tạo của PCB là bao gồm một đầu nối để lập trình PIC. Điều này kết nối với các chân ICSP trên PIC và bạn sẽ cần một lập trình viên ICSP. Một lần nữa, tôi đã sử dụng một tiện ích cho trình kết nối hộp thư rác của mình. Bạn có thể bỏ qua điều này và chỉ hàn dây vào miếng đệm nếu bạn muốn. Ngoài ra, nếu bạn chỉ có một lập trình viên có ổ cắm, bạn có thể tạo một tiêu đề cắm vào ổ cắm của bạn và sau đó hàn tiêu đề đó vào các miếng đệm ICSP. Nếu bạn làm điều này, sau đó ngắt kết nối Rx và kết nối Ry chỉ là các liên kết không ohm (tôi chỉ sử dụng một blob hàn). Thao tác này sẽ ngắt phần còn lại của nguồn mạch khỏi PIC để nó không ảnh hưởng đến việc lập trình. Một lập trình viên socketed chỉ sử dụng các chân ICSP giống như một lập trình viên ICSP, thực sự không có phép thuật nào liên quan. Bạn cũng cần phải làm điều này nếu do nhầm lẫn bạn đã quên đặt độ trễ trong mã trước khi RTC khởi động. Đối với 16F88, các chân lập trình ICSP giống như các chân cần thiết cho tinh thể 32,768kHz được sử dụng cho RTC …… nếu bộ dao động bên ngoài T1 (tức là RTC) đang chạy trước khi ICSP có thể bắt đầu hoạt động, thì lập trình sẽ thất bại. Thông thường, nếu có thiết lập lại trên chân MCLR và có độ trễ, thì dữ liệu ICSP có thể được gửi đến các chân này và lập trình có thể bắt đầu đúng cách. Tuy nhiên, bằng cách cách ly nguồn điện với PIC, lập trình viên ICSP (hoặc lập trình viên có ổ cắm có tiêu đề) có thể điều khiển nguồn điện cho thiết bị và buộc một chương trình. Những điều khác cần lưu ý là các tấm đệm pha lê trên PCB ban đầu được thiết kế cho các tinh thể SMD. Tôi không thể đợi một số được giao vì vậy tinh thể đồng hồ 32,768kHz đã được hàn vào trên cùng như hình minh họa và tinh thể 20MHz được gắn bằng cách khoan một vài lỗ trên miếng đệm, chọc tinh thể vào qua đáy và hàn vào đứng đầu. Bạn có thể thấy các chân ở bên phải của PIC16F88.

Bước 5: Phim Holographic và Nhà ở

Phim Holographic và Nhà ở
Phim Holographic và Nhà ở
Phim Holographic và Nhà ở
Phim Holographic và Nhà ở
Phim Holographic và Nhà ở
Phim Holographic và Nhà ở

Việc xây dựng cuối cùng chỉ đơn giản là đặt PCB vào vỏ máy và sau khi lập trình, dán nó bằng một lớp keo nóng. Ba lỗ cho phép truy cập vào các công tắc siêu nhỏ từ phía trước.

Phần đáng chú ý của chiếc đồng hồ này là sử dụng màng khuếch tán ảnh ba chiều. Đây là tấm phim đặc biệt mà tôi đã nằm xung quanh, nó cung cấp độ sâu đẹp cho thiết bị. Bạn có thể sử dụng giấy truy tìm đơn giản (trong đó tôi sẽ di chuyển PCB gần mặt trước hơn), hoặc bất kỳ bộ khuếch tán nào khác giống như những loại được sử dụng trong đèn chiếu sáng huỳnh quang. Điều duy nhất nó cần làm là cho phép bạn phân biệt giữa số lượng đèn LED được chiếu sáng, nếu không, việc đếm số chấm để biết thời gian sẽ rất khó khăn. Tôi đã sử dụng vật liệu phân tán ba chiều từ Công ty TNHH Quang học Vật lý (www.poc.com) với độ phân tán tròn 30 độ, màn hình trạng thái siêu máy tính được hiển thị ở nơi khác trong tài liệu hướng dẫn đã sử dụng phim có tán sắc hình elip 15x60 độ. Bạn có thể sử dụng một số băng dính để che đi phần bên trong sáng bóng vào ban ngày để có được vẻ ngoài bí ẩn hơn. Bạn thậm chí có thể để màn hình hiển thị rõ ràng và cho phép mọi người nhìn thấy các phần bên trong như tôi đã làm. Chân đế là hai thanh nhôm chữ 'L' với một chút được cắt nhỏ ở phía dưới để cho phép uốn cong. Lưu ý rằng trong những hình ảnh này, ánh sáng bổ sung đã được thêm vào để bạn có thể nhìn thấy các nắp màn hình, v.v. Trong ánh sáng phòng khách bình thường, đèn LED có nhiều ưu điểm hơn, ngay cả trong ánh sáng ban ngày.

Bước 6: Phần mềm và giao diện người dùng

Hoạt động của thiết bị rất đơn giản, không có chế độ hoa văn đặc biệt hay những thứ hào nhoáng. Điều duy nhất nó làm là hiển thị thời gian.

Để đặt thời gian đầu tiên, hãy nhấn SW1. Thiết bị sẽ nhấp nháy tất cả các đèn LED một vài lần và sau đó nhóm đèn LED SW3 trong 10 giờ sẽ tăng lên. Nhóm đã chọn SW2 sẽ chuyển sang nhóm đèn LED tiếp theo, mỗi lần nhấp nháy tất cả các đèn LED trong nhóm trong thời gian ngắn. Mã được viết cho trình biên dịch Sourceboost 'C' phiên bản 6.70. Mã RTC nằm trong tệp t1rtc.c / h và có chức năng ngắt trên bộ định thời T1 của PIC. Bộ hẹn giờ T1 được thiết lập để ngắt sau mỗi 1 giây. Trên mỗi giây, biến cho thời gian được tăng lên. Ngoài ra, một bộ đếm thời gian đánh dấu được đếm ngược mỗi giây cùng với thời gian. Điều này được sử dụng để xác định thời điểm chuyển đổi màn hình. Chức năng ngắt cũng sử dụng ngắt bộ định thời T0 để làm mới màn hình, gọi một hàm trong display.c Các tệp display.h / display.c chứa các chức năng để cập nhật màn hình và hiển thị thời gian. Các tệp control.c / h chứa các chức năng để đặt thời gian và đọc các công tắc Các tệp holoclock.c / h là các vòng lặp và khởi tạo chính.

Đề xuất: