Jump to content

DCS-Bios, почему не обсуждаем?


Andreilo

Recommended Posts

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

Подскажите. Прочитал мануал по этому софту (с помощью гугла переводчика). Первые тир пункта элементарно для моего понимания, а вот остальные пункты, особенно написание скетча для меня просто ад.

Что нужно писать вместо * your code here *? Я хочу подключить два LSD дисплея, чтобы они выводили разные показания разных систем в одно и тоже время при полете, пару тройку светодиодов. Знающие люди подскажите. Вот для примера в таких местах, о чем речь

 

........void onVhfamFreq1RotChange(unsigned int newValue) {

/* your code here */

}

DcsBios::IntegerBuffer vhfamFreq1RotBuffer(0x11bc, 0x07f8, 3, onVhfamFreq1RotChange);......


Edited by Andreilo

Intel Celeron - 333/2 планки DIMM по 128 мб/ATI 3D PCI 4 Mb/640х480/HDD 4ГБ/клавиатура+мышь/DSC World 2.5/ни чё не фризит/не тормозит/багов нет/картинки тоже нет :joystick:

Link to comment
Share on other sites

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

 

 

STEAM

asus p8z68-v gen3, 2600k@4,5ghz(w/c), 16gb, 1080ti(w/c), ch fighterstick/gvl224-4000-8, ch pro throttle, Oculus Rift CV1+Touch, thrustmaster tx

 

Link to comment
Share on other sites

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

Intel Celeron - 333/2 планки DIMM по 128 мб/ATI 3D PCI 4 Mb/640х480/HDD 4ГБ/клавиатура+мышь/DSC World 2.5/ни чё не фризит/не тормозит/багов нет/картинки тоже нет :joystick:

Link to comment
Share on other sites

  • 4 months later...

"LSD-дисплеи" - это что? Если речь идёт об экранчиках типа LCD2004 или LCD1602, у них есть две схемы подключения - одна через I2C (a la https://ru.aliexpress.com/item/MK00270-IIC-I2C-2004-LCD2004-blue-screen-LCD-module-provides-a-library-file/32658248301.html ), четыре контакта, другая не-помню-как-называется, много контактов.

 

Как бы то ни было, временно забудьте про DCS-BIOS и ищите/читайте статьи/книжки просто про Ардуино с упоминанием LCD 1602. Если не найдётся по-русски... ну извините... не знающий английского по нынешним временам - неграмотный... но найдётся, скорее всего.

 

Ещё: электросхемы в DCS-BIOS (были?) сомнительны. Даже я (после чтения нескольких книжек по Ардуино, англоязычных) знаю, что даже для банальной кнопки нужен подтягивающий резистор. (Ха, и не все авторы книжек про Ардуино об этом знают).

Link to comment
Share on other sites

И я не уверен, что DCS-BIOS что-то упрощает. Мне вот кажется проще написать свою обвязку самому, чем разбираться в их коде. Впрочем, я пока всерьёз за это не брался - пока с Али заказы дождёшься, семь ковриков изгрызешь.

Link to comment
Share on other sites

Какие у меня ещё есть "соображения" по поводу Ардуино:

 

* классический UNO R3 построен на ATmega328p + ATmega16U2

* классический MEGA R3 построен на ATmega2560 + ATmega16U2

* Leonardo и "Pro Micro" на ATmega32U4

 

На Али для первых двух очень часто другие комбинации; вместо ATmega16U2 обычно CH430G.

 

Cейчас я думаю, что ввиду проектов HoodLoader2 (https://github.com/NicoHood/HoodLoader2 ) и USB-HID ( https://github.com/NicoHood/HID ) для компьютерной периферии надо брать только с ATmega16U2, или (ещё лучше) с ATmega32U4. Просто из-за того, чтобы устанавливать скорость эмуляции компорта по USB побольше. (На самом деле я не знаю, способен ли "типичный" CH430G на высокую скорость, но, по крайней мере, за ATmega16U2 и ATmega32U4 можно не беспокоиться.)

 

Leonardo при этом кажется предпочтительнее, чем UNO, например, ввиду потенциальной возможности задействовать проект "МегаМозга": https://forum.warthunder.ru/index.php?/topic/64234-mmjoy2-besplatnaya-proshivka-i-soft-dlya-samodelnogo-kontrollera-dzhoistika/&page=1

Link to comment
Share on other sites

Наконец приехало кое-что из заказанного барахлишка.

 

Я не вижу, чтобы DCS-BIOS поддерживал дисплеи. Только отдельные светодиоды и сервомоторы. ActionButton, кстати, написано, что срабатывают на отпускании нажатой кнопки (что никуда не годится).

 

OK, я не чувствую, что DCS-BIOS так уж нужен. Правда, что и Ардуино так уж нужен. Вариант с Adnroid/Windows-планшетом должен быть проще и гибче, можно что угодно нарисовать и тыкать пальцами. (А вот для джойстика я надеюсь).

 

Вот это ко мне пришло: https://ru.aliexpress.com/item/Free-shipping-mega-2560-r3-starter-kit-motor-servo-RFID-Ultrasonic-Ranging-relay-LCD-for-arduino/32231653909.html

 

 

в левом верхнем углу дисплейчик, называемый LCD1602 (16 символов * 2 строки); и ещё у меня есть аналогичный LCD2004 (20 символов * 4 строки).

 

К подобному дисплейчику мне известны три способа подключения. Тот, что пришёл, подключается "параллельно", несмотря на то, что в описании товара (ложно) написано про IIC. Внизу куча контактов, для управления используются 6, а ещё можно потенциометр для регулировки подсветки прикрутить. Второй вариант - IIC (он же I2C), к этом дисплейчику внизу крепится какая-то маленькая платка, управление идёт по 4-м проводам. Видел в одной книжке третий вариант 1602, с которым общение идёт по трём проводам, serial. Все три варианта программируются по-разному, но, на первый взгляд, как прикручивать к DCS-BIOS, непонятно для любого варианта.

 

В одной из книжек как-то глухо упоминалось про существование полноценных графических дисплеев для Ардуино (мол, существуют и такие), но...


Edited by vvm13
Link to comment
Share on other sites

Дошло.

 

........void onVhfamFreq1RotChange(unsigned int newValue) {

/* your code here */

}

 

DcsBios::IntegerBuffer vhfamFreq1RotBuffer(0x11bc, 0x07f8, 3, onVhfamFreq1RotChange);

 

Это код инициализации, "обычно" перед void setup() {}, в котором тоже идёт какая-то инициализация. Сперва определяется функция onVhfamFreq1RotChange. В ней-то и будет вывод на дисплей. А вот какой будет вывод, должно зависеть от того, какой дисплей. Например, пусть это будет LCD1602 с параллельным подключением.

------------------------------------------------------------

#define DCSBIOS_IRQ_SERIAL #include <DcsBios.h> #include <LiquidCrystal.h>
void onVhfamFreq1RotChange(unsigned int newValue) {
 lcd.setCursor(0,1);
 // у нас всего 16 символов в строке, надо экономить
 lcd.print("Frq1RtChng="); 
 lcd.print(newValue);
}

//потом, как и раньше, идёт
DcsBios::IntegerBuffer vhfamFreq1RotBuffer(0x11bc, 0x07f8, 3, onVhfamFreq1RotChange);
//который выставляет вышеупомянутую функцию onVhfamFreq1RotChange колбэком (callback function)

//а потом 
void setup() {
 DcsBios::setup();
 LiquidCrystal lcd (2,3,4,5,6,7); // какими проводами подключен дисплейчик
 lcd.begin(16, 2); // размер экрана
}

void loop() {
    DcsBios::loop();
}

------------------------------------------------------------

А для IIC/I2C будет похожий, но всё-таки другой код.


Edited by vvm13
Link to comment
Share on other sites

https://forums.eagle.ru/showpost.php?p=2765273&postcount=333 более точно.

 

А на https://forums.eagle.ru/showpost.php?p=2940078&postcount=506 приведён пример кода без callback'ов (см. также https://forums.eagle.ru/showpost.php?p=2940179&postcount=508 ).

 

DcsBios::StringBuffer<4> tacanChannelBuffer(0x1162, NULL); DcsBios::IntegerBuffer tacanModeBuffer(0x1168, 0x000e, 1, NULL);

отметим NULL вместо имён функций.

 

А внутри loop() мы видим

char* channelStr = tacanChannelBuffer.getData();

и

tacanModeBuffer.getData() == 0

соответственно.


Edited by vvm13
Link to comment
Share on other sites

Судя по тому, что написано на https://forums.eagle.ru/showpost.php?p=2804224&postcount=362 , ардуинки на ATmega32U4 могут быть менее годны для DCS-BIOS, чем классика (Uno/ATmega328p и Mega2560/ATmega256), ввиду предпочтительности IRQ_SERIAL перед DEFAULT_SERIAL.

 

А в https://forums.eagle.ru/showpost.php?p=2920240&postcount=453 написано, что в DEFAULT_SERIAL баг, но IRQ_SERIAL (то есть DCSBIOS_IRQ_SERIAL) всё равно лучше, но поддерживается только на ATMega328 и ATMega2560.

 

Правда, роль китайского CH430 не раскрыта. Но по крайней мере, у меня сейчас пробная схемка с двумя светодиодами отработала. Перед этим натолкнулся на ошибку socat "couldn't compute FAST_CWD pointer (cygwin)", сходил на https://cygwin.com/install.html , поставил https://cygwin.com/setup-x86.exe и взял cygwin1.dll оттуда.


Edited by vvm13
Link to comment
Share on other sites

Упоминается о создании цепочки Ардуино через RS485 (хотя подробности предстоит). В самом деле, даже на Mega контактов не так уж много, по сравнению с.

 

Кроме того, в https://forums.eagle.ru/showpost.php?p=2961342&postcount=533 автор говорит, что обычно использует Mega для начала цепочки (RS-485 master) и Nano для остального, что распределение нагрузки по нескольким платкам может иметь преимущества (или не иметь).


Edited by vvm13
Link to comment
Share on other sites

Ещё: электросхемы в DCS-BIOS (были?) сомнительны. Даже я (после чтения нескольких книжек по Ардуино, англоязычных) знаю, что даже для банальной кнопки нужен подтягивающий резистор. (Ха, и не все авторы книжек про Ардуино об этом знают).

Тут я опять сел в лужу. Есть такая вещь, как INPUT_PULLUP, и автор DCS-BIOS как раз это использует.

 

https://www.arduino.cc/en/Reference/Constants

Link to comment
Share on other sites

  • 6 months later...
  • 5 months later...
Упоминается о создании цепочки Ардуино через RS485 (хотя подробности предстоит). В самом деле, даже на Mega контактов не так уж много, по сравнению с.

 

Кроме того, в https://forums.eagle.ru/showpost.php?p=2961342&postcount=533 автор говорит, что обычно использует Mega для начала цепочки (RS-485 master) и Nano для остального, что распределение нагрузки по нескольким платкам может иметь преимущества (или не иметь).

Пробовал по RS485, ощущение что я чёто не так понял, Cauton Led панелька начинает через некоторое время черти чё показывать. Не выдержал переписал под CAN. Заработало шикос. Буду переносить под CAN все что буду подключать. На данный момент все на этапе протопирования. В качестве основного контроллера использую Arduino Due т.к. она является основным шлюзом между DcsBios и панелями. Обмен данными между панелями двоичный, к примеру если на Due приходит пакет с Id 0х201 значит переключатель, первый байт id переключателя, второй состояние. Id переключателя является индексом строкового массива, так если Id=11 значит данный элемент массива "CMSP_UPDN". Типа такого

Массив переключателей

char Swithes_Id[][10] = {

"CMSP_ARW1", "CMSP_ARW2", "CMSP_ARW3", "CMSP_ARW4",

"CMSP_DISP", "CMSP_JMR", "CMSP_JTSN", "CMSP_MODE",

"CMSP_MWS", "CMSP_RTN", "CMSP_RWR", "CMSP_UPDN"

};

 

Ну а это функция приема

 

void CAN_RX() {

CAN_1.readMsgBuf(&rxId, &len, rxBuf);

switch (rxId) {

case 0x201 : {

utoa(rxBuf[1], DCS_buf, 10);

sendDcsBiosMessage(Swithes_Id[rxBuf[0]], DCS_buf);}

break; }

}

 

Прошу строго не судить, это пока так, проба сил и алгоритмов.

  • Like 1
Link to comment
Share on other sites

Парни, подскажите Arduino Due не поддерживается DCS-BIOS?? Что то при компиляции скетча ошибку выдает... Дуе вроде не Атмега 328? а биос вроде как Атмега 328 только поддерживает?

Intel® Core™ i7-7700k 4.5 GHz/ AsRock Z270 Taichi/ SSD Samsung 970 EVO 500 Gb/NVIDIA® GeForce® RTX 2080TI Gaming X Trio/ DDR4 32 Gb 3000 MHz/ 

Hotas Warthog/ Rudder Pedals RX Viper V2 Slaw Device / VR HTC VIVE PRO

 

Link to comment
Share on other sites

Парни, подскажите Arduino Due не поддерживается DCS-BIOS?? Что то при компиляции скетча ошибку выдает... Дуе вроде не Атмега 328? а биос вроде как Атмега 328 только поддерживает?

 

Поддерживает, только вместо DCSBIOS_IRQ_SERIAL нужно DCSBIOS_DEFAULT_SERIAL и должно заработать. Но у меня она работает чисто как транслятор т.е. к ней кроме адаптера шины и компа ничего не подключено. Что то типа во вложении.

К тому же, надо помнить что на пины Дуе нельзя подавать более 3.3 вольта, иначе контроллер сгорит. Мне пришлось шилд по SPI через преобразователь логики TXB0104PWR подключать т.к. у него питание 5В и в результате режим HIGH в районе 4.7В.

CAN_MASTER.ino.txt


Edited by Adushkin
Link to comment
Share on other sites

  • 4 years later...

реализовал схему МАСТЕР - СЛЕЙВ (oshwlab.com/qrethus/arduino-nano-and-max487-chip-with-female-rj45-connector), но работает корректно только с одним НАНО. Ставишь 2 и более - работа неправильная. если кто то реализовал данную схему или разбирается в данном вопросе, посоветуйте что там не так. возможно, где то резисторов не хватает?easyeda.com/editor#id=5eb322b2c945425da1a51bcd0a97a04b

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...