Страница 1 из 1

дисплей M202MD25C как подключить .

Добавлено: Чт ноя 26, 2020 18:51:21
vdv22
здравствуйте , есть такое чудо компании FUtaba M202MD25C .Нигде и ничего не могу найти на него.Вроде должен работать по RS232 . По маркировке дисплея , контроллера нет даже упоминаний. Писал в FUtaba а в ответ тишина. Читал что протокол у них как в 1602 HD44780 я с ним знаком хорошо и много чего делал на них , но как и кому посылать команды я пока не разобрался . Прошу помощи!!!

Re: дисплей M202MD25C как подключить .

Добавлено: Чт ноя 26, 2020 19:38:01
BlackKilkennyCat
ну хоть бы фото выложили, пины, деталей на плате дисплее, мож там надпись на микрухе, а не только нашлёпка... а так... ну разве что тут каждый второй с этим дисплеем работал, чё там, подумаешь, копеечная футаба, все сразу с ней после светодиодика :)

мож поможет:
futaba.pdf
(721.92 КБ) 519 скачиваний

Re: дисплей M202MD25C как подключить .

Добавлено: Пт ноя 27, 2020 17:13:51
vdv22
Извиняюсь что не прикрепил фото .

Re: дисплей M202MD25C как подключить .

Добавлено: Пт ноя 27, 2020 17:49:00
BlackKilkennyCat
Ну так это разработка по заказу https://www.dieboldnixdorf.com/ ,а не чисто футабовский продукт. можно попробовать как здесь: https://habr.com/ru/post/392757/
количество джамперов и пинов разъёма совпадают, но можно и проигорировать - на плате вижу подписи сигналов и контрольные точки. Большего особо и не нужно.

Re: дисплей M202MD25C как подключить .

Добавлено: Пт ноя 27, 2020 20:01:47
vdv22
Пробежался мультиметром по разъему боковому 14 пин и скажу что он не имеет контактов с обозначенными пятаками .Если пробовать искать их на плате то можно предположить что CLK это тактирование , SI -данные а что такое CTS lat , BK ,SO какой то странный протокол получается...

Re: дисплей M202MD25C как подключить .

Добавлено: Пт ноя 27, 2020 20:41:51
BlackKilkennyCat
это внутренние сигналы.
я бы экспериментировал с Rx Tx Clk
а вообще, проглядел бы пути от штатного разъёма, который, оказывается, по центру с металлическим корпусом.
Но думается мне, что так удаленно ничего не получится: обмениваться какими-то догадками это долго.
Напишите в никсдорфф, может они поделятся спецификацией

Re: дисплей M202MD25C как подключить .

Добавлено: Сб ноя 28, 2020 16:45:42
vdv22
С разъема в центре идет RX/TX на микросхему SP232AEN и с ее выходов 9 и 10 на точки на плате около контроллера .Понимаю что дисплей создан для работы по 232 ,но не могу понять в каком формате запихать туда по TX команды...

Re: дисплей M202MD25C как подключить .

Добавлено: Пт дек 04, 2020 15:32:53
zenner
Это обычный дисплей покупателя, магазинное оборудование.
https://kassastore.ru/upload/iblock/663 ... 221af9.bmp
https://docviewer.yandex.ru/view/0/?pag ... J9&lang=ru
Инфу по ним рыть нужно. Но народ что-то на них делает
http://monitor.espec.ws/section9/topic180280.html
https://zipstore.ru/blog/displei-pokupatelya-icd2002/
https://habr.com/ru/post/457352/

Re: дисплей M202MD25C как подключить .

Добавлено: Сб авг 27, 2022 01:13:29
serg_svd
vdv22, имею аналогичный дисплей. Не могли бы вы проверить, есть ли ШИМ сигнал на затворе мофета рядом с трансформатором. У меня после подачи питания 5 В ток потребления 12-13 мА, статичный и нет ШИМ. Индикации тоже нет. Хотя, по идее, должна быть тестовая информация о дисплее

Re: дисплей M202MD25C как подключить .

Добавлено: Пн сен 05, 2022 17:08:00
serg_svd
Нашел я где выводы питания. Подал 12 В. Дисплей кратковременно засвечивает все сегменты и тухнет. Служебную информацию не выводит. Система команд неизвестна, скорость RS232 тоже.
В общем запустил. Решение было тут на форуме.
https://radiokot.ru/forum/viewtopic.php ... 6#p4240386
1. Запаял перемычку J3 (Parity OFF)
2. Сигнал с микроконтроллера подал напрямую на 9 ногу микросхемы *232.
3. При инициализации загрузил таблицу с кириллицей 1B 52 35 (или можно попробовать 1B 52 29
Дисплей оказался BA63, но набор комманд мне непонятен. Он схож с коммандами на дисплей LIUST-51. Я такой давно запускал. А перед этим запускал дисплей с коммандами EPSON и там все совсем по-другому. Комманды между собой несовместимы. У EPSON/POS7300 и подобных для инициализации надо послать в порт 1B 40. А для этого дисплея абсолютно это не надо.
И, судя по даташиту, который можно найти в указанной выше теме, дисплей имеет очень куцый набор команд.

Re: дисплей M202MD25C как подключить .

Добавлено: Ср ноя 02, 2022 22:52:38
Mr. Monk
Приобрел таких немного за дешево, чисто поиграть. Лично мой ведет себя странно.
Про подключение и питание. Здесь кто-то обозначил CN3 на плате:
1. RX платы дисплея
2. пустой (на самом деле TX платы дисплея)
3. + питание
4. - земля
Еще вчера воткнул пятивольтовый блок питания, замкнув тестовую перемычку J6. Дисплей ожил, начал гонять тест. Радости не было предела, ибо нужен только один БП 5 вольт на всё. А вот сегодня этот фокус не прокатил. Странно. Пришлось цеплять 12 вольт.
С платы дисплея 5 вольт на ESP8266 взять не получилось. Схема питания не тянет себя, и еще ESP сверху. :cry:
TX ESP8266 => RX на CN3 работало. Но не долго. Даже получилось применить стандартный Serial со swap() на gpio15. Естественно с перемычкой J3.
А вот потом опять странности. Сначала перестало работать через CN3. Чего же тут странного, если уровни не те. Перекинул(ся) на 9 ногу конвертера 232. Некоторое время на gpio15 работало. Потом перестало. На ноге TX работает.
Ладно, будем как все (постараемся). Берем SoftwareSerial, пробуем со всеми доступными "ногами" ESP. Везде, кроме gpio15, работает. Меняю проц. Те же яйца, вид сбоку. Сюжет!? :shock:
Но человеку дан пытливый ум не только для набивки брюха. :hunger: Читаем РТФМ SoftwareSerial углубленно, делаем выводы, пробуем:

Код: Выделить всё

#include <SoftwareSerial.h>
#define MYPORT_TX D7
#define MYPORT_RX -1
SoftwareSerial myPort;
void setup()
{
  myPort.begin(9600, SWSERIAL_8O1, MYPORT_RX, MYPORT_TX);
Убираем перемычку J3. Работает.

Изображение

Про выбор столбца

Код: Выделить всё

void set_cursor (uint8_t str, uint8_t col) { // установить курсор
// строка , колонка
myPort.write(0x1b);
myPort.write(0x5b);
myPort.write(0x30 + str);
myPort.write(0x3b);
if (col < 10) myPort.write(0x30 + col);
else if (col == 20) {myPort.write(0x32); myPort.write(0x30);}
else {myPort.write(0x31); myPort.write(0x30 + col%10);}
myPort.write(0x48);
}
немного переписал код, иначе такая хрень в виде буквы H появлялась на позициях дальше девятой.

Изображение

Re: дисплей M202MD25C как подключить .

Добавлено: Ср ноя 16, 2022 09:59:40
Mr. Monk
[uquote="Mr. Monk",url="/forum/viewtopic.php?p=4314021#p4314021"]А вот потом опять странности. Сначала перестало работать через CN3.[/uquote] Поправка. Надо быть внимательнее, и не забывать про инвертирование сигнала на COM порту.
Собственно по подключению к ESP8266.
Подключился таки к CN3 на плате:
1. RX платы дисплея
2. пустой (на самом деле TX платы дисплея)
3. + питание
4. - земля

Если использовать стандартный Serial, то код должен быть таким:

Код: Выделить всё

void setup()
{
// HardwareSerial::begin(unsigned long baud, SerialConfig config, SerialMode mode, uint8_t tx_pin, bool invert)
  Serial.begin(9600, SERIAL_8O1, SERIAL_TX_ONLY, 1, true);
  Serial.swap();  //Пины переместятся на GPIO15/D8 (TX) и GPIO13/D7 (RX)
  Serial.flush();
Если использовать SoftwareSerial, то код должен быть таким:

Код: Выделить всё

#include <SoftwareSerial.h>
SoftwareSerial myPort;
void setup()
{
  // begin(baud, config, rxPin, txPin, m_invert);
  myPort.begin(9600, SWSERIAL_8O1, MYPORT_RX, MYPORT_TX, true);
Перемычка J3 не нужна.

Про регулировку яркости. Везде пишут про контакт BK. Решил попробовать. отрезал дорожку от 28 ноги процессора, BK подключил к ESP8266, analogWrite(D7, analog_Write);
Спойлер
В общем работает. Но с нюансами. analogWrite в ESP8266 программный. Прилось выставить частоту analogWriteFreq(5000);, иначе получался стробоскоп.

Re: дисплей M202MD25C как подключить .

Добавлено: Ср ноя 16, 2022 14:24:39
zenner
Нашел статью про часы на этих модулях
https://cxem.net/arduino/arduino250.php ... d693179637
Но не нравится наличие дорогих модулей и датчиков в обвесе.
И ждать их из китая долго. И не присылают иногда вообще.

Re: дисплей M202MD25C как подключить .

Добавлено: Ср ноя 16, 2022 14:42:08
Mr. Monk
[uquote="zenner",url="/forum/viewtopic.php?p=4321388#p4321388"]Нашел статью про часы на этих модулях[/uquote]
Не-а, не на этих.
[uquote="zenner",url="/forum/viewtopic.php?p=4321388#p4321388"]Но не нравится наличие дорогих модулей и датчиков в обвесе.[/uquote]
Смотря что Вам от устройства требуется. Барометры с влажностью - да, не по детски подорожали. Сразу в 10 раз год назад. Сейчас вроде цена падает. Недавно BME280 чуть дороже 200 рублей брал. От RTC можно отказаться при наличии интернета и ESP.
[uquote="zenner",url="/forum/viewtopic.php?p=4321388#p4321388"]И ждать их из китая долго. И не присылают иногда вообще.[/uquote]
Раз на раз не приходится. Бывает, что теряется посылка. У меня за последние 10 лет раза три или четыре точно. А насчет "долго"... Займитесь чем нибудь интересным. Корпус например для часов сделайте. Месяц быстро пролетит.

Re: дисплей M202MD25C как подключить .

Добавлено: Ср ноя 16, 2022 15:39:18
zenner
Спасибо конечно за совет клеить корпуса, но у меня более плотный график и есть чем заняться.
Есть у меня кучка модулей похожих, вот думаю что-то на них сделать интересное.
Но нет нормальных схем в сети на них. Всё что есть, всё ардуиновское или глумное по сути.
На счёт разных модулей- так у них у всех протокол по витой паре практически одинаков.

Re: дисплей M202MD25C как подключить .

Добавлено: Ср ноя 16, 2022 17:15:14
Mr. Monk
В общем сделал автоматическую регулировку яркости.
Напомню, отрезал дорожку от проца к контакту BK, подключил контакт BK к ESP8266.
В setup вставил analogWriteFreq(5000);, иначе стробоскоп на экране.
И куда нибудь в цЫкл:

Код: Выделить всё

analogWrite(D7, 250 - analogRead(A0)/7);
Спойлер

Re: дисплей M202MD25C как подключить .

Добавлено: Вт мар 18, 2025 22:06:08
alakond
[uquote="Mr. Monk",url="/forum/viewtopic.php?p=4321497#p4321497"]В общем сделал автоматическую регулировку яркости.
Напомню, отрезал дорожку от проца к контакту BK, подключил контакт BK к ESP8266.
В setup вставил analogWriteFreq(5000);, иначе стробоскоп на экране.
И куда нибудь в цЫкл:

Код: Выделить всё

analogWrite(D7, 250 - analogRead(A0)/7);
Спойлер
[/uquote]

Привет. А скетчем для esp8266 поделишься?

Re: дисплей M202MD25C как подключить .

Добавлено: Вт мар 18, 2025 22:49:33
Mr. Monk
[uquote="alakond",url="/forum/viewtopic.php?p=4695696#p4695696"]Привет. А скетчем для esp8266 поделишься?[/uquote]
Что конкретно интересует? Я его, дисплей, довольно глубоко в скетч интегрировал. Могу вкладку конкретно для дисплея выложить. Может какие-нибудь вопросы по управлению интересуют?

Re: дисплей M202MD25C как подключить .

Добавлено: Вт мар 18, 2025 22:57:35
alakond
[uquote="Mr. Monk",url="/forum/viewtopic.php?p=4695708#p4695708"][uquote="alakond",url="/forum/viewtopic.php?p=4695696#p4695696"]Привет. А скетчем для esp8266 поделишься?[/uquote]
Что конкретно интересует? Я его, дисплей, довольно глубоко в скетч интегрировал. Могу вкладку конкретно для дисплея выложить. Может какие-нибудь вопросы по управлению интересуют?[/uquote]
Дисплей попал в руки, решил часы сделать. Так что интересует скетч для управления дисплеем. А если наглеть, то сразу скетч под часы.

Re: дисплей M202MD25C как подключить .

Добавлено: Вт мар 18, 2025 23:05:09
Mr. Monk
[uquote="alakond",url="/forum/viewtopic.php?p=4695709#p4695709"]Дисплей попал в руки, решил часы сделать. Так что интересует скетч для управления дисплеем. А если наглеть, то сразу скетч под часы.[/uquote]
Ну как то так для начала.
Спойлер#ifdef VFDser

void showTime()
{
String outVFD1, outVFD2;
analogWrite(BK_pin, 215 - analogRead(A0)/5); // Яркость

countShT++;

// =============== collectTime(outVFD1);

if (NTPtimeGet || DS3231_present)
{
outVFD1 = FPSTR(day_of_weekVFD[dayOfWeek]);
outVFD1 += addZero(dayOfMonth, 2, " ");
outVFD1 += ".";
outVFD1 += addZero(monthDS, 2, "0");
outVFD1 += ".";
outVFD1 += addZero(yearDS, 2, "0");
outVFD1 += " ";
outVFD1 += addZero(hourDS, 2, "0");
outVFD1 += hither_thither ? ":" : "\376";
outVFD1 += addZero(minuteDS, 2, "0");
outVFD1 += hither_thither ? ":" : "\376";
outVFD1 += addZero(secondDS, 2, "0");
hither_thither = !hither_thither;
}
else
{
outVFD1 = FPSTR(txtVFD[0]); // ВРЕМЯ НЕ ПОЛУЧЕНО
}

//=================
#if defined(Desk_Clock)
//=================

// =============== Первый экран

if (countShT < 7)
{
if (CLIMATE_present)
{
if (Weather_t >= 0) outVFD2 = "+";
outVFD2 += Weather_t;
outVFD2 += F("\370 ");
outVFD2 += Weather_h;
outVFD2 += "%";
}
else
{
outVFD2 = descr_Weather;
outVFD2 += FPSTR(txtVFD[2]); // НЕ ПОДКЛЮЧЕН
countShT = 9;
}
}

// =============== Второй экран

#ifdef BME280
else if (countShT > 6 && countShT < 10)
{
if (CLIMATE_present)
{
outVFD2 = F("Давление ");
outVFD2 += Weather_p;
outVFD2 += F("mHg");
}
else
{
outVFD2 = descr_Weather;
outVFD2 += FPSTR(txtVFD[2]); // НЕ ПОДКЛЮЧЕН
countShT = 9;
}
}
#else
else if (countShT > 6 && countShT < 10)
{
outVFD2 = F("Давление неизвестно");
countShT = 9;
}
#endif

// =============== Третий экран

else if (countShT > 9 && countShT < 13)
{
#if defined(DallaS)
if (DS18B20_present)
{
outVFD2 = descr_DS18B20;
outVFD2 += " ";
if (DS18B20_t >= 0) outVFD2 += "+";
outVFD2 += DS18B20_t;
outVFD2 += F("\370");
}
else
{
outVFD2 = descr_DS18B20;
outVFD2 += FPSTR(txtVFD[2]); // НЕ ПОДКЛЮЧЕН
countShT = 12;
}
#else
#endif
}

// =============== Четвертый экран

else if (countShT > 12 && countShT < 15)
{
if (WiFi.status() == WL_CONNECTED)
{
outVFD2 = WiFi.SSID();
outVFD2 += " ";
outVFD2 += WiFi.RSSI();
outVFD2 += F(" dbm");
}
else
{
outVFD2 = F("Wi-Fi");
outVFD2 += FPSTR(txtVFD[2]); // НЕ ПОДКЛЮЧЕН
countShT = 0;
}
if (countShT == 14) countShT = 0;
}


//=================
#elif defined(Weather_St)
//=================

// =============== Первый экран

if (countShT < 7)
{
#if defined(DallaS)
if (DS18B20_present)
{
outVFD1 = descr_DS18B20;
String DS18B20_tS;
if (DS18B20_t >= 0) DS18B20_tS = "+";
DS18B20_tS += DS18B20_t;
uint8_t i = 0;
uint8_t ii = DS18B20_tS.length() < 6 ? 8 : 9; // количество знакомест в температуре
uint8_t iii = outVFD1.length(); // количество байтов в названии
while (iii--) {if (outVFD1[iii]==0xd1 || outVFD1[iii]==0xd0) i++;} // считаем количество русских букв
iii = NUMofCOL - outVFD1.length() + i - ii; // сколько нужно пустых знакомест в начале?
while (iii--) outVFD1 += " "; // набиваем...
outVFD1 += DS18B20_tS;
outVFD1 += F("\370");
iii = NUMofCOL - outVFD1.length() + i - 1; // сколько нужно пустых знакомест в конце?
while (iii--) outVFD1 += " "; // добиваем...
if (countShT == 1 || countShT == 4) outVFD1 += "/";
else if (countShT == 2 || countShT == 5) outVFD1 += "-";
else if (countShT == 3 || countShT == 6) outVFD1 += "\\";
}
#endif
if (CLIMATE_present)
{
outVFD2 = descr_Weather;
String Weather_tS;
if (Weather_t >= 0) Weather_tS = "+";
Weather_tS += Weather_t;
uint8_t i = 0;
uint8_t ii = Weather_tS.length() < 6 ? 8 : 9; // количество знакомест в температуре
uint8_t iii = outVFD2.length(); // количество байтов в названии
while (iii--) {if (outVFD2[iii]==0xd1 || outVFD2[iii]==0xd0) i++;} // считаем количество русских букв
iii = NUMofCOL - outVFD2.length() + i - ii; // сколько нужно пустых знакомест между?
while (iii--) outVFD2 += " "; // набиваем...
outVFD2 += Weather_tS;
outVFD2 += F("\370");
iii = NUMofCOL - outVFD2.length() + i; // сколько нужно пустых знакомест в конце?
while (iii--) outVFD2 += " "; // добиваем...
}
else
{
outVFD2 = descr_Weather;
outVFD2 += FPSTR(txtVFD[2]); // НЕ ПОДКЛЮЧЕН
}
}

// =============== Второй экран

else if (countShT > 6 && countShT < 10)
{
if (CLIMATE_present)
{
outVFD2 = Weather_h;
outVFD2 += "%";
#ifdef BME280
outVFD2 += F(" ");
outVFD2 += Weather_p;
outVFD2 += F(" mHg");
#endif
}
else
{
outVFD2 = descr_Weather;
outVFD2 += FPSTR(txtVFD[2]); // НЕ ПОДКЛЮЧЕН
}
if (countShT == 9) countShT = 0;
}

#endif

print_on_VFDa(1, outVFD1, " ");
print_on_VFDa(2, outVFD2, " ");
}

void Set_country_code(uint8_t country_code) // ESCRn (1B 52 35)
{
Serial.print(F("\x1BR") + String(country_code)); delay (100);
// выбор кодовой страницы рус - но печатать из под ардуино сможет только после обработки кодером из cp1251 в cp866
}

void CLS() // очистка экрана ESC[2J (1B 5B 32 4A)
{
Serial.print(F("\x1B[2J")); delay (100);
}

void set_cursor (uint8_t _row, uint8_t _column) // установить курсор ESC[row;columnH (1B 5B row 3B column 48)
{
Serial.print(F("\x1B[") + String(_row) + ";" + String(_column) + "H");
}

void print_on_VFD(uint8_t _row, uint8_t _column, const String& txtVFD) // Строка, колонка, текст
{
set_cursor(_row, _column); Serial.print(txtVFD);
}

void print_on_VFDa(uint8_t _row, const String& txtVFD, String what) // Строка, текст, чем забиваем пустоту
{
String utf8_cp866 = UTF8_CP866(txtVFD);
int iii = NUMofCOL - utf8_cp866.length();
if (iii > 0)
{
int left = (iii) / 2;
while (left--) utf8_cp866 = what + utf8_cp866;
while (utf8_cp866.length() < NUMofCOL) utf8_cp866 = utf8_cp866 + what;
}
else
{
utf8_cp866 = utf8_cp866.substring(0, NUMofCOL); // берем с "нулевого" до размера экрана
}
set_cursor(_row, 1); Serial.print(utf8_cp866);
}

void write_on_VFD(uint8_t _row, uint8_t _column, int16_t symbolVFD) // Строка, колонка, текст
{
set_cursor(_row, _column); Serial.write(symbolVFD);
}

String UTF8_CP866(const String& txtVFD)
{
char out[NUMofCOL]; // создали массив символов для вывода
int j=-1;

for (int i=0; i < txtVFD.length() + 1; i++) //-- Пробегаемся по всем символам, учитываем отличия между таблицами
{
j++;
if (txtVFD==0xd0) // коды русских букв все двухбайтовые, первым из которых является 0xd0 (208) или 0xd1 (209)
{
i++; // следующий конвертим
if (txtVFD >= 0x90 && txtVFD <= 0xBF) out[j] = txtVFD - 0x10;
else if(txtVFD == 0x81) out[j] = 0xf0; // буква Ё
}
else if (txtVFD==0xd1)
{
i++; // следующий конвертим
if (txtVFD >= 0x80 && txtVFD <= 0x8F) out[j] = txtVFD + 0x60;
else if(txtVFD == 0x91) out[j] = 0xf1; // буква ё
}
else out[j] = txtVFD[i];
}
return out;
}

void init_VFDser()
{
Serial.begin(9600, SERIAL_8O1, SERIAL_TX_ONLY, 1, true);
Serial.swap(); //Пины переместятся на GPIO15/D8 (TX) и GPIO13/D7 (RX)
Serial.flush();
analogWriteFreq(5000);
analogWrite(BK_pin, 250 - analogRead(A0)/7); // Яркость
CLS();
Set_country_code(0x35);
print_on_VFDa(1, F("Загружается версия"), " ");
print_on_VFDa(2, nSketch, " ");
delay(1000);
}
#endif