Mục lục:
- Bước 1: Vật liệu và kết cấu
- Bước 2: Hàn AVR với đèn LED và loa
- Bước 3: Lập trình Attiny13a
- Bước 4: Tạo Firmware cho Marioman
- Bước 5: Thả lỏng Marioman
Video: Chớp mắt, Hát, Marioman: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:37
Sử dụng một attiny13a, hai đèn LED và một loa thiệp chúc mừng để tạo ra một Marioman nhấp nháy phát bài hát chủ đề của Super Mario Brothers. các nốt của bài hát được tạo ra bởi một sóng vuông phát ra trên một chân duy nhất của vi điều khiển AVR. Các đèn LED xen kẽ trên mỗi nốt nhạc được kết nối với 2 chân của mỗi con chip giống nhau.
Bước 1: Vật liệu và kết cấu
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dChi phí: $ 1,40
- 2 đèn LED - bất kỳ đèn LED nào sẽ làm được
- 1 pin di động đồng xu lithium
www.sparkfun.com/commerce/product_info.php?products_id=338Chi phí: $ 2,00
1 ngăn đựng ô đồng xu
www.sparkfun.com/commerce/product_info.php?products_id=8822Chi phí: $ 1,25
1 loa nhỏ từ thiệp chúc mừng âm nhạc
Tổng chi phí vật liệu ~ $ 5 Hai đèn LED được gắn trực tiếp vào hai chân của mỗi attiny13A. Hai chân được sử dụng cho mỗi đèn LED, chân thứ hai được đặt ở mức thấp để sử dụng như một kết nối đất. Dòng loa được sử dụng là điển hình của một loại được tìm thấy trong thiệp chúc mừng âm nhạc, bất kỳ loa nhỏ nào cũng vậy, với điều kiện là loa này đang phát ra âm sóng vuông, không quá quan trọng phải lo lắng về việc điều khiển loa hay chất lượng âm thanh.
Bước 2: Hàn AVR với đèn LED và loa
Để các đèn LED vươn ra ngoài giống như các cánh tay, một chân được uốn cong trên AVR mỗi bên. Định hướng AVR theo cách này giúp bạn dễ dàng kết nối với loa (hình ảnh thứ hai) vì các kết nối nằm ở hai chân phía dưới. nó được gắn.
Bước 3: Lập trình Attiny13a
Có rất nhiều tùy chọn khác nhau để lập trình AVR. Đối với dự án này, USBtiny đã được sử dụng, có sẵn như một bộ công cụ từ trang web của ladyadahttps://www.ladyada.net/make/usbtinyisp/index.htmlĐể kết nối AVR với lập trình viên, bạn có thể hoặc gắn dây vào ổ cắm cái và cắm chúng vào breadboard hoặc tốt hơn là có được một bộ điều hợp lập trình AVR giá rẻ như thế này..
Bước 4: Tạo Firmware cho Marioman
Attiny13A có 1K flash có thể lập trình và 64byte SRAM. Tệp tar đính kèm có tệp nguồn cũng như phần sụn đã biên dịch để tải xuống. 3 mảng trong mã c được sử dụng để tạo nhạc
- freq - tần số của mỗi nốt nhạc
- length - độ dài của mỗi ghi chú
- delay - tạm dừng giữa mỗi nốt nhạc
Mảng tần số không có tần số thực tế mà là giá trị để đưa vào thanh ghi TTCROB để tạo ra sóng vuông từ chân PB0. Dưới đây là tóm tắt ngắn gọn về các tính toán và cấu hình chân để tạo sóng vuông:
- Attiny13A có bộ dao động bên trong được đặt thành 9,6MHz
- Đồng hồ bên trong cho IO là bộ dao động chia cho 8 hoặc 1,2MHz
- Một bộ đếm thời gian bên trong được thiết lập trong một thanh ghi 8 bit để đếm lên mỗi chu kỳ đồng hồ với tỷ lệ đặt trước là 8.
- Điều này dẫn đến một tích tắc bằng 1 / (1,2MHz / 8) = 0,006667ms
- Attiny13A được cấu hình để so sánh những gì có trong thanh ghi TCCR0B 8bit với bộ đếm thời gian và chuyển đổi một chân khi chúng khớp với nhau.
- Ví dụ, để tạo ra một sóng vuông ở tần số 524Hz (một quãng tám trên giữa C) có chu kỳ là 1,908ms.
1.908ms = 286 tích tắc đồng hồ (1.908 /.0067) Chia 286 cho 2 để chuyển đổi chân ở t / 2 (286/2 = 143) Đặt 143 vào thanh ghi TTCR0B để tạo ghi chú này. Đây là tất cả mã cần thiết để thiết lập bộ đếm thời gian, hãy thực hiện so sánh và xuất ra một làn sóng vuông:
TCCR0A | = (1 << WGM01); // cấu hình bộ định thời 1 cho chế độ CTC TCCR0A | = (1 << COM0A0); // chuyển đổi OC0A khi so sánh đối sánh TCCR0B | = (1 << CS01); // clk / 8 tỷ lệ đặt trước TTCR0B = 143; // tạo ra một sóng vuông ở tần số 524HzĐể trì hoãn các âm báo và thời gian tạm dừng giữa chúng, một chức năng trì hoãn đơn giản đã được sử dụng
void sleep (int ms) {int cnt; for (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Điều này đếm ngược từ 150 trong đó mỗi chu kỳ NOP xấp xỉ 0,006667ms. Điều cuối cùng mã làm là lặp qua các mảng, tạo nhạc và nhấp nháy hai đèn LED. Điều này được thực hiện trong một vòng lặp liên tục với đoạn mã sau
const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); ngủ (pgm_read_byte (& length [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // bộ định thời dừng TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // khởi động bộ định thời TCCR0B | = (1 << CS01); // clk / 8 prescale}}Có 156 phần tử trong mảng tần số / độ dài / độ trễ, vòng lặp này đi qua chúng. Pin PB3 và PB4 đều được bật tắt vì vậy chúng sẽ luân phiên theo từng nốt. Giấc ngủ đầu tiên là độ dài của nốt chúng ta chơi sau khi đặt thanh ghi OCR0A thành giá trị thích hợp. Giấc ngủ thứ hai là khoảng dừng giữa các nốt nhạc mà chúng ta chơi. Trong đoạn mã trên, bạn có thể nhận thấy hai hàm pgm_read_byte () và pgm_read_word () cũng như từ khóa PROGMEM. Với một chip nhúng như attiny, số lượng SRAM rất hạn chế, trong trường hợp này chỉ là 64byte. Các mảng chúng tôi đang sử dụng cho tất cả dữ liệu tần số / độ trễ / độ dài lớn hơn nhiều so với 64byte và do đó không thể tải vào bộ nhớ. Bằng cách sử dụng chỉ thị PROGMEM avr-gcc đặc biệt, các mảng dữ liệu lớn này bị ngăn tải vào bộ nhớ, thay vào đó chúng được đọc từ flash.
Bước 5: Thả lỏng Marioman
Đoạn video trên cho thấy Marioman đang hoạt động. Mức tiêu thụ điện năng trung bình khoảng 25mA nên anh ta có thể nhấp nháy và tạo ra tiếng ồn trong khoảng 10 giờ trước khi tháo pin đồng xu lithium. rất thích hợp cho việc này. Một công tắc có thể được thêm vào nhưng có điều gì đó cần được nói để giữ cho nó đơn giản.
Đề xuất:
Mặt nạ Covid-19 hét vào mặt bạn nếu bạn chạm vào mặt: 4 bước
Mặt nạ Covid-19 hét vào mặt bạn nếu bạn chạm vào mặt: Không thể ngừng chạm vào mặt của bạn? Dán những thiết bị điện tử này vào một chiếc mặt nạ bạn có và bạn sẽ liên tục được nhắc nhở đừng làm điều đó
Hình dạng tòa nhà chớp nhoáng: 5 bước (có hình ảnh)
Hình dạng tòa nhà nhấp nháy: Bạn đã bao giờ muốn đưa đèn nhấp nháy vào đồ án hoặc đồ chơi chưa? Trong dự án này, tôi thêm đèn LED x6 3mm vào các khối xây dựng lồng vào nhau bằng nhựa để kết hợp vui nhộn hơn. Sáng tạo kỹ thuật và học tập STEM. Dưới đây là chi tiết sản phẩm: Tự xây dựng
Johnton-wave - Loa hình chóp cho trần: 4 bước
Johnton-wave - Loa hình chóp cho trần nhà: Trí tưởng tượng là tất cả. Nó là bản xem trước của những điểm hấp dẫn sắp tới của cuộc sống. Như Albert Einstein đã từng nói. Lấy cảm hứng từ anh ấy và lời cầu hôn từ người bạn thân yêu của tôi Kosta; là một nghệ sĩ và nhà sản xuất tuyệt vời, tôi muốn tạo ra một chiếc loa, bằng cách tạo dáng của nó
Chuyển đổi từ pin sang ổ DC, đèn chớp (hoặc hầu như mọi thứ): 5 bước
Chuyển đổi pin sang ổ DC, Đèn chớp (hoặc Hầu như bất kỳ thứ gì): Đây có lẽ là cách đơn giản nhất để chuyển đổi một speedlite từ pin sang ổ cấp nguồn DC. bóng từ đối tượng. Có một lo
Làm một chiếc vòng cổ bằng tia chớp bằng cách sử dụng vật liệu tái chế: 5 bước (có hình ảnh)
Làm một chiếc vòng cổ bằng tia chớp bằng cách sử dụng vật liệu tái chế: Xin chào tất cả, Khoảng một tháng trước, tôi đã mua một số đèn LED dải giá cả phải chăng từ Bangood.com. Bạn có thể thấy rằng dải đèn LED được sử dụng trong các thiết kế nội thất / ngoại thất của ngôi nhà / sân vườn, v.v. Tôi đã quyết định làm một chiếc vòng cổ để phát sáng khi