Я уже не раз замечал, что к концу года что-то странное происходит со временем. Оно ускоряется так, что в последние дни перед Новым Годом уже плохо представляешь себе, успеешь ли закончить все начатые или запланированные дела. Мне почему-то всегда кажется, что чего-то не успел, что-то не сделал, не завершил.
В такие моменты начинаешь понимать, что наверное нужно просто остановиться, перевести дух, может быть даже расслабиться и просто готовиться к празднику.
Особая часть подготовки к празднику – новогодние костюмы. Конечно, нужен костюм Деда Мороза. А еще Деду Морозу нужен волшебный посох. Желательно иметь очень волшебный посох – такой, чтобы удивить детей. Вот его изготовлением и займемся.
Нам понадобятся:
1) плата Марсоход
2) синие светодиоды
3) кусок пластиковой водопроводной трубы
4) пластиковый шар от новогодней игрушки
Пластиковая водопроводная труба хороша тем, что она дешевая, легкая, ее легко пилить и сверлить, внутрь можно спрятать какие-то провода.
На плате Марсоход есть шесть «сильных» выходов. Я собираюсь использовать их для управления светодиодами. Именно поэтому я решил, что на посохе будет шесть групп светодиодов.
Вдоль трубы сверлю шесть отверстий на расстоянии 16-17 сантиметров друг от друга. Через эти отверстия внутрь трубы протягиваю шесть пар проводов:
Там, где в трубе просверлены отверстия и из них торчат провода нужно их зачистить, залудить и сделать светодиодные «пояски» - по четыре светодиода минимум, но можно больше. Таких "поясков", как я уже сказал, будет шесть.
В местах пайки канифоль хорошо бы смыть из эстетических соображений. В качестве растворителя используем, например, спирт:
Еще нужна блестящая самоклейка, чтобы обернуть белую пластиковую трубу.
Ближе к верху посоха нужно просверлить отверстие побольше для крепления кнопки. Желательно сделать это сразу, а не так как сделал я – сперва протянул провода, а потом делал дырку для кнопки. Ну ошибся, это бывает.
Кнопка будет включать плату Марсоход, которая и управляет светодиодами.
Аккумулятор питания хорошо вставляется прямо в трубу.
Шар на вершине посоха я сперва хотел сделать из большой елочной игрушки. Правда потом купил желтый шар с конфетами – конфеты съел, а шар удобен тем, что легко разъединяется посередине. Шар прикрепили к трубе маленькими шурупами.
Вот еще фото и хорошо видно все, что внутри шара: аккумулятор, провода, плата:
Посох в сборе:
Да, чуть не забыл... Плату же еще нужно как-то запрограммировать!
Берем на нашем сайте в разделе проекты для платы Марсоход самый простой проект – «почти пустой». Там в том проекте используется встроеный в ПЛИС генератор 5Мгц и счетчики. Все, что нам нужно – это мигать светодиодами в некотором порядке. Тут на что фантазии хватит.
Вот так выглядит топ модуль проекта "Посох" (схема кликабельна - можно увеличить):
Собственно мигающий эффект я написал на языке описания аппаратуры Verilog:
module effect(
input wire clk,
input wire mclk,
output wire [7:0]leds,
output wire f0,
output wire f1,
output wire f2,
output wire f3,
output wire f4,
output wire f5
);
reg [3:0]cnt;
reg [5:0]bits;
initial
begin
bits= 6'h00;
cnt = 4'h0;
end
always @(posedge clk)
if(cnt==11)
cnt<=0;
else
cnt <= cnt + 1'b1;
always @*
begin
case(cnt)
4'h0: bits = 6'b000001;
4'h1: bits = 6'b000011;
4'h2: bits = 6'b000111;
4'h3: bits = 6'b001111;
4'h4: bits = 6'b011111;
4'h5: bits = 6'b111111;
4'h6: bits = 6'b011111;
4'h7: bits = 6'b001111;
4'h8: bits = 6'b000111;
4'h9: bits = 6'b000011;
4'ha: bits = 6'b000001;
default:
bits = 6'b000000;
endcase
end
assign f0 = bits[0] & mclk;
assign f1 = bits[1] & mclk;
assign f2 = bits[2] & mclk;
assign f3 = bits[3] & mclk;
assign f4 = bits[4] & mclk;
assign f5 = bits[5] & mclk;
assign leds = {bits[5],bits[5],bits[4],bits[3],bits[2],bits[1],bits[0],bits[0]};
endmodule
Как видите здесь ничего космического нет.
Светодиоды должны зажигаться снизу вверх, распространяясь волной.
Единственная тонкость - светодиоды у меня подключенны прямо к выходам платы. По идее их нужно было бы подключить через резисторы, чтобы они случайно не сгорели, нужно было бы как-то ограничить ток. Я же сделал проще, модулирую управляющий сигнал частотой mclk вот так: f0 = bits[0] & mclk, чтобы светодиод не постоянно горел, а очень быстро моргал. Это такая своего рода защита.
Весь проект для ПЛИС платы Марсоход в среде Altera Quartus II можно взять вот здесь:
Испытание:
Ну и конечно, новогоднее поздравление:
Подробнее...