Pull to refresh
42
29.1
Сергей Новиков @Pisikak

Embedded-разработчик

Send message

Это очень интересный опыт, я бы почитал про это)
Для Walkie Talkie присмотритесь вот к этим модулям. Это не LoRa, но из этого открытого проекта можно перенять понравившиеся решения.

Пожалуйста) Буду рад, если это пригодится!

Приёмопередатчик находился на борту легкомоторного самолёта с антенной под крылом. Пилот сообщал диспетчеру о своём местоположении

Вторая антенна была на легкомоторном самолёте:) Связь была LoRa через модули Ebyte E22-400T30D (те же самые из статьи только мощностью 1 Вт)

У меня такого не оказалось под рукой, но я могу купить его и попробовать реализовать всё на нём.

Arduino UNO (или любая другая) предназначается для конфигурации Ebyte E22 и для буферизации данных из последовательного порта.

Безусловно, можно соединить ноутбуки просто с помощью usb-to-com, а потом поставить в разрыв радиомодули. Перед этим необходимо будет настроить радиомодули на работу в режиме "всё что пришло по UART - передай по радиоканалу" и сохранить настройки в их собственную EEPROM (иначе сконфигурировать без микроконтроллера их не получится. Ну и не у всех радиомодулей есть возможность сохранить конфигурацию в EEPROM).

Может быть связь между компьютерами будет. Я говорю "может быть", потому что как-то пробрасывал через Ebyte E22 протокол MAVLINK. Так вот при таком подходе там каждый байт отправлялся в радиоканал отдельно. Радиоканал забивался и ничего не работало. Пока я не стал собирать отдельные байты в строки и уже эти строки передавать в радиоканал. Тогда худо-бедно всё заработало.

Надо пробовать.

Здравствуйте.

У меня получилось перенести этот дизайн в VIVADO под Kintex XC7K325T.

Я решил это сделать в графическом виде.

Общий вид
Общий вид
Конечный автомат и i2c контроллер
Конечный автомат и i2c контроллер

В процессе возникли сложности с синтезом. Никак не хотели синтезироваться конструкции с тремя состояниями из прошлой статьи.

assign scl_io = (scl_r) ? 1'bz : 1'b0;

У меня от такой записи синтезировались просто OBUF ну и конечно же обе линии (SCL, SDA) "лежали за "земле". Кстати если заменить "z" значение в этом мультиплексоре на "1", то осциллограмма получалась верная, но OBUF не работают на вход.

Мной были использованы OBUFT (https://docs.amd.com/r/en-US/ug953-vivado-7series-libraries/OBUFT) для SCL и IOBUF (https://docs.amd.com/r/en-US/ug953-vivado-7series-libraries/IOBUF) для SDA.

В коде это выглядит вот так:

// assign scl_io = (~scl_r) ? 1'b0 : 1'bz; // избавляемся от мультиплексора

OBUFT #( // включаем OUTPUT в библиотечный элемент 
   .DRIVE(12),     // Specify the output drive strength
   .IOSTANDARD("DEFAULT"), // Specify the output I/O standard
   .SLEW("SLOW")   // Specify the output slew rate
) OBUFT_inst_scl (
   .O(scl_io),     // Buffer output (connect directly to top-level port)
   .I(1'b0),       // Buffer input
   .T(scl_r)       // 3-state enable input
);

Теперь в SCHEMATIC можно наблюдать правильный выход после синтеза:

С SDA чуть-чуть посложнее. IOBUF был включен в TOP-LEVEL файле. Для это из I2C_bit_controller потребовать вывести сигнал наружу:

//---------------------------------------------------
assign T = into_w || sda_r; // здесь Т - это OUTPUT
//---------------------------------------------------

Теперь в TOP-LEVEL файле подключаем библиотечный элемент:

wire T;     // провод для design_wrapper
wire sda_w; // провод sda, по нему пойдут даннные из SLAVE в MASTER через IOBUF

IOBUF IOBUF_inst_sda (
  .O(sda_w),     // Buffer output
  .IO(sda_io),   // Buffer inout port (connect directly to top-level port) // sda_io
  .I(),          // Buffer input
  .T(T)          // 3-state enable input, high=input, low=output // (into_w || sda_r)
);

В design_wrapper включаем правильные сигналы:

...
.scl_io_0(scl_io),
.sda_io_0(sda_w), // sda_io
...

Теперь это будет работать на реальном железе. На моей кастомной плате нет семисегментников, поэтому для вывода данных была использована двухпортовая BRAM память. Один порт в Microblaze, а второй управляется кастомным контроллером из прошлых статей автора. Так для отображения всех данных я буду использовать терминал, данные в который поступают из софт-процессора MICROBLAZE. По линии I2С на этой плате управляется PLL LMK03318 (https://qeeniu.net/product/LMK03318#all). В cnt_0_data (по адресу 0xC000000C) отображается номер регистра, в cnt_1_data (по адресу 0xC0000010) данные, которые мы хотим записать по i2c линии в микросхему, а в cnt_2_data (по адресу 0xC0000014) считанные данные.

После включения питания и сброса (по кнопке RESET) адрес регистра устанавливается в 0xA, а данные, которые необходимо записать в 0xDE.

Нажимаю кнопку чтения.

В регистр записалось значение 0x0A, что по даташиту соответствует адресу микросхемы по-умолчанию.

Установим адрес 0xC

и запишем по этому адресу значение 0xDE в микросхему. Это будет соответствовать отключению функции AUTOSTART LMK03318.

Делаю сброс (кнопкой RESET) и считываю регистры в приложении для Microblaze:

А потом опять 0xDF

Summary. Пользуясь моментом хочу сказать спасибо автору этих статей, я думаю что благодаря Вам проектирование под плис и программирование становится доступным каждому кто захочет в этом разобраться. Комментарий получился объемным, но очень поверхностным. Если у кого-то будут вопросы - не стесняйтесь писать, я постараюсь ответить.

Пробовал я герметизировать вал вот в этом проекте https://habr.com/ru/articles/748346/. Использовал сальник. Обороты двигателя достигают 5000 в минуту и это разогревает сальник до критических значений даже под водой! Он деформируется и начинаются проблемки

Фото девайса, который меня заинтересовал
Фото девайса, который меня заинтересовал

Отличный проект! Я как-то увидел в магазине такой девайс и тоже захотел повторить успех с помощью 3d принтера, но еще не брался даже. А тут уже и статья есть. Меня особенно впечатлило Ваше видео, спасибо.

Ну этож делать надо) сил, времени и денег хватило на самое необходимое

Да вобщем-то пока никак. Пульт, который я использую оснащем курком на пружине, отпустив который тяга пропадает. Но с этим лучше что-то сделать, потому что некоторые бросят курок от испуга падения, а некоторые выжмут до конца и будут держать. В идеале я бы реализовал курок с рабочим положением в центре. А в крайних положениях тяга отсутствовала бы. Самое плохое, что часты ситуации, когда я падаю вперед и не убери я тягу, доска наедет на меня

Flipper zero тоже ничего ;) Мечты должны сбываться) я тоже стал интересоваться темой передачи и приема радиосигналов. Собирая разные приемопередатчики не знал на что грешить. Теперь есть заведомо рабочая вещица и жить стало легче. Ну и с отладкой вообще почти нет проблем, потому что я теперь точно знаю что сигнал уходит в эфир.

P.s. спасибо Вам за статью и Ваше усердие)

Отправитель и получатель
Отправитель и получатель

Кстати, у Flipper Zero тоже есть возможность принимать пейджинговые сообщения. Я хотел купить пейджер на Авито, но продавец, который ближе всех не хотел отправлять, а встретиться мог только на выходных. В общем пока я ждал выходных, отправил сообщение на FZ и успокоился :-)

Даже не представляю как герметезировать двигатель без использования фрезеровки=)

Я заметил, что без SSD теперь можно сойти с ума, пока пережидаешь "тормоза" ОС

GoPro это хорошо, но на эти деньги можно купить новый пульт, срарку для 18650 и пару акб собрать.

Можно собрать DIY дрона что бы снять видео про DIY электрофойл, вот это было бы круто?

Чехол для телефона работет) спасибо за совет

Information

Rating
221-st
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer
Lead
From 350,000 ₽
STM32
Arduino
AVR C
FPGA