Mục lục:
Video: Một đèn LED tâm trạng $ 1 với ATtiny13 và WS2812: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:30
Bởi arduinocelentano
Đây là loại đèn tâm trạng giá rẻ với bốn chế độ.
1. Tia lửa cầu vồng. Một tia sáng chuyển động lên trên hết lần này đến lần khác và đổi màu dần dần.
2. Cầu vồng phát sáng. Ánh sáng ổn định thay đổi dần màu sắc.
3. Mô phỏng ngọn lửa nến.
4. Tắt.
Bạn có thể chuyển đổi các chế độ bằng cách nhấn vào một nút cảm ứng ở trên cùng. Chế độ hiện tại được lưu trong bộ nhớ EEPROM sau khi tắt nguồn.
ATtiny13 nhỏ như thế nào?
Ý tưởng là để có được các tính năng tối đa từ phần cứng tối thiểu, một thứ phức tạp hơn công tắc hoặc nhiệt kế tự động, một dự án gần với bộ vi điều khiển nhỏ bé này. Rốt cuộc, những hạn chế khiến bạn suy nghĩ sáng tạo, phải không? Chà, nó giống như lúc ban đầu.
Thử thách nhất trong dự án này là nhập tất cả mã vào ATtiny13. Bộ vi điều khiển có flash 1K byte và RAM chỉ 64 byte. Có, khi tôi nói "byte", tôi muốn nói đến những thứ bao gồm tám bit. 64 byte cho tất cả các biến cục bộ của bạn và ngăn xếp cuộc gọi. Để làm rõ hơn, hãy xem xét chúng ta phải điều khiển 8 đèn LED RGB. Mỗi người trong số họ được xác định bởi 3 byte (một cho kênh đỏ, xanh lá cây và xanh lam tương ứng). Vì vậy, chỉ để lưu trữ trạng thái của 8 đèn LED, chúng ta sẽ cần triển khai một mảng 8 cấu trúc, mỗi cấu trúc 3 byte và một con trỏ đến đầu mảng này sẽ mất thêm một byte. Như vậy, 25 trong số 64 byte đã hết. Chúng tôi mới chỉ sử dụng 39% RAM và vẫn chưa thực sự bắt đầu. Ngoài ra, để lưu trữ bảy màu cầu vồng cơ bản, bạn sẽ cần 7 × 3 = 21 byte, do đó, 72% RAM đã hết. Đối với các màu cơ bản, tôi cường điệu: chúng ta không cần tất cả chúng cùng một lúc trong RAM và chúng không bao giờ thay đổi, vì vậy chúng có thể được triển khai dưới dạng một mảng không đổi được lưu trữ trong flash thay vì RAM. Dù sao, nó mang lại một ấn tượng tổng thể về phần cứng đã qua sử dụng.
Nhớ lại tuyên bố của Knuth về tối ưu hóa sớm, tôi bắt đầu từ việc tạo mẫu riêng biệt ba chế độ đèn để xem điều gì sẽ xảy ra. Tôi đã kiểm tra chúng riêng biệt để đảm bảo chúng hoạt động bình thường và mỗi cái phù hợp với bộ vi điều khiển của tôi. Phải mất một vài buổi tối để hoàn thành nó và mọi thứ diễn ra tốt đẹp… cho đến khi tôi cố gắng kết hợp chúng lại với nhau bên trong câu lệnh switch. tiện ích avr-size đã báo cáo kích thước phần văn bản 1,5 Kb (với cờ -s của avr-gcc). Tại thời điểm đó, ý định ban đầu của tôi là lấy một số ATtiny25 với flash 2Kb và đó có thể là kết thúc có hậu của câu chuyện này.
Nhưng bằng cách nào đó, tôi cảm thấy rằng sau khi tối ưu hóa đáng kể, tôi có thể xoay sở để thu nhỏ đoạn mã tồi tệ đó thành 1Kb. Tuy nhiên, phải mất thêm một tuần để nhận ra rằng điều đó là không thể và dù sao cũng phải mất thêm một tuần nữa để hoàn thành. Tôi đã phải cắt cầu vồng thành năm màu cơ bản (không có sự khác biệt đáng kể về mặt hình ảnh). Tôi đã loại bỏ các câu lệnh trường hợp và sử dụng một chuỗi if-then-if để giảm kích thước mã nhị phân. Hoạt ảnh lửa cần một trình tạo số giả ngẫu nhiên khá cồng kềnh, vì vậy tôi đã triển khai phiên bản đơn giản hóa của LFSR với giá trị ban đầu không đổi. Tôi không quan tâm đến độ dài chu kỳ đầy đủ của PRNG và chỉ tìm kiếm sự cân bằng giữa kích thước mã và “hoạt ảnh cháy thực tế”. Tôi cũng đã triển khai rất nhiều tối ưu hóa nhỏ mà tôi không thể nhớ ngay bây giờ và thậm chí đã quản lý để cài đặt tất cả các chế độ ngoại trừ lửa vào chip. Khi tôi hết ý tưởng, tổng số mã của tôi là khoảng 1200 byte.
Tôi đã mất thời gian chờ và đã đọc rất nhiều về cách tối ưu hóa mã AVR. Tôi đã gần từ bỏ và viết lại mọi thứ bằng hợp ngữ nhưng đã cho nó cơ hội cuối cùng. Trong thời gian gấp rút tối ưu hóa cuối cùng, tôi đã cắt cầu vồng thành ba màu cơ bản và làm cho những màu khác được tính toán nhanh chóng, tôi kiểm tra mọi thứ và làm theo các đề xuất tối ưu hóa AVR và cuối cùng…
avrdude: ghi flash (1004 byte):
Viết lách | ##################################################### | 100% 0,90 giây
Không cần phải nói rằng tôi đã sử dụng gần như tất cả RAM và chỉ một byte EEPROM để lưu trữ chế độ hiện tại. Tôi không ngụ ý rằng đây là một cách thực hiện lý tưởng và cuối cùng. Nó chỉ hoạt động và phù hợp với vi điều khiển. Tôi chắc chắn, bạn có thể làm điều đó tốt hơn. Tôi thực sự là như vậy. Tôi chỉ muốn chia sẻ niềm vui khi giải quyết một vấn đề dường như không thực tế mà bạn cho là gần như không thể ngay từ đầu. “Vì vậy, hack có nghĩa là khám phá giới hạn của những gì có thể…” --Richard Stallman.
Quân nhu:
1x ATtiny13 MCU ($ 0,28 = $ 0,24 cho MCU trong gói SOP-8 và $ 0,04 cho Bộ điều hợp DIP8)
8x WS2812 đèn LED RGB (Tôi khuyên bạn nên dùng bảng hoặc một miếng LED sọc) ($ 0,42)
1x nút cảm ứng TTP223 ($ 0,10)
1x Bộ chuyển đổi Micro USB sang DIP ($ 0,14)
1x điện trở 10kΩ (<0,01 đô la)
Tụ gốm 1x 100nF (<0,01 đô la)
Tụ điện 1x 10–47µF (<0,01 đô la)
Tổng <$ 0,97
Bước 1: Thiết lập phần mềm
Bạn sẽ cần chuỗi công cụ avr-gcc để biên dịch mã nguồn và tiện ích avrdude để tải lên ROM của vi điều khiển. Quá trình cài đặt khá đơn giản và dễ hiểu, nhưng nó phụ thuộc vào hệ điều hành của bạn. Nếu bạn sử dụng một số loại GNU / Linux, có thể bạn đã có các gói thích hợp trong cây kho lưu trữ của mình. Mã nguồn của dự án này có thể được tải xuống tại đây:
github.com/arduinocelentano/t13_ws2812_lamp
Bạn cũng sẽ cần một thư viện light_ws2812:
github.com/cpldcpu/light_ws2812
Khi bạn đã có chuỗi công cụ avr-gcc và các nguồn dự án, hãy chạy thiết bị đầu cuối của bạn và nhập mã sau:
đường dẫn cd / đến / dự án
chế tạo
Bước 2: Lập trình vi điều khiển
Nếu bạn có một số loại lập trình USBASP, chỉ cần kết nối nó với Attiny theo sơ đồ chân của nó. Thông thường nó sẽ trông như thế này nhưng tôi thực sự khuyên bạn nên kiểm tra sơ đồ chân thực của mình!
Ngoài ra, bạn có thể sử dụng bảng Arduino làm lập trình viên. Mở Arduino IDE và tìm ví dụ về Arduino ISP trong menu “Tệp → Ví dụ”. Sau khi tải lên bản phác thảo, bảng Arduino của bạn hoạt động như một lập trình viên. Các nhận xét trong mã phác thảo sẽ cung cấp cho bạn manh mối về sơ đồ chân.
Bây giờ chạy
làm đèn flash
để flash MCU và
làm cầu chì
để thiết lập các bit cầu chì.
Bước 3: Sơ đồ
Đề xuất:
Đèn tâm trạng với đèn LED RGB: 4 bước
Đèn tâm trạng với đèn LED RGB: Este proyecto se trató de hacer una lampara de * sentimientos * useizando un Arduino Uno. Primero se necesitan varios materiales como jumper, led RGB o Neopixel, dependiendo de cómo se desee hacer. En este caso useizaremos led RGB con ánodo común.
Nike LED Swoosh! Đây là một trang trí tuyệt vời cho một căn phòng. Đây là một dự án mà mọi người có thể lặp lại.: 5 bước
Nike LED Swoosh! Đây là một trang trí tuyệt vời cho một căn phòng. Đây là một dự án mà mọi người có thể lặp lại. 2x-gỗ 20-20-3000 2x-ván ép 500-1000mm-vít (45mm) 150x-vít (35mm) 30x-scr
Đèn LED tự làm - Đèn tâm trạng để bàn hiện đại có điều khiển từ xa: 8 bước (có hình ảnh)
Tự làm đèn LED - Đèn tâm trạng trên máy tính để bàn hiện đại có điều khiển từ xa: Trong bài viết này, tôi sẽ giới thiệu cho các bạn quá trình tôi đã sử dụng để chế tạo Đèn LED tâm trạng hình kim tự tháp tuyệt vời này. Tôi đã sử dụng gỗ thích cho cấu trúc chính và một số gai bằng gỗ gụ để tăng thêm sức mạnh. Đối với đèn, tôi đã sử dụng đèn LED RGB có dải 16 foot t
Thêm một trang web Drupal ảo vào một trang trại Drupal được tách biệt hoàn toàn: 3 bước
Thêm Trang web Drupal Ảo vào Trang trại Drupal được Tách biệt Hoàn toàn: Drupal là Hệ thống Quản lý Nội dung (CMS). Một trong những tính năng nổi bật của nó là dễ dàng quản lý một số trang web từ một cơ sở mã - Trang trại Drupal được ca ngợi rất nhiều
Từ một ảnh chụp nhanh đến một bức ảnh tuyệt vời: Giai đoạn một: 17 bước
Từ Ảnh chụp nhanh đến Ảnh tuyệt vời: Giai đoạn một: Chụp ảnh con người và địa điểm trong lễ hội khiêu vũ đường phố có thể rất nhiều màu sắc và thú vị. chúng ta sẽ tự hào biết bao về hoàng tử của chúng ta